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
(以类似的方式你将有 MSEcol2
、MSEcol3
但让我们保持简单,这里只处理 MSEcol1
)。我们预计,由于第二个 MSE 是使用完全随机的变量创建的,因此 MSEcol1
会高于 MSEmod
(MSE 越高越差)。因此,当我们取两者 MSEcol1
- MSEmod
的差值时,我们通常期望一个正数。在您的情况下,负数表明随机变量效果更好,这表明该变量可能不够预测,即不重要。
请记住,我给你的这个描述是高水平的,实际上是缩放两个 MSE 值并计算百分比差异。但高层次的故事是这样的。
算法形式:
- 计算模型 MSE
- 对于模型中的每个变量:
- 置换变量
- 根据变量排列计算新模型的MSE
- 看模型MSE和新模型MSE的区别
- 将结果收集到列表中
- 根据%IncMSE 的值对变量的重要性进行排序。数值越大越好
希望现在已经清楚了!
我将 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
(以类似的方式你将有 MSEcol2
、MSEcol3
但让我们保持简单,这里只处理 MSEcol1
)。我们预计,由于第二个 MSE 是使用完全随机的变量创建的,因此 MSEcol1
会高于 MSEmod
(MSE 越高越差)。因此,当我们取两者 MSEcol1
- MSEmod
的差值时,我们通常期望一个正数。在您的情况下,负数表明随机变量效果更好,这表明该变量可能不够预测,即不重要。
请记住,我给你的这个描述是高水平的,实际上是缩放两个 MSE 值并计算百分比差异。但高层次的故事是这样的。
算法形式:
- 计算模型 MSE
- 对于模型中的每个变量:
- 置换变量
- 根据变量排列计算新模型的MSE
- 看模型MSE和新模型MSE的区别
- 将结果收集到列表中
- 根据%IncMSE 的值对变量的重要性进行排序。数值越大越好
希望现在已经清楚了!