【问题标题】:R C5.0 get rule and probability for every leafR C5.0 获取每片叶子的规则和概率
【发布时间】:2016-09-20 11:19:46
【问题描述】:

我认为在我研究解决这个问题的过程中,我已经非常接近了。我正在为 C5.0 包寻找类似 @​​987654321@ 的东西。

SO 答案中提供的方法适用于 party 对象。但是 C5.0 包不支持as.party。在我进一步的研究中,我发现this comment C5.0 包的维护者已经编写了该函数,但没有导出它。

我认为这应该可以工作,但不幸的是建议的函数 C50:::as.party.C5.0(mod1) 抛出错误:

error in as.data.frame.default(x[[i]], optional = TRUE) : 
    cannot coerce class ""function"" to a data.frame

任何解决此错误的建议表示赞赏。 让我们使用以下示例:

library(C50)
p = iris[1:4]
t = factor(iris$Species)
model = C50::C5.0(p,t)
#summary(model)

modParty = C50:::as.party.C5.0(model)

【问题讨论】:

    标签: r machine-learning decision-tree party


    【解决方案1】:

    使用C5.0() 的默认方法而不是公式方法时似乎会出现问题。如果您使用后者,则 as.party() 转换成功,您可以为此应用所有方法:

    model <- C5.0(Species ~ ., data = iris)
    modParty <- C50:::as.party.C5.0(model)
    modParty
    ## Model formula:
    ## Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
    ## 
    ## Fitted party:
    ## [1] root
    ## |   [2] Petal.Length <= 1.9: setosa (n = 50, err = 0.0%)
    ## |   [3] Petal.Length > 1.9
    ## |   |   [4] Petal.Width <= 1.7
    ## |   |   |   [5] Petal.Length <= 4.9: versicolor (n = 48, err = 2.1%)
    ## |   |   |   [6] Petal.Length > 4.9: virginica (n = 6, err = 33.3%)
    ## |   |   [7] Petal.Width > 1.7: virginica (n = 46, err = 2.2%)
    ## 
    ## Number of inner nodes:    3
    ## Number of terminal nodes: 4
    

    然后选择您链接的其他讨论中的预测路径:

    pathpred(modParty)[c(1, 51, 101), ]
    ##       response prob.setosa prob.versicolor prob.virginica
    ## 1       setosa  1.00000000      0.00000000     0.00000000
    ## 51  versicolor  0.00000000      0.97916667     0.02083333
    ## 101  virginica  0.00000000      0.02173913     0.97826087
    ##                                                              rule
    ## 1                                             Petal.Length <= 1.9
    ## 51  Petal.Length > 1.9 & Petal.Width <= 1.7 & Petal.Length <= 4.9
    ## 101                        Petal.Length > 1.9 & Petal.Width > 1.7
    

    我不确定为什么该方法不适用于默认界面。但可能设置所需的模型框架更加困难。不过,您可以考虑向C50 维护者询问这个问题。

    【讨论】:

    • 如果这解决了您的问题,请考虑接受答案,以便在 SO 上正确标记,谢谢。
    • 抱歉有点慢。这是对原始问题的一个很好且非常方便的答案。这就是为什么我决定将其标记为已接受。但是,为什么我直到现在才将其标记为已接受,是因为我对未导出的功能仍有一些问题。但由于这是一个不同的话题,我打开了另一个问题:stackoverflow.com/q/37515454/3695715。但也许你也可以在那里帮助我?我已经尝试了我能想到的一切......再次感谢您对此的回答!
    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2016-10-27
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多