Каковы параметры кривой Roc MATLAB 'perfcurve'?

Я использую классификатор LibSVM для классификации между 3 разными классами, помеченными 2, 1, -1.

Я пытаюсь использовать MATLAB для создания графиков Roc Curve для некоторых данных, полученных с помощью LibSVM, но у меня возникают проблемы с пониманием параметров, которые необходимо запустить.

Я предполагаю, что:

labels — это вектор сгенерированных меток, в котором указано, к какому классу принадлежат мои данные (мои состоят из 1, -1 и 2 и имеют размер 60x1)

scores — это созданная LibSVM переменная под названием «accuracy_score» (размер 60x3).

Но я не знаю, что такое posclass?

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


person Gwenji    schedule 16.05.2014    source источник


Ответы (2)


см. документацию percurve, posclass - это метка положительного класса, в вашем случае это должно быть либо 1, -1, либо 2 http://www.mathworks.com/help/stats/perfcurve.html

Кривая ROC имеет «ложноположительную скорость» по оси x и «истинную положительную скорость по оси y». Указав posclass, вы указываете, по отношению к какому классу вы рассчитываете долю ложных срабатываний и долю истинных срабатываний. например если вы укажете posclass как 2, вы считаете, что когда истинная метка равна 2, предсказание 1 или -1 считается ложным предсказанием (ложноотрицательным).

Редактировать: Accuaracy_score, который вы указали (в моей версии документации (3.17, в папке Matlab), он называется solution_values/prob_estimates) имеет 3 столбца, каждый столбец соответствует вероятности того, что данные принадлежат одному классу.

e.g.

model=svmtrain(train_label,train_data);
[predicted_label, accuracy, decision_values]=predict(test_label,test_dat,model);

model.Label содержит метки классов, отдельные столбцы в solution_values ​​содержат вероятность того, что тестовый пример принадлежит классу, указанному в model.Label. (см. http://www.csie.ntu.edu.tw/~b91082/SVM/README).

использовать purfcurve для вычисления ROC для класса m:

[X,Y] = perfcurve(truelabels, decision_values(:,m)*model.Label(m),model.Label(m));

Важно сделать decision_values(:,m)*model.Label(m), особенно когда метка класса является отрицательным числом.

person Cici    schedule 16.05.2014
comment
Спасибо за это, но когда я пытаюсь запустить эту команду: [X Y] = perfcurve(testLabels, probEstimates, 1); Я получаю следующую ошибку: Ошибка при использовании perfcurve›preparedata (строка 1184) Массив оценок должен быть вектором. В своем вопросе я упомянул, что testLabels имеет размер 60x1, а точностьScore (созданный LibSVM) - 60x3 - так что это матрица, но как мне исправить проблему? - person Gwenji; 17.05.2014
comment
какую версию libsvm и какой классификатор и параметры вы использовали? - person Cici; 19.05.2014
comment
LibSVM версии 3.17, классификатор — это интерфейс LibSVM MATLAB, поэтому «svmtrain» и «svmpredict», и я использовал: [X Y] = perfcurve(actualTestLabels, prob_estimate, 1); где prob_estimate — результат работы LibSVMS 'svmpredict'. - person Gwenji; 20.05.2014

См. здесь для четкого объяснения:

Учитывая следующую инструкцию: [X,Y] = perfcurve(labels,scores,posclass); labels — это истинные метки данных, scores — выходные оценки вашего классификатора (до порога), а posclass — положительный класс в ваших метках.

person Eleanore    schedule 30.05.2014