2015-12-21 1 views
2

У меня есть набор данных, который выглядит следующим образом:Создать двоичный результат со случайным лесом

TEAM1   TEAM2  EXPG1 EXPG2   Gewonnen  
ADO Den Haag Groningen 1.5950 1.2672  1 

теперь я пытаюсь предсказать столбец Gewonnen, основанный на EXPG1 и EXPG2. Поэтому я создал учебный и тестовый набор и творю следующую модель (все с помощью rcaret):

modFit <- train(Gewonnen~ EXPG1 + EXPG2, data=training, method="rf", prox=TRUE) 

Я не могу сделать матрицу путаницы теперь, потому что мои данные имеет больше ссылок. Это правда, потому что, когда я делаю:

pred <- predict(modFit, testing) 
head(print) 

Он говорит: 0.5324000 0.7237333 0.2811333 0.8231000 0.8299333 0.9792000

Потому что я хочу, чтобы сделать матрицу путаницы я не могу превратить их в на 0/1, но у меня есть ощущение, что там должно быть возможность сделать это и в модели.

Любые мысли о том, что я должен изменить в этой модели для создания значений 0/1. Я не мог найти его в документации:

modFit <- train(Gewonnen~ EXPG1 + EXPG2, data=training, method="rf", prox=TRUE) 
+1

Какой пакет вы использование для случайных лесов? Ответ на ваш вопрос заключается в том, что вам нужно запускать случайные леса в режиме классификации. Теперь вы запускаете его в режиме регрессии. –

ответ

6

Прежде всего, как говорит Тим ​​Biegeleisen, вы должны преобразовать Gewonnen переменную фактор (в обоих обучения & тестовых наборов), если она еще не:

training$Gewonnen <- as.factor(training$Gewonnen) 
testing$Gewonnen <- as.factor(testing$Gewonnen) 

После этого type вариант в функции caretpredict определяет, какой тип ответа вы получите для двоичной проблемы классификации, т.е. метки класса или вероятности. Вот воспроизводимый пример из caret documentation с использованием Sonar набора данных из пакета mlbench:

library(caret) 
library(mlbench) 
data(Sonar) 
str(Sonar$Class) 
# Factor w/ 2 levels "M","R": 2 2 2 2 2 2 2 2 2 2 ... 

set.seed(998) 
inTraining <- createDataPartition(Sonar$Class, p = .75, list = FALSE) 
training <- Sonar[ inTraining,] 
testing <- Sonar[-inTraining,] 

modFit <- train(Class ~ ., data=training, method="rf", prox=TRUE) 

pred <- predict(modFit, testing, type="prob") # for class probabilities 
head(pred) 
#  M  R 
# 5 0.442 0.558 
# 10 0.276 0.724 
# 11 0.096 0.904 
# 12 0.360 0.640 
# 20 0.654 0.346 
# 21 0.522 0.478 

pred2 <- predict(modFit, testing, type="raw") # for class labels 
head(pred2) 
# [1] R R R R M M 
# Levels: M R 

Для матрицы неточностей, вам потребуется класс этикетки (т.е. pred2 выше):

confusionMatrix(pred2, testing$Class) 
# Confusion Matrix and Statistics 

#   Reference 
# Prediction M R 
#   M 25 6 
#   R 2 18 
+1

Спасибо @desertnaut за ваш разработанный ответ! –

+0

@FrankGerritsen Добро пожаловать. Если вам это подходит, вы можете даже принять его :-) – desertnaut

+1

Я поддержал вас, потому что вы представили детали реализации, которые я не знал, и не мог найти себя. И вы также признали мой ответ в своем собственном, что редко бывает в эти дни на SO. –

4

Этот ответ немного спекулятивный, как вы опустили некоторые важные детали о наборе данных, и я активно не работал с caret пакетом. При этом кажется, что вы запускаете случайные леса в режиме регрессии, что означает, что вы получите непрерывную функцию. Это означает, что предсказания могут иметь значение отклика 0, 1 или что-либо среднее между 0 и 1. Если ваш столбец Gewonnen имеет значения 0 или 1, и вы хотите, чтобы предсказанные значения также вели себя таким образом, вы можете попробовать превратить Gewonnen в категориальную переменную. Как this article discusses, это может указывать на случайные леса для запуска в режиме вместо режима регрессии.

Gewonnen <- as.factor(Gewonnen) 

Это создает случайный лес, как вы это делали раньше, и у вас должны быть ответы, которые вы хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^