Получение числового результата из функции предиката () вместо факторов - PullRequest
0 голосов
/ 05 октября 2019

Я использую дерево решений для классификации качества вин. Когда я запускаю predict(), он выводит число вместо желаемого коэффициента. Я использую код ниже:

library(rpart)

wine <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep = ";")

wine$taste <- ifelse(wine$quality < 5, "yucky", "tasty")
wine$taste[wine$quality == 5] <- "fine"
wine$taste <- as.factor(wine$taste)

set.seed(123)

sample <- sample(nrow(wine), 0.7 * nrow(wine))
train <- wine[sample, ]
test <- wine[-sample, ]

DecisionTree <- rpart(taste ~ ., data = train)

pred <- predict(DecisionTree, test)

Я получаю что-то похожее на это:

head(pred, 10)
   fine tastey yucky
6     1      0     0
14    1      0     0
18    1      0     0
23    1      0     0
24    1      0     0
25    0      1     0
26    1      0     0
30    0      1     0
33    1      0     0
35    1      0     0

Я пытаюсь вычислить модель точности, используя формулу:

acc <- table(pred, test$taste)
sum(diag(acc)) / sum(acc)

И я получаю сообщение об ошибке: аргументы не имеют одинаковую длину, что имеет смысл из-за формата вывода пред. Я думаю, что вывод должен выглядеть примерно так:

6     14     18     23     24     25     26     30     33 
  fine   fine   fine   fine   fine   fine   fine tasty   fine 
Levels: fine tasty yucky

Я не совсем уверен, что я делаю неправильно. Я подозреваю, что это связано с функцией rpart(). Когда я делаю тот же процесс, но со случайным лесом, он работает отлично. Любая помощь будет по достоинству оценена.

1 Ответ

0 голосов
/ 05 октября 2019

Вам необходимо указать type = "class" в predict. От ?predict.rpart:

Если type = "class":

(для дерева классификаций) коэффициент классификаций, основанный на ответах.

Вы можете подтвердить, что он дает желаемый результат:

pred <- predict(DecisionTree, test, type = "class") 

head(pred, 10)
#    3     7    12    14    15    21    22    23    27    30 
# fine  fine  fine  fine  fine tasty  fine  fine  fine tasty 
#Levels: fine tasty yucky
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...