分享

利用R语言美化决策树

 生物_医药_科研 2019-06-28

最近在做一些特征提取的工作,过程中因为要展现一些决策树的逻辑规则,所以就简单的绘制了生成的树。BUT!plot画出来的风格简直不能忍,于是乎就去查找了各种美化方法,今天要说的就是我是怎么美化一颗树的。

先来看看最初画出来的图!要画的数据集大概是这个样子的。

head(kyphosis)

  Kyphosis Age Number Start

1   absent  71      3     5

2   absent 158      3    14

3  present 128      4     5

4   absent   2      5     1

5   absent   1      4    15

6   absent   1      2    16

kyphosis数据集是从儿童接受外科脊柱矫正手术中来的,数据集有4列、81行。

1.kyphosis:采取手术后依然出现脊柱后凸(驼背)
2.Age:单位是“月”
3.Number:代表进行手术的脊柱椎骨的数目
4.Start:在脊柱上从上往下数、参与手术的第一节椎骨所在的序号

现在来画图:

library(rpart)

fit <- rpart(Kyphosis ~ Age +  Start, data = kyphosis)

par(mar = rep(0.1, 4))

plot(fit, branch = 1)

text(fit, use.n = TRUE)

感觉太单调了,不够美观!瞬间对树没有任何研究的兴趣了。稍微变化一下看看。

调用rpart.plot包进行绘图。

library(rpart.plot)

rpart.plot(fit,type=4,extra=1)

这个好看多了,再试试rattle包的fancyRpartPlot函数。

library(rattle)

fancyRpartPlot(fit)

总的来说fancyRpartPlot函数与rpart.plot函数画出来的效果相差不大,但是每个节点图还是稍微有修改,包含的信息量更佳丰富,同时图形作了阴影修饰。

最后看看决策树生成的逻辑:

fit

n= 81 

node), split, n, loss, yval, (yprob)

      * denotes terminal node

 1) root 81 17 absent (0.79012346 0.20987654)  

   2) Start>=8.5 62  6 absent (0.90322581 0.09677419)  

     4) Start>=14.5 29  0 absent (1.00000000 0.00000000) *

     5) Start< 14.5 33  6 absent (0.81818182 0.18181818)  

      10) Age< 55 12  0 absent (1.00000000 0.00000000) *

      11) Age>=55 21  6 absent (0.71428571 0.28571429)  

        22) Age>=111 14  2 absent (0.85714286 0.14285714) *

        23) Age< 111 7  3 present (0.42857143 0.57142857) *

   3) Start< 8.5 19  8 present (0.42105263 0.57894737) *

虽然也能看出个所以然来,BUT!还是不够高逼格,再来改改!

幸运的是rattle包自带规则解析函数(rattle确实好用),asRules()。

asRules(fit)

 Rule number: 3 [Kyphosis=present cover=19 (23%) prob=0.58]

   Start< 8.5

 Rule number: 23 [Kyphosis=present cover=7 (9%) prob=0.57]

   Start>=8.5

   Start< 14.5

   Age>=55

   Age< 111

 Rule number: 22 [Kyphosis=absent cover=14 (17%) prob=0.14]

   Start>=8.5

   Start< 14.5

   Age>=55

   Age>=111

 Rule number: 10 [Kyphosis=absent cover=12 (15%) prob=0.00]

   Start>=8.5

   Start< 14.5

   Age< 55

 Rule number: 4 [Kyphosis=absent cover=29 (36%) prob=0.00]

   Start>=8.5

   Start>=14.5

直接解析出好看的规则格式,一目了然,爱不释手。

—————————————

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多