1、创建训练集、validation和测试集数据的三种方法:
将iris数据集分为训练集数据和测试集数据
1)> dim(iris)
[1]150 5
>index <- sample(1:nrow(iris), 100)
>iris.train <- iris[index, ]
>dim(iris.train)
[1]100 5
>iris.test <- iris[-index, ]
>dim(iris.test)
[1]50 5
2)对数据分成两部分,70%训练数据,30%检测数据:
> sample(2, nrow(iris), replace=T, prob=c(0.7,0.3))与> sample(1:2, nrow(iris), replace=T,prob=c(0.7,0.3))等价
从iris数据集中去70%的数据用1标记,30%的数据用2标记
> sample(nrow(iris),100) 从iris数据集中随机取100个数据作为样本
3)用caret包的createDataPartition来完成这一工作: 推荐使用此方法
>install.packages("caret")
> library(caret)
> inTrain <- createDataPartition(y=wdbc$diagnosis, p=0.8, list=F) 为数据拆分函数,y为一个向量的结果,p为要获取训练集的百分比,list为T时结果为列表
> train_wdbc<- wdbc[index, ]
> test_wdbc <-wdbc[-index, ]
createresample()函数:创建一个或多个Bootstrap样本;
Createfolds()函数:将数据分为K组;
createtimeslices()函数:创建交叉验证样本信息可用于时间序列数据。
使用createDataPartition 的好处在于,它能将低熵数据集随机抽取出我们需要的训练集来。比如我们的数据集共有 100 个样本点,前50 个是一类,后 50 个是一类。我们为了让训练集里两类样本都各有一些,必然希望从前 50 个样本点随机抽取一定比例,后 50 个里也随机抽取相应比例的样本点来组成训练集。这个手动过程因为涉及到人的主观意识,从而不能保证完全随机化。而 createDataPartition 会自动从 y 的各个 level 随机取出等比例的数据来,组成训练集,给我们省了很多事。
3、切分数据集
#1、查看因变量的分布
table(traindata$y)
prop.table(table(traindata$y))
#由上表看出,对于响应变量SeriousDlqin2yrs,存在明显的类失衡问题,SeriousDlqin2yrs等于1的观测为9879,仅为所有观测值的6.6%。因此我们需要对非平衡数据进行处理,在这里可以采用SMOTE算法,用R对稀有事件进行超级采样。
#2、利用caret包中的createDataPartition(数据分割功能)函数将数据随机分成相同的两份
library(caret)
index <-createDataPartition(traindata$y, time=1, p=0.5, list=F)
train <-traindata[index, ]
test <-traindata[-index, ]
#对于分割后的训练集和测试集均有74865个数据,分类结果的平衡性如下
prop.table(table(train$y))
prop.table(table(test$y))
#两者的分类结果是平衡的,仍然有6.6%左右的代表,我们仍然处于良好的水平。因此可以采用这份切割的数据进行建模及预测。