我认为在研究解决这个问题的过程中,我非常接近。我正在为C5.0软件包寻找类似this的东西。

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)

最佳答案

使用默认方法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维护者咨询。

08-25 04:54