使用 scikit-learn 玩转机器学习——模型评价(下)

精准率是TP值与TP值和FP值的和的比值,在上例中表示预测对的中奖人数占按预测应该中奖的人数的比值,表示如下:



召回率是TP值与TP值和FN值的和的比值,在上例中表示预测对的中奖人数占实际中奖人数的比率,表示如下:



然后我们可以得到我们所据上述例子中的混淆矩阵:

使用 scikit-learn 玩转机器学习——模型评价(下)根据精准率和召回率的定义可得, 出现除0情况而无意义,,召回率为0,根据召回率的定义也可知,召回率表示的是对于特定的目标群,预测正确的比率。完美的解决了准确率在偏斜数据中不作为的问题。


在不同的应用场景下,我们通常会关注不同的指标,因为有些时候精准率更为重要,有些时候召回率更为重要。为了同时权衡这两个指标的重要性,就出现了 F1 Score,表达式如下:



由上式我们可以看出,F1 Score 其实就是精准率与召回率的调和平均值,因为召回率和精准率都大于0,由极限的性质可知,只有精准率和召回率都打的时候,F1 Score 才会比较大。


说到 ROC 曲线(Receiver Operating Characteristic, 受试者工作特性曲线),就得从 TPR 和 FPR,其分别表示 被正确预测的目标类别占目标类别的比率,和被错误的预测为目标类表占非目标类别的比率。其分别对应的表格和表达式如下:


使用 scikit-learn 玩转机器学习——模型评价(下)使用 scikit-learn 玩转机器学习——模型评价(下)


OC 曲线源于二战中用于敌机检测的雷达信号分析技术,后来才被引入机器学习领域。在进行机器学习模型的比较时,如果一个模型的 ROC 曲线被另一个模型的曲线完全包住,则可断言后者的性能优于前者;若两个模型的 ROC 曲线发生交叉,则在一般情况下很难判定2个模型孰优孰劣,这时,一种较为合理的评比标准便是比较这两个 ROC 曲线之下的面积,即 AUC(Area under curve)。


接下来我们用代码来具体的实现下相关的评判标准和判别式。


引入必要的包 -> 调用数据集 -> 使数据集中不同类别数量偏斜 -> 分离训练、测试数据集 -> 实例化一个逻辑回归模型 -> 预测并求出模型准确率

使用 scikit-learn 玩转机器学习——模型评价(下)


为增加我们对上述有关术语和评判标准的感性认识,我们具体实现了下一些函数,如下:

使用 scikit-learn 玩转机器学习——模型评价(下)使用 scikit-learn 玩转机器学习——模型评价(下)


当然了,如果每次使用精准率和召回率时都要自己亲手撸出来可能骚微还是有一些的麻烦,不过 贴心的 scikit-learn 找就为我们准备好了一切,在 metrics 中封装了所有我们在上述实现的度量,如下是调用演示:

使用 scikit-learn 玩转机器学习——模型评价(下)

对于机器学习模型的性能而言,不光是各样本的特征系数,而且阈值(或称之为截距)的取法对其也有着重要的影响。如下代码是用于绘制精准率与召回率和阈值取值的关系,并绘出其图形:

使用 scikit-learn 玩转机器学习——模型评价(下)


PR 曲线对研究机器学习模型也有着重要的作用,我们也可以从 scikit-learn 中调用相关的函数来绘制 PR 曲线,如下:

使用 scikit-learn 玩转机器学习——模型评价(下)


绘制出 ROC 曲线:

使用 scikit-learn 玩转机器学习——模型评价(下)

ROC 曲线和 PR 曲线有着很强的相似性,因为这两图的各自的两个指标的取值范围都是0到1,因此都可以用曲线与 y=0 围成的面积可以用来表征模型的优劣,且用面积作为指标来衡量模型优劣对指标某个部分的具体变化不敏感,稳定性更强。关于以上所有概念更为严谨和全面的定义和证明请参考周大佬的西瓜书。

上一篇:轻松玩转 Scikit-Learn 系列 —— 线性回归及 ML 相关评价标准


下一篇:使用 scikit-learn 玩转机器学习——集成学习