Matlab 如何计算roc曲线?
我编写了一个分类器(高斯混合模型)来对五种人类行为进行分类。对于每个观测,分类器计算属于一个簇的后验概率 我想用一个阈值来评估系统的性能,该阈值的值从0到100。对于每个阈值,对于每个观察,如果属于其中一个簇的概率大于阈值,我接受分类器的结果,否则我放弃它 对于每个阈值,我计算真阳性、真阴性、假阳性、假阴性的数量 然后我计算两个函数:敏感性和特异性Matlab 如何计算roc曲线?,matlab,classification,threshold,false-positive,roc,Matlab,Classification,Threshold,False Positive,Roc,我编写了一个分类器(高斯混合模型)来对五种人类行为进行分类。对于每个观测,分类器计算属于一个簇的后验概率 我想用一个阈值来评估系统的性能,该阈值的值从0到100。对于每个阈值,对于每个观察,如果属于其中一个簇的概率大于阈值,我接受分类器的结果,否则我放弃它 对于每个阈值,我计算真阳性、真阴性、假阳性、假阴性的数量 然后我计算两个函数:敏感性和特异性 sensitivity = TP/(TP+FN); specificity=TN/(TN+FP); 在matlab中: plot(1-speci
sensitivity = TP/(TP+FN);
specificity=TN/(TN+FP);
在matlab中:
plot(1-specificity,sensitivity);
要有ROC曲线。但结果并不是我所期望的
这是丢弃、错误、纠正、灵敏度和特异性改变一个动作阈值的函数图
这是一个动作的ROC曲线图
这是相同动作的ROC曲线的茎
我错了,但我不知道在哪里。也许我在计算FP,FN,TP,TN时出错了,特别是当分类器的结果小于阈值时,所以我放弃了。当存在丢弃时,我必须增加什么?您正在尝试绘制精度与召回率的曲线,这取决于分类器阈值参数。精确性和召回率的定义如下:
Precision = TP/(TP+FP)
Recall = TP/(TP+FN)
您可以在中检查这些参数的定义:
这里有一些曲线:
您是否将数据集划分为训练集、交叉验证集和测试集?(如果不划分数据,则精度召回曲线看起来很奇怪是正常的)
编辑:我认为你的问题有两个可能的来源:
希望这有帮助,背景 我回答这个问题是因为我需要通读内容,像这样的问题是一个很好的借口。谢谢你给我这个好机会 我使用来自内置fisher iris数据的数据: 我还使用了Mathworks教程中关于分类和plotroc的代码片段
%load data
load fisheriris
%show raw data
figure(1); clf
gscatter(meas(:,1), meas(:,2), species,'rgb','osd');
xlabel('Sepal length');
ylabel('Sepal width');
axis equal
axis tight
title('Raw Data')
分析
假设我们想要确定定义“virginica”和“non-virginica”的线性分类器的界限。我们可以在其他课程中看“自我与非自我”,但他们会有自己的课程
现在我们制作一些线性判别式,并绘制它们的ROC:
%load data
load fisheriris
load iris_dataset
irisInputs=meas(:,1:2)';
irisTargets=irisTargets(3,:);
ldaClass1 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'linear')';
ldaClass2 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'diaglinear')';
ldaClass3 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'quadratic')';
ldaClass4 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'diagquadratic')';
ldaClass5 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'mahalanobis')';
myinput=repmat(irisTargets,5,1);
myoutput=[ldaClass1;ldaClass2;ldaClass3;ldaClass4;ldaClass5];
whos
plotroc(myinput,myoutput)
结果如下所示,尽管删除对角线的重复副本需要:
您可以在代码中注意到,我将“myinput”和“myoutput”堆叠起来,并将它们作为输入输入输入到“plotroc”函数中。您应该将分类器的结果作为目标和实际值,您可以得到类似的结果。这将比较分类器的实际输出与目标值的理想输出。这些是plotroc的输入
因此,这将为您提供“内置”ROC,这对于快速工作非常有用,但不会让您详细了解每一步
此时您可以提出的问题包括:
- 哪个分类器最好?在这种情况下,我如何确定什么是最好的
- 分类器的凸包是什么?是否存在比任何纯方法更具信息量的混合分类器?也许是装袋