0

我正在尝试根据字符串值属性绘制 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
4

2 回答 2

1

如果字符串变量表示分类变量的级别,那么它们应该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)

J4.8 树

于 2019-02-19T15:11:23.887 回答
0

该算法是否允许字符串回归器?我试过了,它抛出了一个错误。使用字符串,您可以尝试一次性编码,例如 "White"=1; “黑色”=2 等,例如

MyData2 <- iris
MyData2$Colour <- 2
MyData2[MyData2$Species == "setosa", ]$Colour <- 1
m3 <- J48(Species~ ., data = MyData2)
plot(m3)
于 2019-02-18T18:38:45.603 回答