首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制经过训练的rpart决策树模型的变量重要性?

如何绘制经过训练的rpart决策树模型的变量重要性?
EN

Stack Overflow用户
提问于 2019-05-25 20:09:36
回答 2查看 5.3K关注 0票数 2

我使用rpart训练了一个模型,我想生成一个图,显示它用于决策树的变量的变量重要性,但我不知道如何生成。

我能够提取变量重要性。我尝试过ggplot,但没有显示任何信息。我尝试对它使用plot()函数,但它只给出了一个平面图。我也尝试了plot.default,它稍微好一点,但仍然是我想要的。

下面是rpart模型训练:

代码语言:javascript
复制
argIDCART = rpart(Argument ~ ., 
                  data = trainSparse, 
                  method = "class")

将变量重要性放入数据框中。

代码语言:javascript
复制
argPlot <- as.data.frame(argIDCART$variable.importance)

下面是它打印的内容的一部分:

代码语言:javascript
复制
       argIDCART$variable.importance
noth                             23.339346
humanitarian                     16.584430
council                          13.140252
law                              11.347241
presid                           11.231916
treati                            9.945111
support                           8.670958

我想画一张图,显示变量/功能名称及其数字重要性。我就是不能让它这么做。它似乎只有一列。我试着用分离函数把它们分开,但也做不到。

代码语言:javascript
复制
ggplot(argPlot, aes(x = "variable importance", y = "feature"))

只打印空白。

其他的情节看起来真的很糟糕。

代码语言:javascript
复制
plot.default(argPlot)

看起来像是绘制点,但没有放入变量名。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-25 23:19:59

由于没有可重复使用的示例,因此我使用ggplot2包和其他用于数据操作的包,基于自己的R数据集安装了我的响应。

代码语言:javascript
复制
library(rpart)
library(tidyverse)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
df <- data.frame(imp = fit$variable.importance)
df2 <- df %>% 
  tibble::rownames_to_column() %>% 
  dplyr::rename("variable" = rowname) %>% 
  dplyr::arrange(imp) %>%
  dplyr::mutate(variable = forcats::fct_inorder(variable))
ggplot2::ggplot(df2) +
  geom_col(aes(x = variable, y = imp),
           col = "black", show.legend = F) +
  coord_flip() +
  scale_fill_grey() +
  theme_bw()

代码语言:javascript
复制
ggplot2::ggplot(df2) +
  geom_segment(aes(x = variable, y = 0, xend = variable, yend = imp), 
               size = 1.5, alpha = 0.7) +
  geom_point(aes(x = variable, y = imp, col = variable), 
             size = 4, show.legend = F) +
  coord_flip() +
  theme_bw()

票数 4
EN

Stack Overflow用户

发布于 2019-05-25 20:23:33

如果您想要查看变量名称,最好将它们用作x轴上的标签。

代码语言:javascript
复制
plot(argIDCART$variable.importance, xlab="variable", 
    ylab="Importance", xaxt = "n", pch=20)
axis(1, at=1:7, labels=row.names(argIDCART))

(可能需要调整窗口大小才能正确查看标签。)

如果您有许多变量,您可能希望轮换变量名称,以便不会重叠。

代码语言:javascript
复制
par(mar=c(7,4,3,2))
plot(argIDCART$variable.importance, xlab="variable", 
    ylab="Importance", xaxt = "n", pch=20)
axis(1, at=1:7, labels=row.names(argIDCART), las=2)

数据

代码语言:javascript
复制
argIDCART = read.table(text="variable.importance
noth                             23.339346
humanitarian                     16.584430
council                          13.140252
law                              11.347241
presid                           11.231916
treati                            9.945111
support                           8.670958", 
header=TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56304698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档