【问题标题】:Plot feature importance computed by Ranger function绘制由 Ranger 函数计算的特征重要性
【发布时间】:2018-03-05 17:26:31
【问题描述】:

我需要使用 ranger 函数绘制变量重要性,因为我有一个大数据表,而 randomForest 在我的研究案例中不起作用。

这是我的代码:

library(ranger)
set.seed(42)
model_rf <- ranger(Sales ~ .,data = data[,-1],importance = "impurity")

然后我创建新的数据框DF,其中包含来自上面的代码,如下所示

> v<-as.vector(model_rf$variable.importance$Importance)
> w<-(as.vector((row.names(df))))
> DF<-cbind(w,v)
> DF<-as.data.frame(DF)
> DF
                           w                v
1                  DayOfWeek 376393213095.426
2                  Customers 1364058809531.96
3                       Open 634528877741.021
4                      Promo 261749509069.205
5               StateHoliday 5196666310.34041
6              SchoolHoliday  6522969049.3763
7                   DateYear  7035399071.0376
8                  DateMonth 20134820116.2625
9                    DateDay 37631766745.2306
10                  DateWeek 32834962167.9479
11                 StoreType 31568433413.5718
12                Assortment 20257406597.8358
13       CompetitionDistance  111847579772.77
14 CompetitionOpenSinceMonth 46332196019.0118
15  CompetitionOpenSinceYear 45548903472.6485
16                    Promo2                0
17           Promo2SinceWeek 50666744628.7906
18           Promo2SinceYear 40964066303.0407
19           CompetitionOpen 39927447341.0351
20                 PromoOpen  28319356095.063
21            IspromoinSales 2844220121.08598

但是我需要根据上面显示的结果来绘制这样的图表:

编辑

正如@Sam 建议的那样,我尝试修改此代码:

> ggplot(DF, aes(x=reorder(w,v), y=v,fill=v))+ 
+   geom_bar(stat="identity", position="dodge")+ coord_flip()+
+   ylab("Variable Importance")+
+   xlab("")+
+   ggtitle("Information Value Summary")+
+   guides(fill=F)+
+   scale_fill_gradient(low="red", high="blue")

但我收到此错误:

错误:将离散值提供给连续刻度另外:还有 有 42 个警告(使用 warnings() 来查看) >

请问我该怎么做? 提前谢谢!

【问题讨论】:

  • 请以我们可以直接读取的格式粘贴您的数据框。比如pastebin.com
  • @Axeman,来自library(ranger)
  • 类似ggplot(stack(model_rf$variable.impotance), aes(ind, values)) + geom_col() + coord_flip()
  • @Axeman,不,它不起作用
  • @Sam,请看编辑后的问题

标签: r ggplot2


【解决方案1】:

这是未经测试的,但我认为这应该给你你所追求的:

 ggplot(model_rf$variable.importance, aes(x=reorder(variable,importance), y=importance,fill=importance))+ 
      geom_bar(stat="identity", position="dodge")+ coord_flip()+
      ylab("Variable Importance")+
      xlab("")+
      ggtitle("Information Value Summary")+
      guides(fill=F)+
      scale_fill_gradient(low="red", high="blue")

【讨论】:

  • 感谢您的建议。但看看编辑过的问题。事实上,我创建了新的数据框以使事情变得更容易。然后我尝试调整您的代码,但它不起作用!
  • 怎么不行?你遇到了什么错误。编辑您的原始答案,向我展示您如何尝试调整代码以及您收到的错误消息。
  • 给我看str(DF) 看起来你的变量之一是类型因子。
  • &gt; str(DF) 'data.frame': 21 obs. of 2 variables: $ w: Factor w/ 21 levels "Assortment","CompetitionDistance",..: 11 6 13 14 20 19 10 8 7 9 ... $ v: Factor w/ 21 levels "0","111847579772.77",..: 12 3 19 6 18 20 21 4 11 10 ...
  • 尝试制作variables的类字符。并且该数字应该是numeric 类型而不是Factor 类型。 DF$v &lt;- as.numeric(DF$v)
猜你喜欢
  • 2017-11-14
  • 1970-01-01
  • 2021-09-07
  • 2017-10-25
  • 2019-11-05
  • 2020-08-04
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多