【问题标题】:Display more nodes in decision tree in R?在R中的决策树中显示更多节点?
【发布时间】:2017-04-28 21:59:22
【问题描述】:

根据我有 7 个节点的结果,我想在结果中显示超过 2 个节点,但现有的似乎我继续显示 2 个节点。

有没有办法以更好的方式显示更多节点?

 library(rpart)

 tr1<-rpart(leaveyrx~marstx.f+age+jobtitlex.f+organizationunitx.f+fteworkschedule+nationalityx.f+eesubgroupx.f+lvlx.f+sttpmx.f+ staff2ndtpmx.f+staff3rdtpmx.f+staff4thtpmx.f, method="class",data=btree) 

 printcp(tr1)

 plotcp(tr1) 

 summary(tr1)

 plot(tr1, uniform=TRUE, margin = 0.2, main="Classification Tree for Exploration") text(tr1, use.n=TRUE, all=TRUE, cex=.5)

*转发

【问题讨论】:

    标签: r decision-tree


    【解决方案1】:

    您的问题可能不是您的情节,而是您的决策树模型。你能解释一下为什么你期望有 7 个节点吗?当您只有两个(叶)节点时,这可能意味着您的模型仅使用一个预测变量并使用二元分类作为响应变量。这可能是由于预测变量与响应变量具有 1:1 的关系所致。例如,如果您要预测性别(男、女),而您的响应变量之一是性别 (M,F)。在这种情况下,不需要决策树模型,因为您可以只使用预测变量。也许在复制响应变量的数据的预处理中发生了一些事情。以下是一些需要注意的事项:

    1) 计算正确分类率 (CCR)。如果它是 0,那么你有一个完美的模型。

    yhat<-predict(tr1, type="class") # Model Predictions
    sum(yhat != btree$leaveyrx)/nrow(btree) # CCR
    

    2) 查看您的模型使用的预测器。仔细检查此变量是否已正确处理。尝试将其从模型中排除。

    tr1$variable.importance
    

    3) 如果您绝对确定变量计算正确并且应该在模型中使用,请尝试增加您的 cp 值。默认值为 0.01。但是即使 cp 值很高,决策树也会快速运行。在修改 cp 值时,还要考虑其他调整参数。 ?rpart.control

    control <- rpart.control(minbucket = 20, cp = 0.0002, maxsurrogate = 0, usesurrogate = 0, xval = 10)
    tr1 <- rpart(leaveyrx~marstx.f+age+jobtitlex.f+organizationunitx.f+fteworkschedule+nationalityx.f+eesubgroupx.f+lvlx.f+sttpmx.f+ staff2ndtpmx.f+staff3rdtpmx.f+staff4thtpmx.f,
                 data=btree,
                 method = "class",
                 control = control)
    

    4) 一旦你有一棵有很多节点的树,你就需要修剪它。可能您的最佳模型实际上仅由一个变量驱动,因此只有两个节点

    # Plot the cp
    plotcp(tr1)
    printcp(tr1) # Printing cp table (choose the cp with the smallest xerror)
    
    # Prune back to optimal size, according to plot of CV r^2
    tr1.pruned <- prune(tr1, cp=0.001)  #approximately the cp corresponding to the best size
    

    5) rpart 库是绘制决策树的好资源。那里有很多很棒的文章,但这是 rpart 上的一篇很好的文章:http://www.milbo.org/rpart-plot/prp.pdf

    发布一些模型摘要也可能会有所帮助。

    【讨论】:

    • 您好,非常感谢。我不确定您指的是以下信息的摘要; Variables actually used in tree construction: [1] age sttpmx.f Root node error: 32/94 = 0.34043 n= 94 CP nsplit rel error xerror xstd 1 0.21875 0 1.00000 1.00000 0.14357 2 0.06250 1 0.78125 0.87500 0.13856 3 0.01000 2 0.71875 0.84375 0.13709
    • 对不起,我需要做 2 个帖子,因为数量有限。的字符。 /// 变量重要性 sttpmx.f staff2ndtpmx.f age staff3rdtpmx.f staff4thtpmx.f 36 27 18 11 2 nationalityx.f eesubgroupx.f marstx.f 2 2 2
    • 嗯,由于格式的原因,很难阅读您评论中的值。但是看起来你CP = 1。你能确认一下吗?总结,我的意思是总结(tr1)的输出。考虑编辑您的帖子,而不是将其粘贴在 cmets 中以获得更好的可见性。
    • Hi@Jeffrey,指的是正确分类率 (CCR) 脚本,我们是否在测试数据上使用它?在 btree 上使用时我得到了一个零,但警告“在 is.na(e2) 中:is.na() 应用于‘NULL’类型的非(列表或向量)”其次,没有值CP。结果:第一个根在 0 和 1 之间拆分-> 第二级节点拆分在 0 和 0 之间-> 第三级节点:拆分在 0 和 0 之间-> 第 4 级拆分 0&1。 (我添加了更多变量)。你以前遇到过这样的结果吗?对我来说,在 0 而不是 0 和 1 上拆分看起来很奇怪。
    • 通常,您会希望使用您的测试数据集来验证您的模型并计算您的 CCR。但是,决策树很棒,因为 rpart 库会自动交叉验证您的火车数据……因此您可以安全地在您的火车数据上验证您的模型。无论如何,奇怪的是您的模型在零处分裂。我的怀疑是你的数据有问题——你的模型只喜欢 1 个变量,并且你已经强制进行了额外的拆分。如果我的回答解决了您的问题,请将其标记为已解决。否则,请说明为什么您认为您的模型应该有超过 1 个拆分/节点。
    猜你喜欢
    • 2018-07-20
    • 2015-01-31
    • 2019-02-08
    • 1970-01-01
    • 2016-01-10
    • 2016-05-18
    • 2014-08-21
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多