Постройте кривую ROC с помощью pROC R

Я создаю текстовый классификатор с помощью randomForest, поэтому для его оценки я пытаюсь создать кривую ROC с пакетом pROC.

Вот код:

ndsi.forest <- randomForest(tf.idf[train.index, ], as.factor(train$Note.Reco[train.index]), ntree = 100)

#predict with test data
ndsi.pred <-predict(ndsi.forest, newdata = tf.idf[test.index, ], response  = 'class')
pred <- data.frame(ndsi.pred)
result <- data.frame(id = Data_clean$id[test.index], sentiment = pred[ , ])

##"ROC curve"
multiclass.roc(result$sentiment, test$Note.Reco)

Мне было интересно, есть ли способ создать сюжет? График ROC с пакетом pROC?

Я пытаюсь с этим кодом:

roc(test$Note.Reco, result$sentiment, levels = c(1,2,3,4,5,6,7,8,9,10))

Но я получаю эту ошибку:

Error in roc.default(test$Note.Reco, result$sentiment, levels = c(1, 2,  : 
  'levels' argument must have length 2

заранее спасибо


person dr.nasri84    schedule 28.04.2017    source источник
comment
Вы использовали функцию plot.roc? cran.r-project.org/web/packages/pROC/pROC. pdf   -  person R18    schedule 28.04.2017
comment
Чтобы представить кривую roc, вам нужны два вектора: первый, относящийся к переменной отклика (фактор с двумя уровнями), и второй, непрерывная переменная, указывающая прогнозируемые значения для каждой выборки. Кроме того, вы можете указать, какие метки являются метками вашего первого аргумента. Их всего два, потому что первый вход является дихотомическим фактором. Итак, как выглядит test$Note.Reco?   -  person R18    schedule 28.04.2017
comment
Ах, хорошо, моя переменная ответа представляет собой вектор значений от 0 до 10, что мне делать в этом случае? :/   -  person dr.nasri84    schedule 28.04.2017
comment
У меня есть result$sentiment : Factor of 11 levels "0,1,..10" и test$Note.Reco : int 6 3 6 7 8 10 0 1 2 Как мне поступить в этом случае? благодарю вас   -  person dr.nasri84    schedule 28.04.2017


Ответы (1)


Насколько я понял, у вас есть мультиклассовая переменная ответа (соответствующая 10 различным группам).

ROC-кривая определена для классификации двух групп, поэтому мультикласс вычисляет классификацию для "одной группы по сравнению с остальными". Функция multiclass.roc не позволяет отображать кривые, но понимая, что она делает, вы можете:

1) Рассмотрите столько кривых ROC, сколько групп у вас есть. То есть ROC - кривая для классификации:

  • Группа 1 против не группы 1
  • Группа 2 против не группы 2
  • . . .
  • Группа 10 против не группы 10

Вы можете сделать это с помощью функции roc. Единственное, что вам нужно, это переопределить вектор отклика с 1 для индивидуумов, принадлежащих к группе i, и с 0 для остальных индивидуумов. Сохраните каждый объект roc под другим именем.

2) Чтобы представить все кривые, просто используйте функцию plot для каждой из кривых, добавив plot(..., add=T) ко всем из них, кроме первой.

person R18    schedule 28.04.2017
comment
Не совсем правильно. Мультикласс в pROC проверяет каждую возможную пару групп: 1 против 2; 1 против 3; 1 против 4; ... 9 против 10. На самом деле гораздо больше ROC-кривых. - person Calimo; 28.04.2017
comment
Таким образом, вам нужно получить 90 кривых, а для этого нужно составить подмножество особей, содержащее по одному из каждой пары ответов (назовем их i и j. - person R18; 28.04.2017