2012-05-12 85 views
0

我有两个严重不平衡的数据集,标记为正面和负面,我能够产生一个混淆矩阵,产生〜95%的真阳性率(并继承5%的假阴性率) 99.5%的真实阴性率(假阳性率为0.5%)。ROC图构造

我试图建立一个ROC图的问题是,x轴的范围不是从0到1,间隔为0.1。相反,它的范围从0到0.04之类,因为我的假阳性率非常低。

任何有关为什么发生这种情况的见解?

由于

回答

0

我已经想通了。我使用普拉特算法来提取积极分类的概率并对数据集进行排序,最高概率在第一位。我遍历数据集,任何正例(实际正数,未分类为正数)递增正确计数,而任何负数示例(实际负数,未分类为负数)递增错误正数。

把它想象成SVM上的支持向量,它将两个类(+ ve和-ve)从svm的一边逐渐移动到另一边。在这里,我想象的是2d飞机上的点。随着支持向量的移动,它揭示了一些例子。任何标记为阳性的例子都是假的,任何阴性都是假阳性。

希望这会有所帮助。由于缺乏网络信息(或者仅仅是我缺乏对SVM的理解),花了我几天的时间才弄清楚一些如此微不足道的东西。这特别针对那些在OpenCV包中使用CvSVM的人。如您所知,CvSVM不会返回概率值。相反,它会根据距离函数返回一个值。您不需要使用Platt算法来基于概率提取ROC曲线,相反,您可以使用距离值本身。比如说,你从10开始,然后慢慢减少,直到你覆盖了所有的数据集。我发现使用概率可以更好地形象化,所以每个人都有自己的想法。

请介意我的英语不是我的第一语言

0

在ROC曲线图中,两个轴是假阳性(F)和真阳性(T)的速率的速率。 T是给定正数据项的概率,你的算法将其归类为正数。 F是给定负数据项的概率,您的算法错误地将其归类为正数。坐标轴总是从0到1,如果你的算法不是参数化的,你最终应该在ROC图上取一个点(或两个数据集),而不是曲线。如果您的算法是参数化的,那么您会得到一条曲线,然后曲线由参数的不同值引发。

http://www2.cs.uregina.ca/~dbd/cs831/notes/ROC/ROC.html

+0

我的问题是,我使用的是SVM,这是不是一个概率模型。它只是分类正面和负面的价值观,这就是为什么我只能得到一分。而且,OpenCV中的SVM不返回分类的概率,只返回距离函数值。我正在尝试使用这个值来确定一个概率,到目前为止没有运气。 –