11.5 评估二元分类器的阈值
问题描述
希望评估二元分类器的性能,并对多个可能的阈值进行评估。
解决方案
受试者工作特征(Receiving Operating Characteristic,ROC)曲线是评估二元分类器质量的常用方法。ROC曲线会对每一个概率阈值(即用来区分样本属于正类或负类的概率值)比较其真阳性和假阳性的比例。通过绘制ROC曲线,我们可以观察模型的性能。一个正确预测了每个样本的分类器,其ROC曲线看起来就像197页的图中的实心浅灰线,直接从原点到达顶部。而一个随机预测的分类器,其ROC曲线将显示为对角线。
模型的性能越好,ROC曲线就越接近实心浅灰线。在scikit-learn中,我们可以使用roc_curve来计算每个阈值下的真阳性率(True Postive Rate)和假阳性率(False Positive Rate),然后用图绘制出来:


讨论
到目前为止,我们只是基于模型的预测值来检验模型。然而,在许多学习算法中预测值是基于概率估计的。也就是说,每个样本都有一定的概率归属于不同的分类。我们可以使用predict_proba查看第一个样本的预测概率:

在这个例子中,第一个样本有约87%的概率属于负类(0),有约13%的概率属于正类(1)。默认情况下,scikit-learn会将样本预测为概率大于50%(即阈值)的分类。然而,通常我们会由于某些原因显式地调整阈值而不是使用这个中间值。例如,如果假阳性对业务的影响很大,那么我们会更倾向于选用一个较大的概率阈值。这样做虽然会导致有些真阳性的样本被误判,但是如果一个样本被预测为正类,我们就确信模型的预测基本上是正确的。这种折衷表现为真阳性率(TPR)和假阳性率(FPR)。真阳性率是被正确预测的正类样本数与所有被预测为正类的样本数之比:

假阳性率是被错误预测为负类的样本数和所有被预测为负类的样本数之比:

ROC曲线表示每个概率阈值下相应的TPR和FPR值。例如,在本节的解决方案中,在约50%的概率阈值下,TPR为0.81,FPR为0.15:

然而,如果将阈值提高到80%左右(即提高模型将样本预测为正类所需的确信度),则TPR和FPR的值都会显著下降:

这是因为我们对样本被预测为正类的要求提高了,模型无法识别出一些正类样本(TPR较小),而且被错误预测为正类的负类样本也减少了(FPR较小)。
除了能够可视化TPR和FPR之间的关系,ROC曲线还可以用作模型的通用度量标准。模型越好,曲线越高,曲线下的面积也就越大。出于这个原因,通常会计算ROC曲线下方的面积(AUCROC)来判断在所有可能的阈值下模型的总体性能水平。AUCROC的值越接近1,模型的性能就越好。在scikit-learn中,可以使用roc_auc_score来计算AUCROC:

延伸阅读
● 《Python和R中的ROC曲线》(http://bit.ly/2FuqoyV)
●《ROC曲线下方的面积》(http://bit.ly/2FxTrl6)



本书评论