Кривая ROC и libsvm

Дана кривая ROC, нарисованная с помощью plotroc.m (см. здесь):

  1. Теоретический вопрос: как выбрать лучший порог для использования?
  2. Вопрос программирования: как заставить классификатор libsvm работать с выбранным (наилучшим) пороговым значением?

person Eleanore    schedule 30.05.2014    source источник


Ответы (1)


Кривая ROC построена путем построения доли истинно положительных результатов по оси ординат по сравнению с долей ложноположительных результатов по оси абсцисс. Таким образом, координаты любой точки (x, y) на ROC-кривой указывают значение FPR и TPR на конкретном пороге. Как показано на рисунке, мы находим точку (x, y) на ROC-кривой, которая соответствует минимальному расстоянию этой точки от верхнего левого угла (т.е. определяется как (0,1)) графика. Пороговое значение, соответствующее этой точке, является требуемым порогом. Извините, мне не разрешено размещать изображения, поэтому я не могу объяснить с помощью рисунка. Но для получения более подробной информации щелкните справку, связанную с ROC.

Во-вторых, в libsvm функция svmpredict возвращает вероятность того, что выборка данных принадлежит определенному классу. Итак, если эта вероятность (для положительного класса) больше порогового значения (полученного из графика ROC), то мы можем отнести выборку к положительному классу. Эти несколько строк могут быть вам полезны:

    [pred_labels,~,p] = svmpredict(target_labels,feature_test,svmStruct,'-b 1');

% где svmStruct — это структура, возвращаемая функцией svmtrain.

    op = p(:,svmStruct.Label==1);  % This gives probability for positive
% class (i.e whose label is 1 )

Теперь, если эта переменная «op» больше порогового значения, мы можем отнести соответствующий тестовый образец к положительному классу. Это можно сделать как

op_labels = op>th; %, где «th» — пороговое значение, полученное из ROC

person Vikrant    schedule 30.05.2014
comment
Кто-то уже удосужился реализовать расширение для libsvm, которое вычисляет AUC (ROC). Его можно найти здесь: csie.ntu.edu.tw /~cjlin/libsvmtools/eval/index.html - person Mihai Todor; 05.06.2014