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

person louis    schedule 18.02.2019    source источник


Ответы (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)

Дерево J4.8

person Achim Zeileis    schedule 19.02.2019

Разрешает ли алгоритм строковые регрессоры? Я попробовал, и он выдал ошибку. Со строками вы можете попробовать однократное кодирование, например, «Белый» = 1; «Черный» = 2 и т. д., например.

MyData2 <- iris
MyData2$Colour <- 2
MyData2[MyData2$Species == "setosa", ]$Colour <- 1
m3 <- J48(Species~ ., data = MyData2)
plot(m3)
person Jonny Phelps    schedule 18.02.2019