我使用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
答案 0 :(得分:24)
问题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值是按比例缩放的,并且正在计算百分比差异。但是高层次的故事是这样的。
以算法形式:
希望现在很清楚!