我在阅读Caret包时看到了以下代码;
createDataPartition(y, times = 1, p = 0.5, list = TRUE, groups = min(5,length(y)))
我对”times”参数感到疑惑。所以,如果我使用这段代码,
inTrain2 <- createDataPartition(y = MyData$Class ,times=3, p = .70,list = FALSE)training2 <- MyData[ inTrain2,] # ≈ %67 (训练集)testing2<- MydData[-inTrain2[2],] # ≈ %33 (测试集)
这会导致过拟合问题吗?还是说这是在使用某种无偏重采样方法?
非常感谢您的帮助。
编辑:
我想提一下,如果我使用这段代码;
inTrain2 <- createDataPartition(y = MyData$Class ,times=1, p = .70,list = FALSE) training2<- MyData[ inTrain2,] #142个样本 # ≈ %67 (训练集) testing2<- MydData[-inTrain2,] #69个样本 # ≈ %33 (测试集)
我将得到211个样本,并且大约有52%的准确率。另一方面,如果我使用这段代码;
inTrain2 <- createDataPartition(y = MyData$Class ,times=3,p =.70,list = FALSE) training2<- MyData[ inTrain2,] # ≈ %67 (训练集) # 426个样本 testing2<- MydData[-inTrain2[2],] # ≈ %33 (测试集) # 210个样本
我将得到536个样本,并且大约有98%的准确率。
谢谢您。
回答:
不清楚您为什么在这问题中混淆了过拟合;times
参数仅仅指的是您想要多少个不同的分区(文档)。我们来看一个使用iris
数据集的例子:
library(caret)data(iris)ind1 <- createDataPartition(iris$Species, times=1, list=FALSE)ind2 <- createDataPartition(iris$Species, times=2, list=FALSE)nrow(ind1)# 75nrow(ind2)# 75head(ind1) Resample1[1,] 1[2,] 5[3,] 7[4,] 11[5,] 12[6,] 18head(ind2) Resample1 Resample2[1,] 2 1[2,] 3 4[3,] 6 6[4,] 7 9[5,] 8 10[6,] 11 11
两个索引的长度都是75(因为我们使用了默认参数p=0.5
,即初始数据集的一半行数)。ind2
的列(不同的样本)之间是独立的,并且不同iris$Species
的类比被保留,例如:
length(which(iris$Species[ind2[,1]]=='setosa'))# 25length(which(iris$Species[ind2[,2]]=='setosa'))# 25