针对二分类问题,我们分别讨论了
评估某个给定分类结果的指标:查准率(Precision)、查全率(Recall)以及F-score
综合评估分类模型整体效果的指标:ROC曲线-AUC值
这篇文章将借助一个具体的例子来讨论上述指标的代码实现(使用Python)
一、什么是Python
Python是一门计算机编程语言,它在数据科学领域的应用极其广泛,具体的江湖地位可用图1来表示。
图1
限于篇幅,Python的安装和语法介绍在此就不展开了,有需要的同学可以参考这个网页。
其实我在这里单列一节出来讲Python,主要是为了展示我画的图1。
二、数据集以及模型简介
为了更具体地讨论实现,我们使用美国个人收入的普查数据来搭建模型(源自美国加州大学欧文分校,点击这里下载)。数据中具体的变量以及说明如表1所示。
表1
需要被预测的年收入分类(label)是一个二元变量,因此使用逻辑回归来解决这个二分类问题。另外为了建模方便,我们在这里只使用数值型自变量。
注意:本篇文章的完整代码这里
三、Precision,Recall以及F-score
针对一个给定的预测结果,Precision,Recall以及F-score的实现十分简单,如下所示。其中参数“pred”是模型的预测结果、“label”是真实结果、beta是F-score的beta权重。
import numpy as npdef PrecisionRecallFscore(pred, label, beta=1): """ 计算预测结果的Precision, Recall以及Fscore """ bins = np.array([0, 0.5, 1]) tp, fp, fn, tn = np.histogram2d(label, pred, bins=bins)[0].flatten() precision = tp / (tp + fp) recall = tp / (tp + fn) fscore = (1 + beta ** 2) * precision * recall / (beta ** 2 * precision + recall) return precision, recall, fscore
由于逻辑回归的直接预测结果是类别1的概率,即,而最终预测结果与人为选择的阈值 有关,具体的如公式(1)所示。
那么这三个指标随着的变动情况如图2所示。图中的结果与《分类模型的评估(一)》中的讨论是一致的。
图2
另外对于一个给定的阈值,比如,不同的beta会使得F-score有不同的侧重点,如图3所示。
图3
四、ROC曲线和AUC值
对于逻辑回归模型,ROC曲线和AUC值的实现代码也很简单,如下所示。其中参数“predProb”是预测的类别1的概率,参数“label”是真实结果。可以看到这份代码不仅针对逻辑回归,对其他评分模型也是适用的。
from sklearn import metricsdef AUC(predProb, label): """ 计算False positive rate, True positive rate和AUC """ # 得到False positive rate和True positive rate fpr, tpr, _ = metrics.roc_curve(label, predProb) # 得到AUC auc = metrics.auc(fpr, tpr) return fpr, tpr, auc
将模型结果表示出来就如图4所示。
图4
作者:tgbaggio
链接:https://www.jianshu.com/p/e07ce827d9d9
共同学习,写下你的评论
评论加载中...
作者其他优质文章