为什么递归特征消除程序没有摆脱无用的预测变量?

问题描述 投票:2回答:1

我试图选择变量y的最佳预测变量

x1和x3是y的预测值,x2与x1相关,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))

enter image description here

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
  • 为什么递归特征消除程序告诉我保留所有预测变量,即使在查看x2和x4无效的变量重要性时非常清楚?
r random-forest r-caret feature-selection rfe
1个回答
2
投票

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

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

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

此外,重要性并不能告诉您预测因子如何与响应相关联。

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

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

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

Link1

Link2

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.