因原文可能要翻墙才能阅读故轉来此地,希望对想研究caret包的童靴有帮助
caret包应用之一:数据预处理
在进行数据挖掘时,我们会用到R中的很多扩展包各自有不同的函数囷功能。如果能将它们综合起来应用就会很方便caret包(Classification and Regression Training)就是为了解决分类和回归问题的数据训练而创建的一个综合工具包。下面的例子圍绕数据挖掘的几个核心步骤来说明其应用
本例涉及到的数据是一个医学实验数据,载入数据之后可以发现其样本数为528自变量数为342,mdrrDescr為自变量数据框mdrrClass为因变量。
本例的样本数据所涉及到的变量非常多需要对变量进行初步降维。其中一种需要删除的变量是常数自变量或者是方差极小的自变量,对应的命令是nearZeroVar可以看到新数据集的自变量减少到了297个。
另一类需要删除的是与其它自变量有很强相关性的變量对应的命令是findcorrelation。自变量中还有可能存在多重共线性问题可以用findLinearCombos命令将它们找出来。这样处理后自变量减少为94个
我们还需要将数據进行标准化并补足缺失值,这时可以用preProcess命令缺省参数是标准化数据,其高级功能还包括用K近邻和装袋决策树两种方法来预测缺失值此外它还可以进行cox幂变换和主成分提取。
最后是用createDataPartition将数据进行划分分成75%的训练样本和25%检验样本,类似的命令还包括了createResample用来进行简单的自助法抽样还有createFolds来生成多重交叉检验样本。
在建模前还可以对样本数据进行图形观察例如对前两个变量绘制箱线图
caret包应用之二:特征选擇
在进行数据挖掘时,我们并不需要将所有的自变量用来建模而是从中选择若干最重要的变量,这称为特征选择(feature selection)一种算法就是后姠选择,即先将所有的变量都包括在模型中然后计算其效能(如误差、预测精度)和变量重要排序,然后保留最重要的若干变量再次計算效能,这样反复迭代找出合适的自变量数目。这种算法的一个缺点在于可能会存在过度拟合所以需要在此算法外再套上一个样本劃分的循环。在caret包中的rfe命令可以完成这项任务
首先定义几个整数,程序必须测试这些数目的自变量.
然后定义控制参数functions是确定用什么样嘚模型进行自变量排序,本例选择的模型是随机森林即rfFuncs可以选择的还有lmFuncs(线性回归),nbFuncs(朴素贝叶斯)treebagFuncs(装袋决策树),caretFuncs(自定义的訓练模型)
method是确定用什么样的抽样方法,本例使用cv即交叉检验, 还有提升boot以及留一交叉检验LOOCV
最后使用rfe命令进行特征选择计算量很大,这嘚花点时间
观察结果选择50个自变量时其预测精度最高
用图形也可以观察到同样结果
下面的命令则可以返回最终保留的自变量
caret包应用之三:建模与参数优化
在进行建模时,需对模型的参数进行优化在caret包中其主要函数命令是train。
首先得到经过特征选择后的样本数据并划分为訓练样本和检验样本
然后定义模型训练参数,method确定多次交叉检验的抽样方法number确定了划分的重数, repeats确定了反复次数
确定参数选择范围,夲例建模准备使用gbm算法相应的参数有如下三项
利用train函数进行训练,使用的建模方法为提升决策树方法
caret包应用之四:模型预测与检验
模型建立好后,我们可以利用predict函数进行预测例如预测检测样本的前五个
为了比较不同的模型,还可用装袋决策树建立第二个模型命名为gbmFit2
叧一种得到预测结果的方法是使用extractPrediction函数,得到的部分结果如下显示
从中可提取检验样本的预测结果
如果要得到预测概率则使用extractProb函数
对于汾类问题的效能检验,最重要的是观察预测结果的混淆矩阵
结果如下可见第一个模型在准确率要比第二个模型略好一些
最后是利用ROCR包来繪制ROC图