插入封装和过度拟合中的数据分区

时间:2018-03-09 11:16:42

标签: r machine-learning r-caret resampling data-partitioning

我正在阅读插入包,我看到了那个代码;

createDataPartition(y, times = 1, p = 0.5, list = TRUE, groups = min(5,
length(y)))

我想知道“时代”的表达方式。所以,如果我使用这段代码,

inTrain2 <- createDataPartition(y = MyData$Class ,times=3, p = .70,list = FALSE)

training2 <- MyData[ inTrain2,]    # ≈ %67 (train)
testing2<- MydData[-inTrain2[2],]  # ≈ %33 (test)

是否会导致过度拟合问题?或者是用于某种重采样方法(无偏)?

非常感谢提前。

编辑:

我想提一下,如果我使用此代码;

 inTrain2 <- createDataPartition(y = MyData$Class ,times=1, p = .70,list = FALSE) 
 training2<- MyData[ inTrain2,] #142 samples # ≈ %67 (train) 
  testing2<- MydData[-inTrain2,] #69 samples # ≈ %33 (test)

我将获得211个样本和≈%52准确率,另一方面,如果我使用此代码;

  inTrain2 <- createDataPartition(y = MyData$Class ,times=3,p =.70,list = FALSE) 
   training2<- MyData[ inTrain2,]     # ≈ %67 (train) # 426 samples 
    testing2<- MydData[-inTrain2[2],] # ≈ %33 (test)  # 210 samples

我将获得536个样本,并且≈%98准确率。

谢谢。

1 个答案:

答案 0 :(得分:1)

目前尚不清楚为什么要在这个问题上混合过度拟合; times只是指您想要多少个不同的分区(docs)。让我们看一下iris数据的示例:

library(caret)
data(iris)

ind1 <- createDataPartition(iris$Species, times=1, list=FALSE)
ind2 <- createDataPartition(iris$Species, times=2, list=FALSE)

nrow(ind1)
# 75
nrow(ind2)
# 75

head(ind1)
     Resample1
[1,]         1
[2,]         5
[3,]         7
[4,]        11
[5,]        12
[6,]        18

head(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'))
# 25
length(which(iris$Species[ind2[,2]]=='setosa'))
# 25