最近在做一些特征提取的工作,过程中因为要展现一些决策树的逻辑规则,所以就简单的绘制了生成的树。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:采取手术后依然出现脊柱后凸(驼背) 现在来画图: 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 直接解析出好看的规则格式,一目了然,爱不释手。 ————————————— |
|