我将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是否显示“错误”变量?
IncMSE:
计算方法是通过最初计算整个模型的MSE。我们称之为MSEmod
。此后,对于每个变量(数据集中的列),值将随机进行混洗(排列),以便创建“坏”变量并计算新的MSE。即想象一下,对于一列,您有行1,2,3,4,5。排列后,这些最终将是随机的4,3,1,2,5。排列后(由于我们要检查col1's
的重要性,所有其他列保持完全相同),因此正在计算模型的新MSE,我们将其称为MSEcol1
(以类似的方式,您将得到,MSEcol2
,但让我们保持简单,只在这里处理MSEcol3
。我们可以预期,由于第二个MSE是使用完全随机的变量创建的,因此MSEcol1
会高于MSEcol1
(MSE越高,效果越差)。因此,当我们采用两个MSEmod
-MSEcol1
的差时,我们通常期望一个正数。在您的情况下,负数表明随机变量的效果更好,这表明该变量可能没有足够的可预测性,即不重要。
请记住,我给您的描述是高级别的,实际上两个MSE值都是按比例缩放的,并且正在计算百分比差异。但是高层的故事是这样的。
以算法形式:
计算模型MSE
对于模型中的每个变量:
置换变量
根据变量排列计算新模型MSE
了解MSE模型与新模型MSE之间的区别
将结果收集在列表中
根据%IncMSE的值对变量的重要性进行排名。值越大越好
希望现在清楚了!