我有两个严重不平衡的数据集,标记为正数和负数,我能够生成一个混淆矩阵,产生~95%的真阳性率(并且继承5%的假阴性率)和~99.5%真实负率(假阳性率为0.5%)。
我尝试构建ROC图的问题是x轴的范围不是0到1,间隔为0.1。相反,考虑到我的假阳性率很低,它的范围从0到0.04。
有关为何会发生这种情况的任何见解?
由于
答案 0 :(得分:0)
在ROC图中,两个轴是误报率(F)和真阳性率(T)。 T是给定正数据项的概率,您的算法将其归类为正数。 F是给定负数据项的概率,您的算法错误地将其归类为正数。轴总是从0到1,如果您的算法不是参数,您应该在ROC图上找到一个点(或两个数据集为两个)而不是曲线。如果算法是参数化的,则曲线会由参数的不同值引起。
答案 1 :(得分:0)
我已经弄清楚了。我使用Platt算法提取正分类的概率并对数据集进行排序,首先是最高概率。我遍历了数据集,任何正面的例子(真正的正面,未被归类为正面)都会增加真实的计数,而任何负面的例子(真正的负面,不归类为负面)会增加假阳性计数。
将其视为SVM上的支持向量,它将两个类(+ ve和-ve)从svm的一侧逐渐移动到另一侧。在这里,我想象在2d飞机上的点。随着支持向量的移动,它揭示了一些例子。任何被标记为肯定的例子都是真正的从属,任何否定都是假的。
希望这会有所帮助。由于缺乏网络上的信息(或者仅仅是我对SVM缺乏了解),我花了几天时间才弄清楚这么微不足道的事情。这特别针对那些在OpenCV包中使用CvSVM的人。您可能知道,CvSVM不返回概率值。相反,它返回一个基于距离函数的值。您不需要使用Platt算法根据概率提取ROC曲线,而是可以使用距离值本身。比如说,你从10开始距离,然后慢慢递减,直到你覆盖了所有的数据集。我发现使用概率可以更好地进行可视化,因此对每个人来说都是可视化的。
请注意我的英语,因为这不是我的第一语言