【问题标题】:R- Random Forest - Importance / varImPlotR- 随机森林 - 重要性 / varImPlot
【发布时间】:2015-09-17 20:21:01
【问题描述】:

我对具有重要性/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.) 为什么第二个版本没有剧情?

非常感谢!! 埃德

【问题讨论】:

    标签: r tree random-forest


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2015-05-19
      • 2020-11-10
      • 2021-05-09
      • 2021-08-29
      • 2017-08-29
      • 1970-01-01
      • 2019-01-06
      • 2017-10-17
      相关资源
      最近更新 更多