模型分析的优劣度量
对于模型建立后,使用测试数据进行分析的时候会得到测试数对应的测试结果,根据这个结果进行统计
首先测试数据本身是可以完全知道对模型的某个属性分类的,这里为了简单进行分类,就使用二元分类方式,正例和反例,现在还可以简单的理解为好与不好,实际到了后面正例和反例的分界是可以进行调节的.这里先进行非正即反的分析方式进行分析
先明确概念:
真正例:表示测试对象实际为真,模型判定结果也为真 记作:TP
真负例:表示测试对象实际为假,模型判定结果也为假 记作:TN
这里就非常明显了,测试对象总共具有P+N个
假正例:表示测试对象实际为真,模型判定结果为假 记作:FP
假负例:表示测试对象实际为假,模型判定结果为真 记作:FN
这里需要注意的是他们之间的关联关系:
混淆矩阵:
实际 | 预测正 | 预测负 | |
---|---|---|---|
P | TP | FN | TP+FN = P |
N | FP | TN | FP+TN = N |
混淆矩阵是分析模型预测结果的工具,这里很容易错误的认为TP+TN是总的P,而实际上TP+FN才是P,这个我最开始也很容易搞错,仔细推敲一下,TP表示真正例,FN表示假负例,这么来理解,所有的正例中有一部分被判定为正例,一部分判定为负例,那么背判定为负例的就是被误判的,别人实际为正例,所以前面一定是F开头,矩阵中以F开头的只可能是FN和FP,这里如何区分是FN还是FP,关键是后面的N和P的区别,N表示负例,P表示正例,如果后面是N,前面加上一个F叫做错误的预测为负例,既然是错误的预测为负例,别人本身就是正例才能被错误预测为负例.同理,如果后面是P,前面加上一个F表示错误的预测为正例,这里试想本身为正的话判定为正还能叫做错误预测么?要能叫做错误的预测为正例那只能原来就是负例.
因此才能出现TP+FN = P,表示原来是正例的被判定为正例的个数与原来为正例被错误的预测为负例(FN)的个数之和为总的正例数
同样的负例总和也是这么思维出来的,这里确实比较绕,需要慢慢理清楚
一个模型我们对其评价分为评价其对正例的判断准确率和对负例的判断准确率
所有的正例为P,预测为正的才TP,那么被这个模型正确的预测为正的比例为
同样也有对负例的识别率
整理之后可以就会发现,所谓召回,实际上就是对正例的区分程度,召回率越高,模型能够区分出正例的能力就越强,但是这并不代表模型就很牛逼,其可能对负例的区分度并不高
要表示对整体的测试样品的区分度
从公式上就能看出分子就是模型判断正确的实例总和,分母就是所有被测实例的总和,如果某个模型能够具有很高的识别率和很高的召回率以及高的特效性,这就说明被误判正例和负例都很少,再回过头看混淆矩阵的话就会发现,实际上TP和TN很大,FN和FP很小不就是正好对角线上的数据呈现相反的性质么
这里还有一个和识别率相反的概念
错误率的意义和识别率相反
以上四个表征数据性质的方式其实都存在相互关联,单独看某一个其实意义不是很大,而且实际模型训练评估的过程中远远不是只关注着几个,还存在一个写其他经常使用的评估参数
这里还存在一个精度的概念,模型在预判的时候对正例判断经常是我们需要参考的,如果某个模型给出的判断存在很有正例很多,而实际上真正例很少,其他的正例都是负例被错判而来的,这就说明模型对负例的区分度很差,我们就定义一个精度来描述
这里很容易就认为TP+FP=P,这是完全错误的,TP确实是本身测试里面的正例,而FP叫做被模型错误判断为正例的数量,既然是被错误判断为正例,就说明FP这些测试样本本身就是负例,这里一部分正例加上一部分负例怎么就一定是所有的正例了?
精度实际上描述了模型在判断为正例的测试样品中,真正是正例的样品所占有的比例
注意:
召回率与精度是互斥的
两者的分子都是TP,但是分母不同,召回率的分母是所有的正例,精度的分母是被判定为正例的总数,并不是只有正例
如果召回率很大,则说明样本正例实际上几乎完全被模型认为是正例了,那么表明该模型对正例的挑选还不错,说明这个模型对正例的查询很全,如果精度很高,则说明FP很少,表示被误判为正例的很少,说明这个模型查的很准
那么实际上我们也可以称精度为查准率,称召回率为查全率
从纯数学的角度来分析,查准率和查全率可以同时都很高,试想如果某个模型对正负例的区分度为100%,说明这个模型能够完全区分正例和负例,并且不会错判,那么查准率和查全率都是1,两者都达到了最高,那不是跟我们所谓的互斥相冲突么?
实际上所谓的互斥是有前提的,在从纯数学的角度而言,我们认为查准率和查全率可以同时增大,那实际上我们隐含的认为模型的识别能力是动态的,这与我们实际在做的过程中相违背
我们实际在训练完一个模型以后,这个模型的识别能力已经确认了,模型进行计算后针对每一个测试样本都存在一个具体的计算值,我们还没有告诉模型这个值大于多少认为是正例,小于多少认为是负例.
我们对这些值进行归一化处理,使得这些值全部压缩到0-1之间,之后我们自己认为的设定:比如值大于0.5的为正例,小于等于0.5的为负例,这样我们就能得到对应的TP,TN,FP,FN,之后再计算对应的查全率和查准率
这就表明模型一旦给定,样品值的分布也就唯一确定,那么我们想让整个区分点(也可以叫做阈值)上移(比如:大于0.9),那么就会使得模型挑选出来的正例尽可能多的是真正例,从而保证了查准率很高,但是区分点这么高的情况下必然导致很多真正例的样品被误判,这就会降低查全率.
同理如果降低这个区分点,比如降低到0.1,那么模型就会给出几乎所有的样本都是正例,那么背误判的正例几乎就没有,因此全查率就会很高,但是这样做必然导致很多负例也被判定为正例了(FN很大),从而导致查准率下降
因此才说明查准率和查全率实际上是互斥的
F1度量
因为查准率和查全率存在互斥,我们希望我们的模型查准率高,查全率也很高,就像一个搜索引擎一样,希望搜到的信息既精确又全面.因为不同的模型存在不同的查全率和查准率,我们衡量这些模型好坏的一个参数必须要包含查全率和查准率,因此我们构建这样的一个参数
带入化解之后:
F1参数融合了查全率和查准率,这就能够很好的度量某个模型,只有这个模型导致的查全率和查准率双高的情况下,F1才会很高.
但是实际上有些时候我们对查全率和查准率存在不同的偏好,有些情况下我们要求查全率必须很高,不能有漏网之鱼,有些时候我们又要求查准率必须很高,尽量少的对不是正例的样本操作.根据偏好不同针对同一个样本就会存在不同的评价.
为了表示偏好,我们再引入一个变量对F1这种参数进行控制
那么当β为1的时候就是F1参数,这里的β就是代表了偏好,当β大于1时,查全率的权重就更大,当β小于1时,查准率的权重就更大,因此这就能够有效的反应某个特定的模型是否满足我们的需求