繁体   English   中英

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

[英]R- Random Forest - Importance / varImPlot

我的重要性/ varImPlot函数与随机森林有关,我希望有人可以帮助我吗?

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

1.)

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

显示图和“重要性”数据,但是仅显示“ IncNodePurity”。 而且数据与绘图和数据不同,我尝试使用“比例”,但没有用。

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)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

在此处输入图片说明

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM