Усреднение между классами производится непосредственно в pROC.Поэтому вы хотите запустить multiclass.roc
только один раз с одним вектором прогнозов.Обычно вы хотите использовать type="response"
вместо probs
, хотя это может варьироваться в зависимости от функции predict
, доступной для вашей модели:
pre<-predict(modelStack, testPredLevelOne, type='response')
После этого pROC выполнит усреднение для вас, чтобы вы моглиможно получить среднее значение AUC напрямую:
multiclass.roc(testPredLevelOne$spam, pre)$auc
Обратите внимание, что в вашем случае это будет среднее значение по 3 AUC: спам против спама, не спам, неопределенный и не спам против неопределимый.Это может не отражать значение точности, которое вы рассчитали.
Что касается графика, вы получили предсказанный класс по методу predict.train
из каретки.Обычно для построения кривой ROC требуется количественное количественное измерение.Качественное измерение приводит к получению кривой ROC, содержащей одну точку, которая обычно не является оптимальной.К сожалению, опция type="probs"
из каретки возвращает 3 вектора вероятностей, что не поддерживается форматом pROC.
В качестве альтернативы можно было бы выполнить вычисления более вручную, выбрав правильный столбец вероятности и нужные уровни.для тестирования:
pre<-predict(modelStack, testPredLevelOne,type='prob')
roc(testPredLevelOne$spam, pre[,X], levels = c("not spam", "spam"), plot = TRUE)
roc(testPredLevelOne$spam, pre[,X], levels = c("undefined", " spam"), plot = TRUE, add = TRUE)
В конечном счете, вы должны тщательно проанализировать актуальность мультиклассового анализа ROC.ROC был разработан для бинарной классификации, и актуальность различных существующих мультиклассовых расширений несколько сомнительна в моем опыте.