r - 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”兼容?
谢谢
解决方案
推荐阅读
- python - 正则表达式 jupyter 笔记本
- python - 从 span 标签上方的文本节点获取文本
- javascript - 如何使用 Node.js 读取具有不同名称的文件?
- r - 如何将数据框的一行与向量值绘制为曲线?
- python - 在数据框中创建条件
- javascript - JavaScript 中的 If 条件存在一些问题
- docker - Docker,将容器的文件链接到主机
- android - 使用动画将视图从随机 x 和 y 位置移动到特定的 X 和 Y 位置
- php - 如何在声明数组php中添加if函数
- syntax - 如何在 MMT 中给出绝对 URI?获取“未绑定令牌:http”和“格式错误的常量引用”