Построение дерева решений на основе строк с алгоритмом 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

2 ответа

Если строковые переменные представляют уровни категориальной переменной, то их следует превратить в factor() в R. Тогда 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)
Другие вопросы по тегам