[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
请把以下不需要的部份删除
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
如题
最近在用randomForest这个package做分类预测 y是binary variable
跑出结果后用getTree抓其中一颗决策树出来
输出大概就是
left daughter right daughter split var split point status prediction
这样
然后有几点想请教版友:
1. getTree的split pint判断 stack overflow有人说
若split point是2.5 则<=2.5往左走 >2.5往右走
但是若split var是factor的话呢?
像是三个levels "学生" "老师" "教官"
若直接这样getTree的话 split point那会变成乱数 ex. 3
所以我后来试着给他数字 学生为1 老师为2 教官为3
split point变成2.5 1.5之类
但在解释上说不过去 也无法套用stack overflow里的人的逻辑
若split var是年龄区间还可以解释
例如20岁以下为1 20~30岁是2 30岁以上是3
split point为2.5时 我还能理解为<=2.5是30岁以下 >2.5是30岁以上
当然 这是现阶段的理解
ex.
set.seed(100)
data <- data.frame(y=sample(c("好", "不好"), 100, replace=TRUE),
x1=sample(c("学生", "老师", "教官"), 100, replace=TRUE),
x2=sample(c("20岁以下", "20~30岁", "30岁以上"), 100, replace=TRUE)
)
library(randomForest)
rf <- randomForest(y~., data=data, ntree=10, proximity=TRUE)
tree <- getTree(rf, labelVar=TRUE)
然后tree的结果就如上面所述
请问我究竟该如何理解这个结果呢?
(2015/07/25 09:39)
补充:根据?getTree得到split point的解释是
x1有3个类别 split point若为3 则是指(1,1,0)
因为1*2^0+1*2^1+0*2^3=3
然后学生和老师都归类到左边
所以判断依据是"是否为教官" 否就丢到左边这样吗?
2. 最后是画图的问题
我在网络上找到一位网友自己写了一个函式叫to.dendrogram
程式附在下面
但是画出来的决策树只有split point的名称 ex.学生 教师
可是我希望把split point也画上去 ex. <=2.5, <=1.5等
目前知道的绘图有几个package:rpart, tree之类
但那都要用rpart或ctree来跑"一颗"决策树
然后再用package内的绘图函式画图
但是跟随机森林的那10颗(ntree=10)决策数是不一样的吧!
不要求很精美的图 主要是想修改网友的to.dendrogram的code
弄成有split point的结果
但是attr(rval, "edgetext")那边一直搞不定@@
或是这里有大神能提供更好的解法
感激不尽!!
总结一下问题
1. randomForest中getTree的split var为factor时 split point该如何判断?
2. to.dendrogram的图中 如何修改code才能把split point放上去?
这些问题困扰小弟好久了~"~
再次感谢
[程式范例]:
http://pastie.org/10311492
[系统环境]:
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)
locale:
[1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
[2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
[3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Traditional)_Taiwan.950
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tree_1.0-36 data.table_1.9.4 randomForest_4.6-10
loaded via a namespace (and not attached):
[1] magrittr_1.5 plyr_1.8.3 tools_3.2.1 reshape2_1.4.1 Rcpp_0.11.6
[6] stringi_0.5-5 stringr_1.0.0 chron_2.3-47
[关键字]:
randomForest 随机森林 getTree