简介
决策树是一种非常有用的分类方法,它能够对新出现的对象给出正确的分类。比起文本描述的规则,我们更希望能使用图形来直观展示决策树的结果,这就是本文介绍的重点——决策树结果可视化。
方法一
使用基础包绘图函数plot()
- 优点:适用于各种模型,如raprt模型、C5.0模型等
- 缺点:图形复杂,规则显示不明确
这里使用我自己通过问卷调查获得的一份hospital数据,做一个简单示范。大家可以将自己的数据进行导入(如何导入?可见推文:R数据科学|第八章内容介绍),替换hospital数据。
使用C5.0()
进行决策树模型的构建,因变量需要转化为因子类型,并将结果保存到hospital_model变量中,之后用plot()
进行可视化。plot()中包含许多调整图形的参数,详细内容可以参考庄闪闪编写的R语言可视化手册,这里不做过多解释。
hospital_model <- C5.0(hospital_train[,-9],as.factor(hospital_train$use))
plot(hospital_model)
从这副图片可以发现,用plot进行决策树可视化效果不是很好,可以说很丑陋了!因此更推荐后面两种方法。
方法二
使用rpart.plot
包绘图函数rpart.plot()
- 优点:图形美观,规则显示清晰明了
- 缺点:只适用于rpart模型
rpart.plot()函数的内部参数结构如下:
代码语言:javascript复制rpart.plot(x = stop("no 'x' arg"),
type = 2, extra = "auto",
under = FALSE, fallen.leaves = TRUE,
digits = 2, varlen = 0, faclen = 0, roundint = TRUE,
cex = NULL, tweak = 1,
clip.facs = FALSE, clip.right.labs = TRUE,
snip = FALSE,
box.palette = "auto", shadow.col = 0,
...)
内部参数过多,就不做详细解释。如果对这部分内容感兴趣可以通过帮助文档进行查询(?rpart.plot)
以hospital数据为例,使用rpart()
进行决策树模型的构建,并将结果保存到model变量中,在这个模型中,~左端是因变量,~右端的"."表示将除了use以外的所有变量作为自变量,你可以根据数据来调整自己的模型结构。之后用rpart.plot()
进行可视化。
library(rpart.plot)
model <- rpart(hospital$use~.,data = hospital)
rpart.plot(model)
如何你想改变决策树的样式,可以通过调整type
参数来实现。
rpart.plot(model,type = 0)
如何你想改变各结点的颜色,可以通过调整box.palette
参数来实现。若只添加一种颜色,则全部结点颜色相同。
rpart.plot(model,type = 0,box.palette = "yellow")
如果想要区分不同的结点,可以为box.palette
设置多种颜色。
rpart.plot(model,type = 2,box.palette = c("pink", "gray"))
方法三
使用rattle
包绘图函数fancyRpartPlot()
- 优点:图形更加精美,操作简单
- 缺点:只适用于rpart模型,需要加载的包比较多
fancyRpartPlot()函数的内部参数结构如下:
代码语言:javascript复制fancyRpartPlot(model, main="", sub, caption, palettes, type=2, ...)
各参数含义如下表:
参数 | 作用 |
---|---|
model | 一个rpart对象 |
main | 图形标题 |
sub | 副标题。默认值是一个包含日期、时间和用户名的字符串。 |
captions | 图形右下角的说明 |
palettes | 颜色调整 |
types | 图形样式 |
以方法二中的model为例,使用fancyRpartPlot()进行结果可视化。
代码语言:javascript复制library(rpart)
library(tibble)
library(bitops)
library(rattle)
library(rpart.plot)
library(RColorBrewer)
model <- rpart(hospital$use~.,data = hospital)
fancyRpartPlot(model)
如果想要调整各结点的颜色,可以通过调整palette
参数来实现,其用法与方法二中的box.palette
相同。
fancyRpartPlot(model,palettes=c("Greys", "Blues"))
如果你想手动调整图片内部的细节,你可以参考这篇推文:AI不会,没关系,R可以导出PPT格式的图形啦,导入到ppt内然后修改图片内部元素。