как получить такой же прогноз (вероятность и класс) в случайном лесу - PullRequest
1 голос
/ 09 июля 2020

Я устанавливаю две модели с пакетом ranger и одним и тем же семенем. Первый предсказывает класс, а второй возвращает матрицу вероятностей, моя цель - достичь того же результата, но я различаюсь 4 регистрами. Кто-то знает решение. Я использую максимальную вероятность для каждого класса. Какой должна быть точка отсечки?

library(ranger)
library(caret)

## fit model 1
mod <- ranger(formula = Species ~., data = iris, seed = 2020)
res1 <- predict(object = mod, data = iris[,-5])$predictions

## fit model 2
mod2 <- ranger(formula = Species ~., data = iris, probability = TRUE, seed = 2020)
res2 <- factor(ifelse(apply(predict(object = mod2, data = iris[,-5])$predictions, 1, which.max) == 1,"setosa",
       ifelse(apply(predict(object = mod2, data = iris[,-5])$predictions, 1, which.max) == 2, "versicolor", "virginica")),
       levels = c("setosa","versicolor","virginica"))

head(data.frame(res1, res2))
    res1   res2
1 setosa setosa
2 setosa setosa
3 setosa setosa
4 setosa setosa
5 setosa setosa
6 setosa setosa

all.equal(res1, res2)
[1] "4 string mismatches"

Мой ожидаемый результат

all.equal(res1, res2)
[1] TRUE

1 Ответ

1 голос
/ 09 июля 2020

Очень интересный вопрос: я пользователь ranger и не знал об этом результате.

Как указано @MrFlick в комментарии к вашему ответу, вы используете два разных метода. Вы можете подтвердить это, получив доступ к элементу treetype из mod и mod2:

mod$treetype
"Classification"

mod2$treetype
"Probability estimation"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...