赞
踩
目录
我们从简单到难,先定义任务为二分类,后面再推广到多分类就顺水推舟了。问题定义:
confusion matrix | 模型实际预测结果 | ||
预测为Positive的样本数 | 预测为Negative的样本数 | ||
待预测样本的真实标签总数 | P:Positive | TP:True Positive | FN:False Negative |
N:Negative | FP:False Positive | TN:True Negative |
上图表格也叫混淆矩阵confusion matrix,反应了模型对标签预测结果的混淆程度。
Accuracy:准确率,为预测正确的样本数除以预测总数,表示有多少比例的样本预测正确了。
缺点:
相对应的还有错误率:
代码:
- from sklearn.metrics import accuracy_score
-
- y_pred = [0, 0, 1, 1]
- y_true = [1, 0, 1, 0]
- accuracy_score(y_true, y_pred) # 结果为0.5
Precision:查准率,也叫精准率或精确率,即所有预测为阳性的结果中,预测正确的(为真正例)比例。代表了阳性结果的预测准确率。
Recall:查全率,也叫召回率,即正确预测为阳性的样本数占到了真阳性样本数的比例。代表了有多少比例的真阳性被找出来了。
PRC:precision recall curve,横轴是召回率Recall,纵轴是精确率Precision。曲线上的点代表在某阈值下,模型将大于该阈值的结果判定为正样本,小于阈值的结果判定为负样本,此时对应的召回率和精确率。曲线是通过将阈值从高到低移动生成的。
两个模型性能的比较:
F1-Score:F1分数,又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。
F1实际为Precision和Recall的调和平均(harmonic mean)。
调和平均(harmonic mean)H为:所有数字先取倒数,再算平均数,得到平均数后再取倒数,把数又倒回来。
举例:1,4,4的H为:
注意,因为0不存在倒数,所以调和平均数不适用于包含0的一组数字。
调和平均数,强调了较小值的重要性,给予较小值更高的权重。
举个通俗点的例子。小明数学得了80分,语文得了100分;小红数学90分,语文90分。评价谁考的更好?
直接算平均:小明,(80+100)/2 = 90 小红,(90+90)/2=90,这时两者一样好
但从不偏科的角度来看,是小红更好。
用调和平均值计算:小明,2/(1/80+1/100)=88.89 ;小红,2/(1/90+1/90) = 90。
所以,调和平均值比平均值更加“平均”。
电阻并联:电阻A和B并联,这时电流有两个选择,经过电阻A或经过电阻B,这两个路径是平行的,由于较小电阻对电流影响更大,所以用调和平均才是两者的并联电阻。
为什么F1使用调和平均数,而不是算术平均数?
在你训练的机器学习模型过程中,你往往希望能够兼顾精确率和召回率,并使用一个统一的单值评价指标来评价你的机器学习模型的训练效果。我们之所以使用调和平均而不是算术平均,是因为在算术平均中,任何一方对数值增长的贡献相当,任何一方对数值下降的责任也相当;而调和平均在增长的时候会偏袒较小值,也会惩罚精确率和召回率相差巨大的极端情况,很好地兼顾了精确率和召回率。
当R 接近于1, P 接近于 0 时。采用调和平均数的F1值接近于0;而如果采用算数平均数F1的值为0.5;显然采用调和平均数能更好的评估算法的性能。等效于评价R和P的整体效果。
梯度贡献视角分析:
对函数,其图象关于平面
对称。分别求f ( x , y ) 对x 和y的偏导数:
当x < y 时,,梯度grad z在x方向增长比y方向快。
当y > x 时,,梯度grad z在y方向增长比x方向快。
即调和平均在增长的时候会偏袒较小值。
β 可以用来给召回率和精度更多或者更少的权重。
当 时,成为F1-Score,这时召回率和精确率都很重要,权重相同。
当有些情况下我们认为精确率更为重要,那就调整 β 的值小于 1 ,如果我们认为召回率更加重要,那就调整 β的值大于1,比如F2-Score。
G分数是另一种统一精确率和的召回率系统性能评估标准,G分数被定义为召回率和精确率的几何平均数。
最后看Micro-F1和Macro-F1。
在一个多标签分类任务中,可以对每个“类”,计算F1,显然我们需要把所有类的F1合并起来考虑。
这里有两种合并方式:
第一种Micro-F1:先计算出每个类别的Precision和Recall,得到多个Precision和Recall,基于他们直接算F1。
第二种Macro-F1:先计算出每个类别的Precision和Recall,再对每个类别对应的这组Precision和Recall,计算F1,得到多个F1,再算他们的平均。
ROC(Receiver Operating Characteristic):以假阳率FPR为横坐标,真阳率TPR为纵坐标,因为真假阳率的分母都是不变的,当确定一个判定阳性的阈值时,就可以基于该阈值,确定预测结果中真阳样本数和假阳样本数,即确定一组(FPR,TPR),得到一个坐标点 (FPR,TPR)。
将阈值从0不但增大,可以得到一系列的坐标点,他们可以连线,画出来如下。红线是随机乱猜模型的ROC曲线,如果模型的ROC越靠左上角,分类器越佳。
AUC(Area Under Curve)就是ROC曲线下的面积。
两模型的比较:
- >>> import numpy as np
- >>> from sklearn.metrics import roc_auc_score
- >>> y_true = np.array([0, 0, 1, 1])
- >>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
- >>> roc_auc_score(y_true, y_scores)
- 0.75
与 PRC相比,ROC 曲线有一个特点:当正负样本的分布发生变化时,ROC 曲线形状能基本保持不变,而 P-R 曲线的形状一般会发生比较剧烈的变化。因此,当数据不均匀时,ROC 曲线更能够反映模型好坏。而这背后的原因是:
P-R 曲线关注的是真实的正例总数中实际预测对的比例,以及预测为正例的总数中,实际预测对的比例。即只关心下面红色部分
P:Positive | TP:True Positive | FN:False Negative |
N:Negative | FP:False Positive | TN:True Negative |
ROC 曲线关注的是真实的正例和负例中(分别对应 TPR 和 FPR),被预测为正例的比例。即关心了四个部分。
P:Positive | TP:True Positive | FN:False Negative |
N:Negative | FP:False Positive | TN:True Negative |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。