RandomForest包中的负%IncMSE是什么意思?

mql*_*ner 9 statistics r prediction random-forest

我使用RandomForest来解决回归问题.我importance(rf,type=1)以前得到变量的%IncMSE,其中一个有负%IncMSE.这是否意味着此变量对模型不利?我搜索了互联网以获得一些答案,但我没有找到明确的答案.我还在模型的摘要中找到了一些奇怪的东西(附后见下文),虽然我定义ntrees为800 ,但似乎只使用了一棵树.

模型:

rf<-randomForest(var1~va2+var3+..+var35,data=d7depo,ntree=800,keep.forest=FALSE, importance=TRUE)

summary(rf)
                Length Class  Mode     
call                6  -none- call     
type                1  -none- character
predicted       26917  -none- numeric  
mse               800  -none- numeric  
rsq               800  -none- numeric  
oob.times       26917  -none- numeric  
importance         70  -none- numeric  
importanceSD       35  -none- numeric  
localImportance     0  -none- NULL     
proximity           0  -none- NULL     
ntree               1  -none- numeric  
mtry                1  -none- numeric  
forest              0  -none- NULL     
coefs               0  -none- NULL     
y               26917  -none- numeric  
test                0  -none- NULL     
inbag               0  -none- NULL     
terms               3  terms  call 
Run Code Online (Sandbox Code Playgroud)

Lyz*_*deR 26

问题1 - 为什么ntree显示1?:

summary(rf)显示rf变量中包含的对象的长度.这意味着rf$ntree长度为1.如果您在控制台上键入,rf$tree则会看到它显示为800.

问题2 - 否定%IncMSE显示"坏"变量?

IncMSE:
计算方法是首先计算整个模型的MSE.我们称之为MSEmod.在此之后,对于每个变量(数据集中的列),随机混洗(置换)值,以便创建"坏"变量并计算新的MSE.也就是说,对于一列你有1,2,3,4,5行.在排列之后,这些将随机变为4,3,1,2,5.在排列之后(由于我们想要检查col1's重要性,所有其他列保持完全相同),正在计算模型的新MSE,让我们调用它MSEcol1(以类似的方式调用它MSEcol2,MSEcol3但让我们保持简单并且仅处理MSEcol1这里).我们可以预期,因为第二个MSE是使用完全随机的变量创建的,所以MSEcol1会高于MSEmod(MSE越高越差).因此,当我们采用两者的差异时MSEcol1- MSEmod我们通常期望一个正数.在你的情况下,负数表明随机变量工作得更好,这表明变量可能不够预测,即不重要.

请记住,我给你的这个描述是高级别的,实际上两个MSE值是按比例缩放的,并且正在计算百分比差异.但高层次的故事是这样的.

在算法形式:

  1. 计算模型MSE
  2. 对于模型中的每个变量:
    • 置换变量
    • 根据变量排列计算新模型MSE
    • 区分模型MSE和新模型MSE
  3. 将结果收集到列表中
  4. 根据%IncMSE的值对变量的重要性进行排序.价值越高越好

希望现在很清楚!

  • 很高兴帮助罗恩:)。如果您想更深入地研究,可以在[此处](http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm)进行查看。这是来自Breiman本人(随机森林的发明者),他准确地解释了在没有(很多)数学公式的情况下,它们如何用简单的英语工作。这正是用于实现的rf包的参考。 (2认同)
  • @LyzandeR当然,在简单的解释中,计算得出的值应该是“ MSEcol1-MSEmod”,因为如果“ MSEcol1&gt; MSEmod”,就像如果变量1有任何用处,那么其差值将是正的(因此MSEmod-MSEcol1在您的答案中应该为负... (2认同)