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

What does negative %IncMSE in RandomForest package mean?

我将 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 

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

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

问题 2 - 负的 %IncMSE 是否显示 "bad" 变量?

IncMSE:
计算方法是首先计算整个模型的 MSE。我们称之为 MSEmod。在此之后,对于每个变量(数据集中的列),值被随机打乱(排列),以便创建 "bad" 变量并计算新的 MSE。 IE。想象一下,对于一列,您有第 1、2、3、4、5 行。排列后,这些最终将随机变为 4、3、1、2、5。排列后(所有其他列保持完全相同,因为我们要检查 col1's 重要性),正在计算模型的新 MSE,我们称之为 MSEcol1(以类似的方式你将有 MSEcol2MSEcol3 但让我们保持简单,这里只处理 MSEcol1)。我们预计,由于第二个 MSE 是使用完全随机的变量创建的,因此 MSEcol1 会高于 MSEmod(MSE 越高越差)。因此,当我们取两者 MSEcol1 - MSEmod 的差值时,我们通常期望一个正数。在您的情况下,负数表明随机变量效果更好,这表明该变量可能不够预测,即不重要。

请记住,我给你的这个描述是高水平的,实际上是缩放两个 MSE 值并计算百分比差异。但高层次的故事是这样的。

算法形式:

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

希望现在已经清楚了!