Создайте двоичный результат со случайным лесом
У меня есть набор данных, который выглядит следующим образом:
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)
2 ответа:
Прежде всего, как говорит Тим Бигелейзен, вы должны преобразовать вашу переменную
Gewonnen
в фактор (в обоих наборах обучения и тестирования), если это еще не так:После этого параметрtraining$Gewonnen <- as.factor(training$Gewonnen) testing$Gewonnen <- as.factor(testing$Gewonnen)
type
в функцииcaret
predict
определяет, какой тип ответа вы получите для задачи бинарной классификации, т. е. метки классов или вероятности. Вот воспроизводимый пример изcaret
документация использование набора данных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
Этот ответ является немного спекулятивным, поскольку вы опустили некоторые важные детали о вашем наборе данных, и я не работал широко с пакетом
caret
. Тем не менее, похоже, что вы запускаете случайные леса в режиме регрессии, что означает, что вы в конечном итоге получите непрерывную функцию. Это означает, что предсказания могут иметь значение отклика0
,1
, или что-нибудь среднее между0
и1
. Если ваш столбецGewonnen
имеет только значения0
или1
, и вы хотите если предсказанные значения также ведут себя подобным образом, то можно попробовать превратитьGewonnen
в категориальную переменную. Как в этой статье обсуждается, это может заставить случайные леса работать в режиме классификации вместо регрессионного режима.Это создает случайный лес, как вы делали это раньше, и у вас должны быть ответы, которые вы хотите.Gewonnen <- as.factor(Gewonnen)