我正在尝试根据字符串值属性绘制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
如果字符串变量表示分类变量的级别,那么它们应该变成R中的factor()
。然后,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)
算法是否允许字符串回归量?我尝试了它,它扔了一个错误。使用字符串,您可以尝试单热编码,例如“White”= 1; “黑色”= 2等,例如
MyData2 <- iris
MyData2$Colour <- 2
MyData2[MyData2$Species == "setosa", ]$Colour <- 1
m3 <- J48(Species~ ., data = MyData2)
plot(m3)