首先定义几个整数,程序必须测试这些数目的自变量.
subsets = c(20,30,40,50,60,70,80)然后定义控制参数,functions是确定用什么样的模型进行自变量排序,本例选择的模型是随机森林即rfFuncs,可以选择的还有lmFuncs(线性回归),nbFuncs(朴素贝叶斯),treebagFuncs(装袋决策树),caretFuncs(自定义的训练模型)。
method是确定用什么样的抽样方法,本例使用cv即交叉检验, 还有提升boot以及留一交叉检验LOOCV
ctrl= rfeControl(functions = rfFuncs, method = "cv",verbose = FALSE, returnResamp = "final")最后使用rfe命令进行特征选择,计算量很大,这得花点时间
Profile = rfe(newdata3, mdrrClass, sizes = subsets, rfeControl = ctrl)观察结果选择50个自变量时,其预测精度最高
print(Profile)
Variables Accuracy Kappa AccuracySD KappaSD Selected
用图形也可以观察到同样结果20 0.8200 0.6285 0.04072 0.08550 30 0.8200 0.6294 0.04868 0.10102 40 0.8295 0.6487 0.03608 0.07359 50 0.8313 0.6526 0.04257 0.08744 * 60 0.8277 0.6447 0.03477 0.07199 70 0.8276 0.6449 0.04074 0.08353 80 0.8275 0.6449 0.03991 0.08173 94 0.8313 0.6529 0.03899 0.08006
plot(Profile)
下面的命令则可以返回最终保留的自变量
Profile$optVariables
> Profile = rfe(newdata3, mdrrClass, sizes = subsets, rfeControl = ctrl)
回复删除错误于library(e1071) : there is no package called 'e1071'
这个语句出错是因为没有找到caret所需的e1071这个包,建议先卸下caret包,重新安装,安装时加上dependencies参数。如下
删除install.packages('caret',dependencies=T)
直接安装e1071后解决这个问题了。多谢
删除