机器学习之类别不平衡问题 (2) —— ROC和PR曲线

机器学习之类别不平衡问题 (1) —— 各种评估指标

机器学习之类别不平衡问题 (2) —— ROC和PR曲线

完整代码



ROC曲线和PR(Precision - Recall)曲线皆为类别不平衡问题中常用的评估方法,二者既有相同也有不同点。本篇文章先给出ROC曲线的概述、实现方法、优缺点,再阐述PR曲线的各项特点,最后给出两种方法各自的使用场景。


ROC曲线



机器学习之类别不平衡问题 (2) —— ROC和PR曲线

ROC曲线常用于二分类问题中的模型比较,主要表现为一种真正例率 (TPR) 和假正例率 (FPR) 的权衡。具体方法是在不同的分类阈值 (threshold) 设定下分别以TPR和FPR为纵、横轴作图。由ROC曲线的两个指标,\(TPR = \frac{TP}{P} = \frac{TP}{TP+FN}\)\(FPR = \frac{FP}{N} = \frac{FP}{FP+TN}\) 可以看出,当一个样本被分类器判为正例,若其本身是正例,则TPR增加;若其本身是负例,则FPR增加,因此ROC曲线可以看作是随着阈值的不断移动,所有样本中正例与负例之间的“对抗”。曲线越靠近左上角,意味着越多的正例优先于负例,模型的整体表现也就越好。



AUC (Area Under the Curve)

机器学习之类别不平衡问题 (2) —— ROC和PR曲线

先看一下ROC曲线中的随机线,图中[0,0]到[1,1]的虚线即为随机线,该线上所有的点都表示该阈值下TPR=FPR,根据定义,\(TPR = \frac{TP}{P}\),表示所有正例中被预测为正例的概率;\(FPR = \frac{FP}{N}\),表示所有负例中被被预测为正例的概率。若二者相等,意味着无论一个样本本身是正例还是负例,分类器预测其为正例的概率是一样的,这等同于随机猜测(注意这里的“随机”不是像抛硬币那样50%正面50%反面的那种随机)。

上图中B点就是一个随机点,无论是样本数量和类别如何变化,始终将75%的样本分为正例。

ROC曲线围成的面积 (即AUC)可以解读为:从所有正例中随机选取一个样本A,再从所有负例中随机选取一个样本B,分类器将A判为正例的概率比将B判为正例的概率大的可能性。可以看到位于随机线上方的点(如图中的A点)被认为好于随机猜测。在这样的点上TPR总大于FPR,意为正例被判为正例的概率大于负例被判为正例的概率。

从另一个角度看,由于画ROC曲线时都是先将所有样本按分类器的预测概率排序,所以AUC反映的是分类器对样本的排序能力,依照上面的例子就是A排在B前面的概率。AUC越大,自然排序能力越好,即分类器将越多的正例排在负例之前。



ROC曲线的绘制方法:假设有P个正例,N个反例,首先拿到分类器对于每个样本预测为正例的概率,根据概率对所有样本进行逆序排列,然后将分类阈值设为最大,即把所有样本均预测为反例,此时图上的点为 (0,0)。然后将分类阈值依次设为每个样本的预测概率,即依次将每个样本划分为正例,如果该样本为真正例,则TP+1,即\(TPR + \frac{1}{P}\) ; 如果该样本为负例,则FP+1,即\(FPR + \frac{1}{N}\)。最后的到所有样本点的TPR和FPR值,用线段相连。


下面进行实现,先模拟生成一个正例:负例=10:1的数据集,用PCA降到2维进行可视化:

X,y = make_classification(n_samples=2000, n_features=10, n_informative=4, n_redundant=1, n_classes=2, n_clusters_per_class=1, weights=[0.9,0.1], flip_y=0.1, random_state=2018) sns.lmplot("pca_a","pca_b",data=X_pca, hue="y", fit_reg=False, markers=["o","x"],size=8,aspect=1.5,legend=False) plt.legend(fontsize=20,bbox_to_anchor=(0.98, 0.6),edgecolor ='r') plt.xlabel("axis_1",fontsize=17) plt.ylabel("axis_2",fontsize=17)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjpf.html