numpy机器学习 – 分类模型的评估

本文介绍如何对分类模型进行效果评估。

理论简述

分类模型输出的是标签,所以主要从预测是否正确角度评估。

下面的虚线是分类模型分界线,深色为训练集,浅色为测试集:

上述模型基于深色训练集拟合的分界线,可以准确对测试集进行分类,虽然模型是线性的非常简单,但对于这个场景是完全合理的。

但如果模型选择的过于复杂(添加了过重的x高次项),那么训练时就会出现曲线,对训练集的拟合是过度的,因此我们可以看到对于测试集的预测是不准确的,这就是因为训练时模型过拟合导致的。

就是因为模型可能会出现欠拟合或者过拟合的情况,我们需要科学评估这个模型合不合适,因此有了评估方法。

最基础的指标就是Accuracy准确率:

100个数据预测正确了80个,那么Acc就是80%。

但是“准确率”评估方式是有缺陷的,比如我们让模型预测下面这样的数据集:

这是一份分类极度不均衡的数据,正例就5个,也就是说模型无脑返回负类的话也可以高达95%的准确率,但这样的模型毫无意义。

这种数据1:9不均衡的情况在现实中非常常见,所以单纯看acc是不实用的,会导致对模型评估的误判,那怎么办呢?

此时我们应该关心的是数量较少的那个分类的样本(也就是上面5个点)是不是被模型准确预测出来了。

因此,我们提出了2个评估指标,一个叫做precision确率,一个叫做recall召回率,它们都是针对小众分类进行评估的指标(也就是评估模型在这5个点的表现)。

上图分界线就是分类器,它将3个点预测为”圆点”,但实际只有1个样本真的是”圆点”,我们就说此时precision确率为1/3,白话总结一下就是:

看看模型对小众分类的预测准不准。

召回率则是评估一下模型有没有把所有小众分类都分辨出来,例如上面有4个”圆点”没有被预测出来,所以召回率是1/5,白话总结一下就是:

看看模型对小众分类的预测全不全。

关于这2个对小众分类的评估指标,会遇到一个新的问题:

precision确率和recall召回率是两个矛盾的指标,你希望模型能把所有小众分类都找出来那么就是求全,一旦求全就会不准(比如把大众分类的样本预测为小众分类)。

为了综合2个指标找到一个折中比较好的模型,可以做一个F1值的评估指标:

这样的话精确率和召回率任何一个小的话,就会导致F1小,所以是个调和指标。

代码实现

我们在逻辑回归分类的训练过程中,打印出这些指标。

首先我们要让model预测分类,输出概率>=0.5的预测为y=1,否则y=0:

计算acc准确率,就是统计一下预测正确的比例:

然后看一下小众分类是哪一种:

正负类相当,我们就拿正类来做评估一下precision精确率吧:

分母是预测为正类的个数,分子是这当中真的是正类的个数,那么精确率就是体现准不准。

同样道理,recall召回率:

分母是样本中正类的个数,分子则是模型从其中召回了几个,这样体现的是模型召回全不全。

最后就是F1值,我们打印一下训练过程:

因为数据简单,最终模型完全正确,因此所有指标都是100%。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~