如何使用示例函数将数据分割为训练/testing集

我刚刚开始使用R,我不知道如何将我的数据集与以下示例代码结合使用:

sample(x, size, replace = FALSE, prob = NULL) 

我有一个数据集,我需要进行培训(75%)和testing(25%)设置。 我不知道我应该把什么信息放入x和大小? x是数据集文件,大小是多less个样本?

有很多方法来实现数据分区。 要获得更完整的方法,请查看caret包中的createDataPartition函数。

这是一个简单的:

 data(mtcars) ## 75% of the sample size smp_size <- floor(0.75 * nrow(mtcars)) ## set the seed to make your partition reproductible set.seed(123) train_ind <- sample(seq_len(nrow(mtcars)), size = smp_size) train <- mtcars[train_ind, ] test <- mtcars[-train_ind, ] 

这可以通过以下方式轻松完成:

 set.seed(101) # Set Seed so that same sample can be reproduced in future also # Now Selecting 75% of data as sample from total 'n' rows of the data sample <- sample.int(n = nrow(data), size = floor(.75*nrow(data)), replace = F) train <- data[sample, ] test <- data[-sample, ] 

通过使用caTools包:

 require(caTools) set.seed(101) sample = sample.split(data$anycolumn, SplitRatio = .75) train = subset(data, sample == TRUE) test = subset(data, sample == FALSE) 

这几乎是相同的代码,但更好看

 bound <- floor((nrow(df)/4)*3) #define % of training and test set df <- df[sample(nrow(df)), ] #sample rows df.train <- df[1:bound, ] #get training set df.test <- df[(bound+1):nrow(df), ] #get test set 

我将“a”分成火车(70%)和testing(30%)

  a # original data frame library(dplyr) train<-sample_frac(a, 0.7) sid<-as.numeric(rownames(train)) # because rownames() returns character test<-a[-sid,] 

DONE

 library(caret) intrain<-createDataPartition(y=sub_train$classe,p=0.7,list=FALSE) training<-m_train[intrain,] testing<-m_train[-intrain,] 

我的解决scheme基本上与dickoa相同,但更容易理解:

 data(mtcars) n = nrow(mtcars) trainIndex = sample(1:n, size = round(0.7*n), replace=FALSE) train = mtcars[trainIndex ,] test = mtcars[-trainIndex ,] 

我会用这个dplyr ,使它非常简单。 它确实需要在你的数据集中有一个idvariables,不pipe怎么说,这不仅仅是创build集合,还是为了在你的项目中进行追踪。 添加它,如果不包含已经。

 mtcars$id <- 1:nrow(mtcars) train <- mtcars %>% dplyr::sample_frac(.75) test <- dplyr::anti_join(mtcars, train, by = 'id') 

如果你input:

 ?sample 

如果将启动帮助菜单来解释样本函数的参数意味着什么。

我不是专家,但这里有一些我有的代码:

 data <- data.frame(matrix(rnorm(400), nrow=100))<br> splitdata <- split(data[1:nrow(data),],sample(rep(1:4,as.integer(nrow(data)/4))))<br> test <- splitdata[[1]]<br> train <- rbind(splitdata[[1]],splitdata[[2]],splitdata[[3]])<br> 

这会给你75%的火车和25%的testing。

在一个函数下面,创build一个相同大小的子样本list这个list不是你想要的,但可能certificate对他人有用。 在我的情况下,在较小的样本上创build多个分类树来testing过度拟合:

 df_split <- function (df, number){ sizedf <- length(df[,1]) bound <- sizedf/number list <- list() for (i in 1:number){ list[i] <- list(df[((i*bound+1)-bound):(i*bound),]) } return(list) } 

例如:

 x <- matrix(c(1:10), ncol=1) x # [,1] # [1,] 1 # [2,] 2 # [3,] 3 # [4,] 4 # [5,] 5 # [6,] 6 # [7,] 7 # [8,] 8 # [9,] 9 #[10,] 10 x.split <- df_split(x,5) x.split # [[1]] # [1] 1 2 # [[2]] # [1] 3 4 # [[3]] # [1] 5 6 # [[4]] # [1] 7 8 # [[5]] # [1] 9 10 

在R中使用caTools包示例代码如下:

 data split = sample.split(data$DependentcoloumnName, SplitRatio = 0.6) training_set = subset(data, split == TRUE) test_set = subset(data, split == FALSE) 

使用基数R.函数runif生成从0到1的均匀分布的值。通过改变截止值(下例中的train.size),您将总是具有大约相同百分比的低于截止值的随机logging。

 data(mtcars) set.seed(123) train.size<-.7 train.ind<-runif(nrow(mtcars))>train.size 
Interesting Posts