3

我一直在使用 LibSVM 分类器在 3 个不同的类之间进行分类 - 标记为 2、1、-1

我正在尝试使用 MATLAB 为使用 LibSVM 生成的一些数据生成 Roc 曲线图,但无法理解它需要运行的参数。

我假设:

标签是生成的标签向量,表明我的数据属于哪个类(我的包含 1、-1 和 2,大小为 60x1)

score 是由 LibSVM 创建的变量,称为“accuracy_score”(大小为 60x3)

但我不知道posclass是什么?

我也很想知道我的假设是否正确,如果不正确,为什么不呢?

4

2 回答 2

4

请参阅此处以获得清晰的解释:

给定以下指令: [X,Y] = perfcurve(labels,scores,posclass); labels是数据的真实标签,scores是分类器的输出分数(在阈值之前),posclass是标签中的正类。

于 2014-05-30T13:55:17.050 回答
3

请参阅 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文件夹中),它被称为decision_values/prob_estimates)有3列,每一列对应于数据属于一个类的概率。

例如

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

model.Label 包含类标签,decision_values 中的各个列包含测试用例属于 model.Label 中指定的类的概率。(参见http://www.csie.ntu.edu.tw/~b91082/SVM/README)。

使用 purfcurve 计算 m 类的 ROC:

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

decision_values(:,m)*model.Label(m)尤其是当您的分类标签是负数时,这一点很重要。

于 2014-05-16T19:31:30.137 回答