手记

分类模型的评估(三)

针对二分类问题,我们分别讨论了

  • 评估某个给定分类结果的指标:查准率(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


0人推荐
随时随地看视频
慕课网APP