machine-learning - 构建 FAR 和 FRR 值的 ROC 曲线

标签 machine-learning classification svm libsvm roc

我有一个一对一的分类器集。比方说,该集合由 3 个分类器(LibSVM SVM)组成,每个分类器都针对一个类的数据和所有其他类数据进行训练。样本的当前设置是给出最高分数的 3 个类的分类器被称为匹配类。

此设置给出 FAR 和 FRR 结果。问题是 FAR 和 FRR 结果不足以构建我需要的 ROC 曲线。我想知道我能做些什么来生成 ROC 曲线。

最佳答案

这可以使用“多类 ROC 曲线”来完成(例如,参见 this answer 了解更多详细信息)。通常,您要么单独查看每个类,甚至单独查看每对类。我将提供一个简短的 R 示例来说明第一个示例的外观,该示例不太复杂,但仍然可以很好地了解单个类的识别效果。

您首先需要获得一些类别概率(为了重现性,这是您已经拥有的):

# Computing some class probabilities for a 3 class problem using repeated cross validation
library(caret)
model <- train(x = iris[,1:2], y = iris[,5], method = 'svmLinear', trControl = trainControl(method = 'repeatedcv', number = 10, repeats = 10, classProbs = T, savePredictions = T))

# those are the class probabilities for each sample
> model$pred
pred        obs     setosa  versicolor   virginica rowIndex C     Resample
[...]
11  virginica virginica 1.202911e-02 0.411723759 0.57624713      116 1 Fold01.Rep01
12 versicolor virginica 4.970032e-02 0.692146087 0.25815359      122 1 Fold01.Rep01
13  virginica virginica 5.258769e-03 0.310586094 0.68415514      125 1 Fold01.Rep01
14  virginica virginica 4.321882e-05 0.202372698 0.79758408      131 1 Fold01.Rep01
15 versicolor virginica 1.057353e-03 0.559993337 0.43894931      147 1 Fold01.Rep01
[...]

现在您可以单独查看每个类别的 ROC 曲线。对于每条曲线,FRR 表示该类别的样本被预测为其他类别的样本的频率,而 FAR 表示评价其他类别的样本被预测为该类别样本的频率:

plot(roc(predictor = model$pred$setosa, response = model$pred$obs=='setosa'), xlab = 'FAR', ylab = '1-FRR')
plot(roc(predictor = model$pred$versicolor, response = model$pred$obs=='versicolor'), add=T, col=2)
plot(roc(predictor = model$pred$virginica, response = model$pred$obs=='virginica'), add=T, col=3)
legend('bottomright', legend = c('setosa', 'versicolor', 'virginica'), col=1:3, lty=1)

Multiclass ROC

如前所述,您也可以查看每对类的 ROC 曲线,但恕我直言,这会传输更多信息,因此更复杂/需要更长的时间来掌握所包含的信息.

关于machine-learning - 构建 FAR 和 FRR 值的 ROC 曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441367/

相关文章:

matlab - 在 MATLAB 中使用 SVM 实现 HOG 特征

java - 是否有贝叶斯信念网络框架 "Infer.NET"的 java 替代品?

machine-learning - 使用具有多个结果的 C4.5 分类器

machine-learning - 文本分类中的 N 元语法与其他分类器

python - 过采样会导致模型过拟合吗?

python - 文本分类的特征选择和约简

python - sklearn 指标分类_报告版本输出

python - 用于多输入图像的 VGG16 网络

java - 使用 Lingpipe 进行词级语言模型

machine-learning - 当一个/多个特征值超出范围时,可以丢弃实例吗?