首页 > 解决方案 > R:将“C50 模型”转换为“rpart”模型

问题描述

我正在使用 R 编程语言。我想看看是否有办法使用“rpart.plot”库来绘制不属于“rpart”的对象(用于制作“决策树”)。

例如,这是经典的“rpart”和“rpart.plot”库的实际应用:

#load libraries
    library(rpart)
    library(rpart.plot)

#load data
    data(iris)

#fit rpart model (i.e. decision tree)
    r = rpart(Species ~., data=iris)

#plot model
    rpart.plot(r)

在此处输入图像描述

问题:我正在研究一个多类分类问题(如上面的示例 - 我只是用著名的“iris 数据集”来说明这一点),其中“rpart”运行时间过长(我等了 10 个小时,而“rpart”代码仍然没有运行)。

但是,我在 R 中找到了另一个名为“c50”的库,它能够立即创建类似的模型:

#load library 
library(C50)

#run same model
tree_mod <- C5.0(x = iris[, -5], y = iris$Species, rules = TRUE)

#view model
summary(tree_mod)

plot(tree_mod)

在此处输入图像描述

问题:无论如何,是否可以将“rpart.plot”库与“C50”库中的对象一起使用?

例如:

#my attempt
rpart.plot(tree_mod)

Error in rpart.plot(tree_mod) : Not an rpart object

我的想法: 可以使用“C50”库提取不同的规则:

summary(tree_mod)

Rule 1: (50, lift 2.9)
    Petal.Length <= 1.9
    ->  class setosa  [0.981]

Rule 2: (48/1, lift 2.9)
    Petal.Length > 1.9
    Petal.Length <= 4.9
    Petal.Width <= 1.7
    ->  class versicolor  [0.960]

Rule 3: (46/1, lift 2.9)
    Petal.Width > 1.7
    ->  class virginica  [0.958]

Rule 4: (46/2, lift 2.8)
    Petal.Length > 4.9
    ->  class virginica  [0.938]

类似的规则也可以从“rpart”库中提取:

 rpart.rules(r)

    Species  seto vers virg                                               
     setosa [1.00  .00  .00] when Petal.Length <  2.5                     
 versicolor [ .00  .91  .09] when Petal.Length >= 2.5 & Petal.Width <  1.8
  virginica [ .00  .02  .98] when Petal.Length >= 2.5 & Petal.Width >= 1.8

是否有可能以某种方式从“C50”库中“重新格式化规则”,使其与“rpart.plot”兼容?

谢谢

标签: rtreedata-visualizationdecision-treerpart

解决方案


推荐阅读