r - 使用 J48 算法绘制基于字符串的决策树进行预测
问题描述
我正在尝试根据字符串值属性绘制 J48 决策树并预测目标变量(分类),我已经看到很多基于数值绘制决策树的示例,但我没有遇到过基于字符串的情况。
这是样本数据集,J48 决策树工作正常。
library(RWeka)
library(party)
MyData2 <- read.csv(file="iris.csv", header=TRUE, sep=",")
m3 <- J48(species~ ., data = MyData2)`enter code here`
if(require("party", quietly = TRUE)) plot(m3)
sepal_length sepal_width petal_length petal_width species
5.1 3.5 1.4 0.2 setosa
4.9 3 1.4 0.2 setosa
7 3.2 4.7 1.4 versicolor
6.4 3.2 4.5 1.5 versicolor
6.3 3.3 6 2.5 virginica
5.8 2.7 5.1 1.9 virginica
如果我将标题 sepal_length、sepal_width 和 sepal_color 重命名,并将值作为“白色”、“黑色”以及不同颜色组合到 setosa、versicolor 和 virginca,我如何绘制决策树并预测目标物种值。
假设我有如下数据集,
sepal_color sepal_color petal_color petal_color species
white black white black setosa
white yellow white yellow versicolor
green brown green brown virginica
解决方案
如果字符串变量表示分类变量的级别,那么它们应该factor()
在 R 中转换为 a。然后,J48()
可以适当地处理这些(就像其他回归函数一样)。
但是,如果字符串包含自由文本,则不直接支持这些。在调用J48()
.
以基于分类变量的分类为例,让我们将iris
数据中的变量转化为具有三个水平的因子low
, medium
, high
(将每个变量在对应的分位数处分成三个大小相等的组):
## load data and convert to factors via cut()
data("iris", package = "datasets")
for(i in 1:4) iris[[i]] <- cut(iris[[i]],
quantile(iris[[i]], 0:3/3),
labels = c("low", "medium", "high")
)
head(iris, 3)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 low high low low setosa
## 2 low medium low low setosa
## 3 low medium low low setosa
## fit and plot J4.8 tree
j48 <- J48(Species ~ ., data = iris)
plot(j48)
推荐阅读
- c# - 使用将调用 Windows 服务的控制台应用程序更新 WPF 应用程序
- prolog - 如何理解 Prolog 中的递归搜索?
- java - Intellij 中的结帐分支和排除文件
- c++ - 为什么我的程序在 if 语句中不返回 0?
- java - 如何将上下文/bean 配置添加到 JAXRSServerFactoryBean
- excel - 如何在excel VBA中将空白单元格留空?
- java - Java 软件设计:制作通用树 - 打印库
- android - 在 MS Windows 下获取有效的 Android Vulkan 示例
- php - 使用 Guzzle SOAP 请求但不断接收未设置为对象实例的对象引用
- ruby-on-rails - 在 Rails 中使用 Thread.current 和 Unicorn 是否安全?