对于地震的预测,我们希望能够对所有要发生的地震都预测到,即使预测有地震了但是没有发生也能接受,但是不能接受预测没有地震却发生地震的情况。
再比如,对于犯罪嫌疑人的定罪,我们不能本着宁可错杀也不放过的原则把好人预测成嫌疑人,我们应该追求的是预测一个正确一个,百分百命中嫌疑人,即使放过了一些罪犯也没关系。
上面这两个例子就是因为对于预测正确的标准不同,导致模型的好坏也发生了变化。所以,在看待模型准确性的问题上我们需要根据实际的场景去下定义。
而根据分类模型和回归模型的不同,相应的评价标准也不尽相同,例如在分类模型中,就有以下 8 种不同的评价标准。
▶1、混淆矩阵
混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。
矩阵中的每一行代表实例的预测类别,每一列代表实例的真实类别。
混淆矩阵会出现四种情况,分别是 TP、FN、FP、TN,如果从字面意思看不到区别,你可以参考小一的个人笔记:
Tips:根据预测结果去记忆。例如:FN:False Negative,F 表示预测结果为假,N 表示预测的是负样本,即模型预测为负样本,且预测结果为假(错误的),所以样本实际为正样本。
真正 (True Positive , TP):被模型预测为正的正样本;
即预测为正样本,且预测结果为真,所以样本实际是正样本
假正 (False Positive , FP):被模型预测为正的负样本;
即预测为正样本,且预测结果为假,所以样本实际是负样本
假负 (False Negative , FN):被模型预测为负的正样本;
即预测为负样本,且预测结果为假,所以样本实际是正样本
真负 (True Negative , TN):被模型预测为负的负样本;
即预测为负样本,且预测结果为真,所以样本实际是负样本
单纯的从上面四个概念,并不能表示模型的准确率,比如说模型预测正确=模型对于正样本预测正确+负样本预测正确,也就是 TP+TN;模型预测为正样本=模型对于正样本预测为正+负样本预测为正,也就是 TP+FP
对应的模型的评价标准也就有了 TPR、FPR、FNR、TNR 四个概念,分别如下:
TPR:True Positive Rate -> 真正率
FPR:False Positive Rate -> 假正率
FNR:False Negative Rate -> 假负率
TNR:True Negative Rate -> 真负率
▶2、精度&错误率
精度 (Accuracy) 是最常用的分类性能指标:即预测结果为真的样本数 / 样本总数
预测结果为真 = 预测为正样本且预测结果为真 (TP) + 预测为负样本且预测结果为真 (TN)
同理的还有错误率 (Error):即预测结果为假的样本数占样本总数的比例
同理,预测为假 = 预测为正样本且预测结果为假 (FP) + 预测为负样本且预测结果为假 (FN)
对某一个实例来说,分对与分错是互斥事件,所以 acc =1 - err
在样本分布不均衡的条件下,精度并不可信。例如:预测地震是否发生的概率,即使全部事件预测成非地震 acc 也有 99% 以上,但是并没有意义。
▶3. 查准率&查全率
查准率 (Precision) :又称精确率,即在已经预测为正的样本中,预测结果正确(真正为正)的样本所占的比例
精确率:可想象“能力在于精,不在于多”。“精“ 即你找出来多少个正类不重要,重要的是这里面有多少个是真正正确的。
预测为正的样本 = 预测为正的样本且预测结果为真(TP) + 预测为正的样本且预测结果为负(FP)
查全率 (Recall) :又称召回率,即在实际为正的所有样本中,预测正确的正样本所占的比例
查全率:“全” 体现的是在所有本来正确的样本中,你实际找出了多少个,重点是“全”
实际为正的样本 = 预测为正样本且预测结果为真(TP) + 预测为负样本且预测结果为负(FN)
查准率和召回率用混淆矩阵表示为:
需要注意的是,精度、查准率和查全率的分母不太一样。
精度针对的是全体样本中预测为真的样本占比,查准率针对的是预测为正的样本中预测正确的样本占比,而查全率针对的是实际为正的样本中预测正确的样本占比
▶4. F1 score
可以发现,当假正(即预测为正样本且预测结果为假:FP)的样本数越少,查准率就越高。相应的对应 FN 就越大,召回率就越小。
如果我们只预测最可能为正的那一个样本为正,其余的都为负,那么这时候我们的查准率很可能为 100%,
同样的道理:预测为正的样本越多,即 FP 越大,相应的对应 FN 就越小,召回率就越大,准确率也就越小
如果我们把所有的样本都预测为正,其余的都为负,那么此时的召回率必然为 100%
上面这句话也就说明了:我们分别用准确率或召回率对模型的预测结果进行评价会有片面性。所以,基于上面的片面性,引出了一个新的标准:F1 度量(F-Score)
F-Score 是查准率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F 值最大。
通常 F-Score 是写成这样的:
当参数 α=1 时,就是最常见的 F1,即:
F1较高时则能说明模型比较有效
▶5. ROC 曲线
逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。
如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。
举个例子:逻辑回归对正负结果的判定默认是 0.5,模型预测的结果如果超过 0.5 则确定样本预测结果为正,否则样本预测为负,但是当我们将 0.5 提高到 0.8,则 0.8 以下的就都预测为负了。
为了直观表示这一现象,引入 ROC 曲线:根据分类结果计算得到空间中相应的点,连接这些点就形成 ROC curve,横坐标为 False Positive Rate (FPR:假正率),纵坐标为 True Positive Rate (TPR:真正率)。
贴一下 TPR 和 FPR 的公式,不用回去找了
一般情况下,这个曲线都应该处于 (0,0) 和 (1,1) 连线的上方,如图:
ROC 曲线中有四个点需要注意,分别是:
点(0,1):即 FPR=0, TPR=1,意味着 FN=0 且 FP=0,将所有的样本都正确分类。
点(1,0):即 FPR=1,TPR=0,最差分类器,避开了所有正确答案。
点(0,0):即 FPR=TPR=0,FP=TP=0,分类器把每个实例都预测为负类。
点(1,1):分类器把每个实例都预测为正类。
总之:ROC 曲线越接近左上角,该分类器的性能越好,其泛化性能就越好。而且一般来说,如果ROC是光滑的,那么基本可以判断没有太大的过拟合。
但是对于两个模型,我们如何判断哪个模型的泛化性能更优呢?这里我们以下两种方法:
如果模型 A 的 ROC 曲线完全包住了模型 B 的 ROC曲线,那么我们就认为模型 A 要优于模型 B;
如果两条曲线有交叉的话,我们就通过比较 ROC 与 X Y 轴所围得曲线的面积来判断,面积越大,模型的性能就越优,这个面积我们称之为 AUC (area under ROC curve)
▶7. AUC
AUC:Area Under Curve 被定义为 ROC 曲线下的面积( ROC 的积分),通常大于0.5小于1。
随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好,如图:
上图中 AUC=1 当然是最好的, 这代表着将所有的样本都正确分类,但是实际 AUC 是达不到 1 的,这种极端情况下只能说明样本数据是存在问题,需要再次筛选模型入模特征。
▶8. P-R曲线
精确率和召回率是互相影响的,有时会相互矛盾,理想情况下肯定是做到两者都高,但是一般情况下精确率高、召回率就低,召回率低、精确率高,当然如果两者都低,那就是有地方出问题了。
对于分类器来说,本质上是给一个概率,此时,我们再选择一个 CutOff 阈值点,高于这个点的判正,低于的判负,其中,这个点的选择需要结合你的具体场景去选择。
用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:
曲线越靠近右上边性能越好,描述曲线下方面积叫 AP 分数(Average Precision Score),AP 分数越高,表示模型性能越好。
但是有时候模型没有单纯的谁比谁好,和文章开头的例子一样,需要结合具体的使用场景。下面是两个场景:
地震的预测:我们希望的是 Recall 非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲 Precision。情愿发出 1000次 警报,把 10次 地震都预测正确了,也不要预测 100次 对了 8次 漏了 2次。
嫌疑人定罪:基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。即时有时候放过了一些罪犯(Recall 低),但也是值得的。
所以,针对场景,如果是做 搜索,那就是保证召回的情况下提升精确率;如果做 疾病监测、反垃圾,则是保证精确率的条件下,提升召回;在 两者都要求高 的情况下,可以用 F1 来衡量。
反过来,场景会决定训练模型时的标准,比如第一个场景中,我们就只看 Recall=99.9999%(地震全中)时的 Precision,其他指标就变得没有了意义。
注意一下,PR 和 ROC 是两个不同的评价指标和计算方式,一般情况下,检索用 PR,分类、识别等用 ROC。
- END -
-----------------
长按识别下方二维码,并关注公众号
1.回复“PY”领取1GB Python数据分析资料
2.回复“BG”领取3GB 名企数据分析报告