基于字符串的决策树和J48算法进行预测

问题描述 投票:0回答:2

我正在尝试根据字符串值属性绘制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 decision-tree party rweka j48
2个回答
1
投票

如果字符串变量表示分类变量的级别,那么它们应该变成R中的factor()。然后,J48()可以适当地处理这些(就像其他回归函数一样)。

但是,如果字符串包含自由文本,则不直接支持这些字符串。在调用J48()之前,必须对某些数字或因子变量进行预处理。

作为基于分类变量的分类示例,让我们将iris数据中的变量转换为具有三个级别lowmediumhigh的因子(在相应的分位数处将每个变量切割成三个大小相等的组):

## 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)

J4.8 tree


0
投票

算法是否允许字符串回归量?我尝试了它,它扔了一个错误。使用字符串,您可以尝试单热编码,例如“White”= 1; “黑色”= 2等,例如

MyData2 <- iris
MyData2$Colour <- 2
MyData2[MyData2$Species == "setosa", ]$Colour <- 1
m3 <- J48(Species~ ., data = MyData2)
plot(m3)
© www.soinside.com 2019 - 2024. All rights reserved.