3

我正在尝试选择变量y的最佳预测因子

x1x3是 y 的预测变量,x2x1相关,x4是虚拟变量。

library(randomForest);library(caret)
set.seed(123)
x1<-rnorm(1000,sd=.3,mean=-2)
x3<-rnorm(1000,sd=1,mean=.3)
x2<-jitter(x1,amount=1)
x4<-rnorm(1000,sd=4,mean=3)

y<-jitter(3*x1+jitter(x3,amount=2),amount=2)
varImpPlot(randomForest(y~x1+x2+x3+x4,importance=T))

在此处输入图像描述

ctrl <- rfeControl(functions = rfFuncs,number=3)
x<-data.frame(x1,x2,x3,x4)
rfe(x,y,rfeControl=ctrl,sizes=1:4,method="rf")

#...
#The top 4 variables (out of 4):
#x3, x1, x2, x4

cor(x)
#             x1          x2         x3          x4
# x1  1.00000000  0.45351111 0.08647944 -0.02470308
# x2  0.45351111  1.00000000 0.03927750 -0.08157149
# x3  0.08647944  0.03927750 1.00000000  0.04357772
# x4 -0.02470308 -0.08157149 0.04357772  1.00000000
  • 为什么递归特征消除程序告诉我保留所有预测变量,即使在查看x2x4无用的变量重要性时非常清楚?
4

1 回答 1

2

varImpPlot应该使用您可视化的重要性有一个独立的方法来删除不重要的变量。

首先,具有更多标签的连续变量和分类变量将具有更高的重要性。这可能会产生误导。

其次,相关预测变量的变量重要性可能较低。有时,这与您想要的相反。

此外,重要性并没有告诉您预测变量如何响应相关。

我建议使用置换方法,在置换一个变量(例如:sample(x4))后通过重新估计模型来检查重要性,检查性能如何变化,例如比较mse(置换前后)。

简单的想法是,如果变量无用,则性能不会有太大变化。

最后,这里有一些有用的读物​​。

链接1

链接2

于 2018-09-05T08:55:04.660 回答