在二分类任务的时候,存在一个权衡的问题,就是我到底采用多大的阈值来确定他到底有没有病?两种极端情况是,来一个人我就说是阳性,那我肯定不会漏报,另一个极端是,来一个人我都说是阴性,那肯定不会有本来没病被我诊断成有病的情况。
如何去权衡?通常二分类的问题都有一个分类为阳性的概率。比如现在我认为他是阳性的概率是55%,那么我到底是认为他有病好还是认为他没病好?所以涉及到一个阈值,比如我设置阈值超过54%,那么我就认为有病。所以最终按照这个阈值来操作,有很多有病的确实会被诊断为有病的,但是也会有很多没病的被误诊为有病的。但是实际上阈值可以设置很多,那我到底怎么知道这个分类器在不同的阈值下整体的诊断性能如何?
这就要提出ROC的概念 (Receiver Operating Characteristic) ,这个ROC空间的横轴是没病的人里面我误认为他有病的比例FPR(False Positive Rate,假阳性率),纵轴是有病的人里面我找到确实有病的人的比例TPR(True Positive Rate,真阳性率)。我们可以对比在ROC空间中的两个点对应的分类器哪个效果更好,比如两个分类器,FPR一样,那肯定是TPR更大的分类器好,因为找到了更多真正得病的人。而TPR一样的分类器,肯定是FPR越小越好,因为误诊为有病的案例更少。所以分类器效果对应的点越靠近ROC空间的左上角效果越好,说明有病的都能找出来,同时没病的也不会被误诊为有病。
那么如果是对于同一个分类器来说,在我不同的阈值下面实际上分类的结果也是不一样的。比如我如果卡只要超过0%我就认为是阳性,那我肯定不会漏过一个阳性,但是所有的阴性也会被我认为是阳性,对应TPR为1而FPR为0的情况。如果我说只有概率达到100%是阳性我才认为是阳性,那倒是不存在阴性被当成阳性的情况,但是所有的阳性都被漏过去了,对应FPR为1,TPR为0的情况。在不同的阈值下,FPR和TPR都不一样,但是不同阈值下在ROC空间中的点越靠近左上角越好,所以可以统计一下曲线和横坐标轴围成的面积AUC (Area Under the Curve) of the ROC (Receiver Operating Characteristic),面积越大说明曲线越靠近左上角,整体分类性能越好。
ROC优点是:能很容易的查出任意阈值对学习器的泛化性能影响
有助于选择最佳的阈值。ROC曲线越靠近左上角,模型的查全率就越高。最靠近左上角的ROC曲线上的点是分类错误最少的最好阈值,其假正例和假反例总数最少。
克服样本不平衡
ROC这么屌,有没有什么缺陷?首先是二分类好用,但是多分类得做很多额外适配,不方便。