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

标签 r random-forest r-caret feature-selection rfe

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

x1x3 是 y 的预测因子,x2x1x4 是一个虚拟变量。

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
  • 为什么递归特征消除过程告诉我保留所有预测变量,即使在查看变量重要性时非常清楚 x2x4 是无用的?

最佳答案

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

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

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

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

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

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

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

Link1

Link2

关于r - 为什么递归特征消除程序没有消除无用的预测变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180697/

相关文章:

r - 插入符号包自定义指标

html - 如何并排放置两个文件输入 R Shiny

python - 如何在随机森林中绘制树而不显示 "samples"和 "value"?

python - "feature_importances_"在 Scikit-learn 的 RandomForestRegressor 中是如何排序的

machine-learning - scikit-learn 的决策树实现中如何保证 min_samples_leaf ?

R,插入符 : what does returnResamp mean in trainControl?

r - 如何从循环和 if 语句创建二进制变量

r - 导出等高线以通过 WMS 为他们服务

r - 关于 nls fit in R 的问题 - 为什么这如此奇怪?

r - 在 R 中创建堆叠预测模型