1 分类模型评估
∙
\bullet
∙ 判断一个分类器对所用样本的分类能力,或者在不同的应用场合时需要有不同的指标。
∙
\bullet
∙ Scikit-Learn中,评价指标计算可对每个样本施加权重,权重通过参数sample_weight指定。老师:在样本上施加权重,该样本上的指标乘以权重,可以得到所有样本的平均指标。那么这个平均的用词是否合适呢?
2 分类模型的评价指标
2.1 logistic损失/负log似然损失(log loss):
l
o
g
l
o
s
s
(
Y
,
P
)
=
−
1
N
∑
i
=
0
N
∑
c
=
0
C
y
i
c
l
o
g
(
p
i
c
)
logloss(\mathbf Y,\mathbf P) = -\frac{1}{N}\sum_{i=0}^{N}\sum_{c=0}^{C}y_{ic}log(p_{ic})
logloss(Y,P)=−N1i=0∑Nc=0∑Cyiclog(pic)
1)其中C为类别数,
y
i
\mathbf y_{i}
yi为第
i
i
i个样本标签的OneHot编码向量,
p
i
c
p_{ic}
pic为模型预测第i个样本为类别c的概率。C为分类数,Y是NC的矩阵,每一行是真值标签的独热编码。P也是NC的矩阵,每一行是模型预测的每个分类的概率。loglos(Y,P)表达形式的数理意义就是,对标签代表分类的预测概率也高也好,负号之外的部分是一个较大值,带负号后就是一个较小的值,也就是负LOG损失,值越小越好。
2)当C=2时,为两类分类:
l
o
g
(
y
,
p
)
=
−
1
N
∑
i
=
1
N
(
y
i
l
o
g
p
i
+
(
1
−
y
i
)
l
o
g
(
1
−
p
i
)
)
log(\mathbf y, \mathbf p) = -\frac{1}{N}\sum_{i=1}^{N}(y_{i}logp_{i} + (1-y_{i})log(1-p_{i}))
log(y,p)=−N1i=1∑N(yilogpi+(1−yi)log(1−pi))
y
i
∈
{
0
,
1
}
y_{i} \in \{0,1\}
yi∈{0,1}为第i个样本的类别,
p
i
p_{i}
pi为模型预测第i个样本的概率。
正如上边提到的那样,该指标其实就是负log似然损失或Logistic损失。
2.2 0-1损失(zero one loss)
1 N ∑ i = 0 N I ( y ^ i ≠ y i ) \frac{1}{N}\sum_{i=0}^{N}I(\hat y_{i} \neq y_{i}) N1i=0∑NI(y^i=yi) 其中 I ( . ) I(.) I(.)为示性函数,括号中的条件满足值为1,否则为0。0-1损失可视为错误率。
2.3 合页损失
1
N
∑
i
=
0
N
m
a
x
(
{
1
−
y
i
y
^
i
}
)
\frac{1}{N}\sum_{i=0}^{N} max(\{1-y_{i}\hat y_{i}\})
N1i=0∑Nmax({1−yiy^i}) 其中
y
i
∈
{
−
1
,
1
}
,
y
^
i
y_{i} \in \{-1, 1\},\hat y_{i}
yi∈{−1,1},y^i为决策函数(样本到决策面的带符号距离)。详情可见SVM部分。
以上三种指标,即Logistic损失/负log似然损失、0-1损失、合页损失,都是损失类,当然是越小越好。
2.4 正确率(accuracy score):
1 N ∑ i = 0 N I ( y ^ i = y i ) \frac{1}{N}\sum_{i=0}^{N}I(\hat y_{i} = y_{i}) N1i=0∑NI(y^i=yi). Scikit-Learn中的分类器里,score函数用的就是正确率,GridSearchC V里,缺省指标也是正确率。应该是在应用于于分类器的大前提下吧?正确率和错误率是两个相反的指标。
2.5 混淆矩阵(confusion matrix):
对C类分类问题,混淆矩阵为C * C的矩阵,下图是手写数字识别的混淆矩阵。
矩阵的第
i
i
i行和第
j
j
j列的元素值,表示将真实类别标签为
i
i
i类的样本预测为第
j
j
j类的样本数数目。对角线元素越大越好,因为对角线元素表示预测正确的数目。通过混淆矩阵,可以看到一个特定分类错分为哪个分类的可能性最大,之后也可以对比较敏感的错分施加惩罚。
3 两分类任务中更多评价指标
3.1 Precision、TPR、FPR
∙
\bullet
∙ Precision (质)
精度、准确率:预测结果为真的样本中,真正为真的比例。个人记忆:预测为阳的样本中,真正为阳的那部分;阈值线右边的样本中,红色的部分。
P
r
e
c
i
s
i
o
n
=
T
P
N
^
+
Precision = \frac{TP}{\hat N_{+}}
Precision=N^+TP
∙
\bullet
∙ TPR(True Positive Rate) (量)
召回率:预测结果召回了多少真正的正样本;个人记忆:所有的阳都被预测为阳,召回率就是1。
真阳率:有多少真正的正样本被预测为真;个人记忆:实际为阳的样本中,预测为阳的那部分;红色部分中,阈值线右边的那部分。
T
P
N
+
\frac{TP}{N_{+}} \space
N+TP
∙
\bullet
∙ FPR(False Positive Rate)
假阳率:有将多少假的样本被预测为真。个人记忆:实际为阴的样本中,预测为阳的那部分;蓝色部分中,阈值线右边的那部分。
F
P
N
−
\frac{FP}{N{-}}
N−FP
3.2 F1分数
Precision和Recall的调和平均值
F
1
=
2
(
P
r
e
c
i
s
i
o
n
∗
R
e
c
a
l
l
)
P
r
e
c
i
s
i
o
n
+
R
e
c
a
l
l
F1 = \frac{2(Precision * Recall)}{Precision + Recall}
F1=Precision+Recall2(Precision∗Recall)
注意:准确率和召回率是相互影响的。一般情况下,准确率高,召回率就低;反之亦然。不是很理解F1分数的数理意义。
3.3 Matthews相关性系数(MCC)
∙
\bullet
∙ Matthews相关性系数用一个值综合混淆矩阵,度量真实值和预测值之间的相关性,定义为:
M
C
C
=
T
P
∗
T
N
−
F
P
∗
F
N
(
T
P
+
F
P
)
(
T
P
+
F
N
)
(
T
N
+
F
P
)
(
T
N
+
F
N
)
MCC = \frac{TP*TN - FP * FN}{\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}}
MCC=(TP+FP)(TP+FN)(TN+FP)(TN+FN)TP∗TN−FP∗FN
∙
\bullet
∙ 分母中任意一对括号内为0,那么整个MCC的值就为0
∙
\bullet
∙ MCC的值在[-1,1]之间,1:分类器是完美的,0:分类器是随机的,-1:分类器是最差的,所有预测结果和实际相反。
不明白该指标的数理含义,为什么会达到效果?
3.4 Receiver Operating Characteristic(ROC)曲线(受试者工作特征曲线)
∙
\bullet
∙ 上面我们讨论给定阈值
τ
\tau
τ的TPR(真阳率)和FPR(假阳率)
∙
\bullet
∙ 如果不是只考虑一个阈值,而是在一系列阈值上运行检测器,并画出TPR和FPR为阈值
τ
\tau
τ的隐藏式函数,得到ROC曲线。为什么叫隐式函数,是不是说图上并没有体现出
τ
\tau
τ的值?
老师说上图是直方图,但印象中直方图的横纵坐标值的含义,跟此处有细微的差异,那么直方图的准确定义又是什么样的呢?蓝色和红色分隔更开的情况,是属于更好的情况。
∙
\bullet
∙ ROC曲线越偏左上角表示分类器越好。
∙
\bullet
∙ AUC(Area Under Curve):ROC曲线下的面积,取值在[0.5, 1.0],0.5表示随机猜测分类,1表示完美分类器。
∙
\bullet
∙ ROC曲线有个很好的特性:当测试集上的正负样本分布变化时,ROC曲线能够保持不变。在实际的数据集中,经常会出现类别不平衡的现象,即负样本比正样本多很多(或者相反),而测试数据中的正负样本分布也可能随着时间变化。这里的正负样本分布变化,就应该是说正负样本的比值会发生变化吧?应再分析为什么会有这个性质?
3.5 PR曲线
∙
\bullet
∙ Precision and Recall(PR曲线):用于稀有事件检测,如目标检测、信息检索、推荐系统。
∙
\bullet
∙ 稀有事件检测的负样本非常多(
N
−
N_{-}
N−很大),因此
F
P
R
=
F
P
N
−
FPR=\frac{FP}{N_{-}}
FPR=N−FP会很小,比较TPR和FPR没有太大意义(ROC曲线中只有左边很小一部分有意义),所以只考虑正样本。前边说正负样本分布变化时,ROC曲线保持不变,此处又说只有左边很小一部分有意义,这量个提法应该不冲突。
∙
\bullet
∙ 与ROC曲线相似,PR曲线是阈值变化时Precision和Recall组合点划过的轨迹
∙
\bullet
∙ PR曲线越往右上越好。
3.6 AP(Average Precision)
∙
\bullet
∙ Precision只考虑了返回结果中相关文档的数目,没有考虑文档之间的顺序。
∙
\bullet
∙ 对一个搜索引擎而言,返回的结果是有序的,且越相关的文档越靠前越好,于是有了AP(Average Precision)概念。
∙
\bullet
∙ AP:对不同召回率点上的精度进行平均:
A
P
=
∫
0
1
P
(
R
)
d
R
=
∑
k
=
0
N
P
(
k
)
R
(
k
)
AP = \int_0^1P(R)dR = \sum_{k=0}^{N}P(k)R(k)
AP=∫01P(R)dR=k=0∑NP(k)R(k)即PR曲线下的面积(回忆:AUC为ROC下的面积)
公式看明白了,但这个公式如何体现有序、相关文档靠前、平均等概念呢?
3.6 mAP(Mean Average Precision)
∙
\bullet
∙ 平均AP(Mean Average Precision, mAP):多个AP的平均
∙
\bullet
∙ 物体检测中经常用mAP评价模型性能:多个物体类别的AP平均。
∙
\bullet
∙ 这里有一些mAP的介绍
https://www.zhihu.com/question/53405779
4 Scikit-Learn中分类模型性能评价
∙
\bullet
∙ 类似回归模型的性能评价,Scikit-Learn对分类模型性能评价提供3中不同的API:
1)estimator中score方法:每个学习器都有score方法,提供一个缺省的评估方法(分类器为正确率)
2)交叉验证中的scoring参数
3)metrics模块中的方法
5 多类分类与多标签分类
∙
\bullet
∙ 多类(Multiclass)分类:相对于两类(binary)分类而言,标签y的取值有多种,如对水果进行分类,水果可能是橙子、苹果或梨,但不同同时是橙子、苹果或梨,每个样本被分配到唯一的一个标签。
∙
\bullet
∙ 多标签(Multilabel)分类:给每个样本分配一套目标标签,这些标签互不排斥(类似物体的属性,可以有多种属性),例如与文档相关的主题,可以同时是宗教、政治、金融的。
6 Scikit-Learn中metrics的分类模型评价指标
∙
\bullet
∙ 只能应用于两类分类
∙
\bullet
∙ 也可应用于多类分类
∙
\bullet
∙ 可用于多标签
损失类,是越小越好。分数类,是越大越好。fbeta中, 若beta为1,就成为了f1_score。两类分类任务应该能用多类分类的指标,多分类任务也应该能用多标签指标,因为他们是特殊和一般(属于)的关系。Scikit-Learn中实现也实现了一些之前没讲到的指标,同时也支持自定义指标。
更多内容,请参考scikit-learn文档:
https://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics