数据集划分—-训练集和测试集方法

1.随机采样sample()—例:iris数据

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


Index = sample(nrow(iris),size = nrow(iris)*0.8)
trian_data = iris[Index,]  #作为训练集
test_data = iris[-Index,]   #作为测试集

类似的还有dplyr包中的sample_n函数 > sample_n(tbl, size, replace = FALSE, weight = NULL, .env = NULL)

2. carte包–createDatePartition 来进行分区抽样

inTrain =createDataPartition(响应变量y ,p=0.8,list=FALSE)

  • inTrain : 产生对应数据集行的索引
  • y 要分类或预测的变量,
  • p 对应y的数据个数的概率

    library(caret)
    set.seed(2012) #随机种子
    Index =createDataPartition(iris$Species,p=0.8,list=FALSE) # 不知道为何? iris[,5]不能使用
    trian_data = iris[Index,]  #作为训练集
    test_data = iris[-Index,]   #作为测试集
    # 同样用上面第一种方法 产生数据集即可
    

3. dplyr::sample_frac()函数

sample_frac(tbl, size = 1, replace = FALSE, weight = NULL, .env = NULL)

sample_frac(iris, 0.5, replace = TRUE):随机选取部分数据(占总体的0.5)记录。

library(dplyr)
train_data = sample_frac(iris, 0.8)#这里直接选取了iris数据集中的0.8的部分,假设作为训练集
test_data = setdiff(iris,train_data)#用差集 把test数据挑选出来

4 . caTools::sample.split()函数

library(caTools)
Index = sample.split(iris[,5],SplitRatio = 0.8)

train_data = subset(iris,Index==TRUE)
test_data = subset(iris,Index==FALSE)

5. scorecard::split_df()函数

library(scorecard)
data_list = split_df(iris,ratio = 0.8)
train_data = data_list$train
test_data = data_list$test

6. 交叉验证数据

library(caret)
folds = createFolds(iris$Species,k=10)
str(folds)

train= iris[-folds$Fold01,]
test =iris[folds$Fold01,]

次;