R语言|数据预处理--6切分数据集:采样

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为要获取训练集的百分比,listT时结果为列表

> 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%左右的代表,我们仍然处于良好的水平。因此可以采用这份切割的数据进行建模及预测。

 

你可能感兴趣的:(R语言,数据清洗,r语言,数据清洗)