R-Caret: не значащие вероятности класса и значение AUC - PullRequest
0 голосов
/ 20 октября 2019

Я очень новичок в 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.

Буду признателен, если вы поможете мне выяснить, что не так с моим делом.

...