机器学习分类模型评估指标
1、背景
传统的机器学习分类一般按照有监督和无监督来进行区分,有监督主要是各种分类和回归的算法,无监督主要是聚类。新的机器学习方法主要包括:深度学习和强化学习。深度学习中可以做分类和回归的无监督算法,在无监督学习方法主要还是做分类,深度学习的无监督主要是生成模型GAN。强化学习是一种激励性的学习方式,其评价方式也比较独特。
本文主要讲解有监督学习中的分类各种评价指标以及如何判断新旧模型的好坏。
分类问题包括:二分类,多分类,多标签分类,二分类和多分类最终的分类只有一个类别标签,多标签分类是一个元素对应多个类别标签。二分类和多分类评价类同,是本文讨论的内容,多标签分类的预测和比较是二个列表之间的比较,其评价方法更加复杂一点,另外,二个了列表的评价在推荐和搜索中涉及到位置的概念,评价指标更复杂,后续文章会进行讲解。分类模型之间关系如下:
2、二分类评价指标
二分类结果混淆矩阵有4中情况:
- TP:True Positive, 把正类预测为正类;
- FP:False Positive,把负类预测为正类;
- TN:True Negative, 把负类预测为负类;
- FN:False Negative,把正类预测为负类
见下图
2.1指标
2.1.1 准确率Accuracy
accuracy = (TP+TN)/(TP+FN+TN+FP)
2.1.2 召回率Recall
Recall = TP/(TP+FN) ,实际上为: 预测为正实际也为正的/实际为正的(其中包括预测为负的)
2.1.3 精确率Precision
Precision = TP/(TP+FP) 实际上为; 预测为正实际也为正的/预测为正(包括预测为正,实际为负)
2.1.4 敏感度和特异度
敏感度(sensitivity)=召回率Recall= TP/(TP+FN)
特异度(specificity) = TN/(TN+FP) ,评估预测为负的准确率
敏感性和特异性分析,就是分析: 为正例判断为正的能力,为负例判断为负的能力。实际模型中敏感性和特异性都还好的情况几乎不存在,只有在FP和FN都非常小的情况下才可能,这在机器学习中是很难达到的。
2.1.5 TPR和FPR
TPR:True Positive Rate,真正率, TPR代表能将正例分对的概率,TPR=召回率
FPR: False Positive Rate, 假正率, FPR代表将负例错分为正例的概率,FPR=FP/(FP+TN)
2.1.6 F1 score
平衡召回率和准确率的指标
F1=2TP/(2TP+FN+FP)=2*召回率*准确率/(召回率+准确率)
2.2 图形分析
对每个二分类来说,输出的类比都是应该是一个概率,在[0,1]区间,如果不是这个区间,应该归一化到这个区间。归一化到这个区间就意味着,多大的阈值为正,多的的阈值为负。
通过设置阈值来确定当前样本预测的值,其中阈值N表示大于等于概率的表示为正,小于的为负,对应的就可以形成下面的表格:
样本 | 预测概率 | 真实值 | 阈值0.7 | 阈值0.6 | 阈值0.5 |
样本1 | 0.9 | 1 | 1 | 1 | 1 |
样本2 | 0.8 | 1 | 1 | 1 | 1 |
样本3 | 0.7 | 1 | 1 | 1 | 1 |
样本4 | 0.2 | 1 | 0 | 0 | 0 |
样本5 | 0.5 | 1 | 0 | 0 | 1 |
样本6 | 0.2 | 0 | 0 | 0 | 0 |
样本7 | 0.1 | 0 | 0 | 0 | 0 |
样本8 | 0.01 | 0 | 0 | 0 | 0 |
样本9 | 0.6 | 0 | 0 | 1 | 0 |
样本10 | 0.72 | 0 | 1 | 1 | 0 |
计算各个阈值下对应的各个指标,如下图:
准确率 accuracy | 召回率 (敏感度,TPR) Recall | 精确率 Precision | 特异度 (预测负准确率) specificity | 假正率 FPR | |
阈值0.7 | 0.7 | 0.75 | 0.6 | 4/7 | 2/7 |
阈值0.6 | 0.6 | 3/7 | 0.6 | 3/7 | 2/7 |
阈值0.5 | 0.9 | 0.8 | 0.8 | 5/6 | 1/6 |
针对对应指标的分析主要包括:ROC曲线分析,PR曲线分析,还要比较少的用的敏感性和特异性分析
1.2.1 ROC和AUC
FPR为横坐标,TPR为正坐标绘图就为ROC曲线,举例曲线如下:
可以看到无论FPR取什么样的值,TPR都接近于1最好,也就是曲线越靠近左上角越好。AUC:(Area Under roc CurveROC)曲线下的面积,引入AUC的原因是量化评价指标。
AUC表征了分类器把正样本排在负样本前边的能力。这里的意思其实是指数据按照其为正的概率从大到小排序之后,正样本排在负样本前边的能力。AUC越大,就有越多的正样本排在负样本前边。极端来看,如果ROC的(0, 1)点,所有的正样本都排在负样本的前边。
1.2.2 PR曲线
以召回率Recall为横坐标,准确率Precision为横坐标,描绘出来的曲线就为PR曲线。例如下图:
实际情况中,不能单纯的说P值好,还是R值,最终使用F1 scores就是模型的准确率和召回率的调和平均数,具体的公式为: F1=2TP/(2TP+FN+FP)
一般的模型选择的时候,选择f1值最高的或者附近的就好
1.2.3 模型评价和模型阈值
F1评价
从一个问题开始,假设模型A对应最好F1为0.9,对应threshold为0.6,模型B对应的最好的F1为0.8,对应的threshold为0.8,那么是不是模型A就一定比模型B好呢?
答案是不一定
模型A和模型B的f1的曲线可能如下图:
模型A在0.6这个阈值上f1值好,但是绝大多数情况下的f1的值都比模型B差。更进一步的原因,模型评测是在封闭语料中进行的,等上线完成后经常会发现,在现网开放语料的情况下,因为阈值比较第,导致准确率降低的厉害,需要提高阈值,这种情况下模型B就比模型A的优势明显
总结: 一般情况下,模型的选择是选择积分面积大的模型,同等语料下,二个模型的比较规则是:**如果一个被另一个完全包住,那么大的那个好。如果两个有交叉,一般而言,面积大的那个好**
ROC曲线使用:
有些应用场景更关注整样本的准确率,比如:欺诈检测,只关注欺诈用户是否检测出来,本身欺诈用户在整个用户都是百分之几,所以只关注模型在正样本上是否表现好,这种情况下使用ROC来进行判断,模型还是面积大的为好,
更进一步说,虽然模型F1值表现很好,但是因为F1中有负样本的情况,而欺诈检测中负样本为正常用户,检测出正常用户不是模型的目标,所以这种情况下只关注ROC,不关注F1。
敏感性和特异性使用
在医学上,漏诊和误诊都需要考虑,这种情况下就需要针对敏感性和特异性进行绘图分析。
注意:
Accuracy 和 Precision的区别
那么 Accuracy就是 (TP+TN)/(P+N),也就是所有正确的;
而Precision不是,P指的是 TP/(TP+FP),也就是预测成正例的情况,有多少比例是真的正例。
3 多分类评价
当我们的问题属于多分类问题时,考察在不同类别下综合考察分类器的优劣,这时候就需要引入宏平均(Macro-averaging)、微平均(Micro-averaging)。
M分类训练后的模型,针对一个样本输出的分类为M个,其中的评价方式可以分为,Top N评价和所有结果评价,Top N评价主要看Top N中是否包括正确的分类,主要评价Top 1,Imagenet的评价就是计算Top 1和Top 5。所有结果评价计算所有输出分类集合和正确分类的距离,一般情况下使用这种评价极少。
3.1 转化为二分类评价
宏平均(Macro-averaging)是指所有类别的每一个统计指标值的算数平均值,也就是宏精确率(Macro-Precision),宏召回率(Macro-Recall),宏F值(Macro-F Score)
微平均(Micro-averaging)是对数据集中的每一个示例不分类别进行统计建立全局混淆矩阵,然后计算相应的指标。
Macro-averaging与Micro-averaging的不同之处在于:Macro-averaging赋予每个类相同的权重,然而Micro-averaging赋予每个样本决策相同的权重。因为从 [公式] 值的计算公式可以看出,它忽略了那些被分类器正确判定为负类的那些样本,它的大小主要由被分类器正确判定为正类的那些样本决定的,在微平均评估指标中,样本数多的类别主导着样本数少的类。
一般Fmacro和Fmicro都高的分类器性能好
3.2 图形分析
和二分类的图形基本一样,不同的是可以将各个分类都进行绘制,另外还可以将宏平均(Macro-averaging)、微平均(Micro-averaging)对应的值进行绘制。
4、总结
分类评价是最基础的评价,实际上对模型的评价也挺复杂的,很多的时候,我们容易在用一个模型的最佳点和另外一个模型的最佳点来进行对比,以此作为二个模型的优劣,实际上这是不全面的,要充分比较各种阈值下的情况,因为实际线上情况可能不是你所使用的阈值,可能是另外一个阈值,所以,我希望评价指标是和你取得阈值无关的,也就是需要做与阈值无关的处理。所以AUC较大好。
随着深度学习的普及,更多的模型的可解释性没那么好,某种程度上有炼丹的感觉,但是更加规范化的、可对比的评价指标有助于我们选择一个更好的模型。
5、参考文档
- What is the difference between Multiclass and Multilabel Problem https://stats.stackexchange.com/questions/11859/what-is-the-difference-between-multiclass-and-multilabel-proble
- Multiclass and multioutput algorithms https://scikit-learn.org/stable/modules/multiclass.html
还没有评论,来说两句吧...