Я очень новичок в ML, поэтому мой вопрос может быть примитивным. Я работаю над проблемой бинарного класса. Переменная ответа (целевая): occurrence
: факторная переменная с двумя уровнями: oui
и non
(французские эквиваленты да и нет). trainset
имеет 175 строк (из которых 173 строки с non
и 2 строки с oui
целевыми значениями) и выглядит следующим образом:
occurrence QMAX deve tm P15M P30M P1H P4H P6H P12H P24H P48H
non 35.6 72.0 34.3 5.5 10.2 12.9 17.3 18.4 18.7 18.7 18.7
non 238.9 143.3 49.5 3.9 6.6 11.5 20.7 28.5 42.3 48.9 65.6
non 23.5 72.0 39.3 6.6 8.8 12.0 17.6 17.6 25.4 26.5 28.4
....
oui 2396.5 72.0 34.1 28.5 47.7 68.6 112.1 112.3 125.8 125.9 126.0
testset
имеет точно такую же структуру, но19 строк, из которых 18 строк с non
и 1 строки с oui
целевыми значениями). Я использую rf
(случайный лес) из пакета caret
для предсказания testset
на основе trainset
:
train.control <- trainControl(method = "none",
search = "grid",
classProbs = TRUE)
expandgrid <- expand.grid(.mtry = 4)
model.train <- train(occurrence ~ .,
data = trainset,
method = "rf",
trControl = train.control,
tuneGrid = expandgrid)
predict.class <- predict(model.train, testset)
Мне нужно получить classe probabilities
для каждой строки в моем trainset
,поэтому я делаю:
classprobs <- predict(model.train, testset, type = "prob")
То, что я получаю, выглядит следующим образом:
non oui
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
как вероятность, это дает либо 1, либо 0 значений и никаких значений между ,Итак, когда я создаю roc
объект с использованием пакета pROC
:
ROC <- roc(testset$occurrence, classprobs$oui, levels = c("oui", "non"), auc = TRUE)
thresh <- coords(ROC, x = "best", best.method = "closest.topleft", ret = "threshold", transpose = FALSE)
, возвращаемое значение AUC и лучший порог составляют:
ROC$auc
Area under the curve: 0.5
thresh
[1] -Inf Inf
Когда я использую другие наборы данных, такие какiris
(после подстановки его в data.frame с двоичными переменными ответа versicolor
и virginica
) и использованием того же сценария, сообщаемые значения вероятностей не являются исключительно 0 и 1, то есть существуют значения вероятности, такие как 0,04, 0,96и соответствующее roc
имеет значение non-Inf
best.threshold
.
Буду признателен, если вы поможете мне выяснить, что не так с моим делом.