R-随机森林 - 重要性/ varImPlot

时间:2015-09-17 20:21:01

标签: r tree random-forest

我有一个带有重要性/ varImPlot功能的随机森林的问题,我希望有人能帮助我吗?

我尝试编码版本,但我对(不同的)结果感到困惑:

1。)

rffit = randomForest(price~.,data=train,mtry=x,ntree=500)
rfvalpred = predict(rffit,newdata=test)
varImpPlot(rffit)
importance(rffit)

显示“重要性”的图和数据,但仅显示“IncNodePurity”。并且数据与情节和数据不同,我尝试使用" Scale"但是没有用。

2)。

rf.analyzed_data = randomForest(price~.,data=train,mtry=x,ntree=500,importance=TRUE)
yhat.rf = predict(rf.analyzed_data,newdata=test)
varImpPlot(rf.analyzed_data)
importance(rf.analyzed_data)

在这种情况下,它不再产生任何情节,重要性数据显示“%IncMSE”和“IncNodePurity”数据,但“IncNodePurity”数据与第一个代码不同? 问题: 1.)知道为什么“IncNodePurity”的数据不同? 2.)任何想法为什么在第一个版本中没有显示“%IncMSE”? 3.)为什么第二个版本中没有显示情节?

非常感谢!! 编

1 个答案:

答案 0 :(得分:2)

1)IncNodePurity来自损失函数,只需训练模型即可免费获得该测量。在不利方面,这是一个更不稳定的估计,因为每个模型运行的结果可能不同。它也更有偏见,因为它有利于多层次的变量。我猜你发现差异是由于随机性造成的。

2)VI,%IncMSE需要一点额外的时间来计算,因此是可选的。大概数据集中的所有值都需要进行混洗,并且每个变量需要为每个树时间预测一次OOB样本。由于设计了randomForest包,您必须在训练期间计算VI。必须将重要性设置为TRUE。 varImpPlot无法绘制它,因为它尚未计算。

3)不确定。在这个代码示例中,我至少看到了两个图。

library(randomForest)

#data 
X = data.frame(replicate(6,rnorm(1000)))
y = with(X, X1^2 + sin(X2*pi) + X3*X4)
train = data.frame(y=y,X=X)
#training
rf1=randomForest(y~.,data=train,importance=F)
rf2=randomForest(y~.,data=train, importance=T)
#plotting importnace
varImpPlot(rf1) #plot only with IncNodePurity

enter image description here

varImpPlot(rf2) #bi-plot also with %IncMSE

enter image description here

相关问题