本例涉及到的数据是一个医学实验数据,载入数据之后可以发现其样本数为528,自变量数为342,mdrrDescr为自变量数据框,mdrrClass为因变量。
library(caret)本例的样本数据所涉及到的变量非常多,需要对变量进行初步降维。其中一种需要删除的变量是常数自变量,或者是方差极小的自变量,对应的命令是nearZeroVar,可以看到新数据集的自变量减少到了297个。
data(mdrr)
zerovar=nearZeroVar(mdrrDescr)另一类需要删除的是与其它自变量有很强相关性的变量,对应的命令是findcorrelation。自变量中还有可能存在多重共线性问题,可以用findLinearCombos命令将它们找出来。这样处理后自变量减少为94个。
newdata1=mdrrDescr[,-zerovar]
descrCorr = cor(newdata1)我们还需要将数据进行标准化并补足缺失值,这时可以用preProcess命令,缺省参数是标准化数据,其高级功能还包括用K近邻和装袋决策树两种方法来预测缺失值。此外它还可以进行cox幂变换和主成分提取。
highCorr = findCorrelation(descrCorr, 0.90)
newdata2 = newdata1[, -highCorr]
comboInfo = findLinearCombos(newdata2)
newdata2=newdata2[, -comboInfo$remove]
Process = preProcess(newdata2)最后是用createDataPartition将数据进行划分,分成75%的训练样本和25%检验样本,类似的命令还包括了createResample用来进行简单的自助法抽样,还有createFolds来生成多重交叉检验样本。
newdata3 = predict(Process, newdata2)
inTrain = createDataPartition(mdrrClass, p = 3/4, list = FALSE)在建模前还可以对样本数据进行图形观察,例如对前两个变量绘制箱线图
trainx = newdata3[inTrain,]
testx = newdata3[-inTrain,]
trainy = mdrrClass[inTrain]
testy = mdrrClass[-inTrain]
featurePlot(trainx[,1:2],trainy,plot='box')
运行
回复删除newdata2=newdata2[, -comboInfo$remove]
报告错误:
错误于-comboInfo$remove : 一进列运算符的参数不对
comboInfo = findLinearCombos(newdata2)
删除newdata2=newdata2[, -comboInfo$remove]
这两条语句目的是要找出线性相关的变量,然后从数据中除去。因为没有找到线性相关变量,所以返回空集合。由此产生报错,所以这两条语句可以略去不运行,不影响后面的代码。
多谢
删除多谢
回复删除great!
回复删除