Bootstrap

【机器学习基础】第三课:模型性能度量

【机器学习基础】系列博客为参考周志华老师的《机器学习》一书,自己所做的读书笔记。

1.均方误差

使用不同的性能度量往往会导致不同的评判结果。

例如, f ( x ) f(x) f(x)为预测结果, y y y为真实标记。

回归问题中,最常用的性能度量为“均方误差”:

E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2

更一般的,对于数据分布 D D D和概率密度函数 p ( ⋅ ) p(\cdot) p(),均方误差可描述为:

E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D)=\int_{x\sim D}(f(x)-y)^2 p(x)dx E(f;D)=xD(f(x)y)2p(x)dx

2.错误率与精度

更一般的,对于数据分布 D D D和概率密度函数 p ( ⋅ ) p(\cdot) p()

  • 错误率: E ( f ; D ) = ∫ x ∼ D Π ( f ( x ) ≠ y ) p ( x ) d x E(f;D)=\int_{x\sim D}\Pi (f(x)\neq y)p(x)dx E(f;D)=xDΠ(f(x)=y)p(x)dx
  • 精度: a c c ( f ; D ) = ∫ x ∼ D Π ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) acc(f;D)=\int_{x\sim D}\Pi (f(x)=y)p(x)dx=1-E(f;D) acc(f;D)=xDΠ(f(x)=y)p(x)dx=1E(f;D)

Π ( ⋅ ) \Pi (\cdot) Π():指示函数,在 ⋅ \cdot 为真和假时分别取值为1,0。

3.查准率、查全率与 F 1 F_1 F1

  • 查准率,亦称“准确率”:precision
  • 查全率,亦称“召回率”:recall

混淆矩阵:

查准率 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

查全率 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

一般情况下,查全率和查准率是一对矛盾的度量,一个高一个底。
通常只有在一些简单任务中,才可能使查全率和查准率都很高。

3.1.“P-R曲线”

根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本,按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。

举例解释一下:例如一个二分类问题,按照预测为正例的概率从大到小进行排序:

绘制“P-R”曲线的步骤:

  1. 预测为正例的概率从大到小排列。
  2. 构建二维直角坐标系,横轴为查全率,纵轴为查准率。
  3. 阈值在(0)处时,有 T P = F P = 0 TP=FP=0 TP=FP=0,即分类器预测全为负例,此时 P = R = 0 P=R=0 P=R=0,得到“P-R曲线”的第一个点(0,0)。
  4. 阈值在(1)处时,大于该阈值的样本被预测为正例,小于该阈值的样本被预测为负例,结合样本的真实标记构建混淆矩阵,从而计算查准率和查全率,得到第二个点的坐标。
  5. 其余点以此类推。
  6. 阈值在(n)时,得到最后一个点,分类器预测全为正例, F N = T N = 0 FN=TN=0 FN=TN=0,此时查全率为1,查准率实际为数据集中正例所占的比例(如果数据集为平衡数据, P ≈ 0.5 P\approx 0.5 P0.5,此时最后一个点的坐标为(1,0.5))。

因此,根据上述步骤,将得到的多个点连接起来,得到“P-R曲线”(或者叫“P-R图”)。

⚠️为绘图方便和美观,“P-R曲线”通常绘制成单调平滑曲线,但现实任务中的“P-R曲线”常是非单调、不平滑的,在很多局部有上下波动。

3.1.1.通过“P-R曲线”评价模型性能的优劣

“P-R曲线”与平衡点示意图:

若一个学习器的“P-R曲线”被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,如上图中学习器A的性能优于学习器C。

如果两个学习器的“P-R曲线”发生了交叉,例如A和B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率下进行比较。

常用的比较方法有以下三种:

  1. 曲线下面积。
  2. 平衡点(Break-Event Point,简称BEP),它是“查准率=查全率”时的取值。如C的 B E P = 0.64 BEP=0.64 BEP=0.64,A优于B(因为A的BEP>B的BEP)等。
  3. BEP还是过于简单,引入F值。

3.2.F值

F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_\beta=\frac{(1+\beta^2)\times P\times R}{(\beta^2 \times P)+R} Fβ=(β2×P)+R(1+β2)×P×R

其中 β ( β > 0 ) \beta (\beta >0) β(β>0)度量了查全率对查准率的相对重要性。

  • β = 1 \beta =1 β=1时,即 F 1 F_1 F1,查全率和查准率的重要性相当。
  • β > 1 \beta >1 β>1时,查全率有更大影响。
  • β < 1 \beta <1 β<1时,查准率有更大影响。

F 1 F_1 F1是基于查准率和查全率的调和平均,定义为: 1 F 1 = 1 2 ( 1 P + 1 R ) \frac{1}{F_1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)

F β F_\beta Fβ则是加权调和平均, 1 F β = 1 1 + β 2 ( 1 P + β 2 R ) \frac{1}{F_\beta}=\frac{1}{1+\beta^2}(\frac{1}{P}+\frac{\beta^2}{R}) Fβ1=1+β21(P1+Rβ2)

tips:与算数平均 ( P + R 2 ) (\frac{P+R}{2}) (2P+R)和几何平均 ( P × R ) (\sqrt{P\times R}) (P×R )相比,调和平均更重视较小值(更适合评价不平衡数据的分类问题)。

相关知识补充:

常见的三种平均数:算数平均数、几何平均数、调和平均数。

这里主要介绍一下调和平均数。

调和平均数(harmonic mean)又称倒数平均数,是各种统计变量倒数的算数平均数的倒数。主要分为两种类型:简单调和平均数加权调和平均数

简单调和平均数:

H n = 1 1 n ∑ i = 1 n 1 x i = n ∑ i = 1 n 1 x i H_n=\frac{1}{\frac{1}{n}\sum_{i=1}^n\frac{1}{x_i}}=\frac{n}{\sum_{i=1}^n\frac{1}{x_i}} Hn=n1i=1nxi11=i=1nxi1n

加权调和平均数:

H n = 1 1 m 1 + m 2 + ⋯ + m n ( 1 x 1 m 1 + 1 x 2 m 2 + ⋯ + 1 x n m n ) = ∑ i = 1 n m i ∑ i = 1 n m i x i \begin{align} H_n & = \frac{1}{\frac{1}{m_1+m_2+\cdots +m_n}(\frac{1}{x_1}m_1+\frac{1}{x_2}m_2+\cdots +\frac{1}{x_n}m_n)} \\&= \frac{\sum_{i=1}^n m_i}{\sum_{i=1}^n \frac{m_i}{x_i}} \end{align} Hn=m1+m2++mn1(x11m1+x21m2++xn1mn)1=i=1nximii=1nmi

3.2.1.宏 F 1 F_1 F1和微 F 1 F_1 F1

如果:

  1. 进行多次训练/测试,每次得到一个混淆矩阵;
  2. 在多个数据集上进行训练/测试,希望估计算法的“全局”性能;
  3. 执行多分类任务,每两两类别的组合都对应一个混淆矩阵;
  4. 其他类似情况…

解决办法:引入宏 F 1 F_1 F1和微 F 1 F_1 F1

3.2.1.1.宏 F 1 F_1 F1

先在各混淆矩阵上分别计算查全率和查准率,记为( P 1 , R 1 P_1,R_1 P1,R1),( P 2 , R 2 P_2,R_2 P2,R2),…,( P n , R n P_n,R_n Pn,Rn),再计算平均值。

宏查准率: m a c r o − P = 1 n ∑ i = 1 n P i macro-P=\frac{1}{n}\sum_{i=1}^n P_i macroP=n1i=1nPi

宏查全率: m a c r o − R = 1 n ∑ i = 1 n R i macro-R=\frac{1}{n}\sum_{i=1}^n R_i macroR=n1i=1nRi

F 1 F_1 F1 m a c r o − F 1 = 2 × m a c r o − P × m a c r o − R m a c r o − P + m a c r o − R macro-F_1=\frac{2\times macro-P\times macro-R}{macro-P+macro-R} macroF1=macroP+macroR2×macroP×macroR

3.2.1.2.微 F 1 F_1 F1

先将各混淆矩阵的对应元素进行平均,得到 T P , F P , T N , F N TP,FP,TN,FN TP,FP,TN,FN的平均值,分别记为 T P ‾ , F P ‾ , T N ‾ , F N ‾ \overline{TP},\overline{FP},\overline{TN},\overline{FN} TP,FP,TN,FN,再基于这些平均值计算。

微查准率: m i c r o − P = T P ‾ T P ‾ + F P ‾ micro-P=\frac{\overline{TP}}{\overline{TP}+\overline{FP}} microP=TP+FPTP

微查全率: m i c r o − R = T P ‾ T P ‾ + F N ‾ micro-R=\frac{\overline{TP}}{\overline{TP}+\overline{FN}} microR=TP+FNTP

F 1 F_1 F1 m i c r o − F 1 = 2 × m i c r o − P × m i c r o − R m i c r o − P + m i c r o − R micro-F_1=\frac{2\times micro-P \times micro-R}{micro-P+micro-R} microF1=microP+microR2×microP×microR

4.ROC与AUC

很多学习器是为测试样本产生一个实值或者概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。

依旧使用前文3.1部分的概率输出结果作为一个例子:

  • 若更重视“查准率”,则可选择排序靠前的位置进行截断。
  • 若更重视“查全率”,则可选择排序靠后的位置进行截断。

ROC:“受试者工作特征”(Receiver Operating Characteristic)曲线。

在ROC中:

  • 横轴:“假阳性率”(False Positive Rate,FPR)。

F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP

  • 纵轴:“真阳性率”(True Positive Rate,TPR)。

T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP

绘制ROC步骤:

  1. 当阈值设在(0)处时,分类器将所有样本预测为负例,此时 F P R = T P R = 0 FPR=TPR=0 FPR=TPR=0,得到第一个点:(0,0)。
  2. 其余点以此类推。
  3. 当阈值设在(n)处时,分类器将所有样本预测为正例,即 T N = F N = 0 TN=FN=0 TN=FN=0,有 F P R = T P R = 1 FPR=TPR=1 FPR=TPR=1,得到最后一个点:(1,1)。

根据上述步骤可得到ROC,见下图:

点(0,1)处完美分类。

现实任务中通常是利用有限个测试样例来绘制ROC图,此时仅能获得有限个(FPR,TPR)坐标对,无法产生图(a)中光滑的ROC曲线,只能绘制出如图(b)中所示的近似ROC曲线(类比“P-R曲线”的绘制)。

进行学习器比较时,使用AUC(Area Under ROC Curve)值,即ROC曲线下面积。

5.代价敏感错误率与代价曲线

不同类型的错误所造成的后果不同。如错误地把患者诊断为健康人与错误地把健康人诊断为患者,造成的后果的代价是不同的。

为权衡不同类型错误所造成的损失,可为错误赋予“非均等代价”。

以二分类任务为例,可根据任务的领域知识设定一个“代价矩阵”,其中 c o s t i j cost_{ij} costij表示将第i类样本预测为第j类样本的代价。二分类代价矩阵见下图:

  • 一般来说, c o s t i i = 0 cost_{ii}=0 costii=0
  • 若将第0类判别为第1类所造成的损失更大,则 c o s t 01 > c o s t 10 cost_{01}>cost_{10} cost01>cost10
  • 损失程度相差越大, c o s t 01 cost_{01} cost01 c o s t 10 cost_{10} cost10值的差别越大。
  • 一般情况下,重要的是代价比值而非绝对值,例如 c o s t 01 : c o s t 10 = 5 : 1 cost_{01}:cost_{10}=5:1 cost01:cost10=5:1 50 : 10 50:10 50:10所起效果相当。

前面介绍的性能度量,它们大都隐式地假设了均等代价。在非均等代价下,目标应该是最小化“总体代价”。

将第0类作为正类,第1类作为反类,令 D + D^+ D+ D − D^- D分别代表样例集D的正例子集和反例子集,则“代价敏感错误率”为:

E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + ∏ ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x i ∈ D − ∏ ( f ( x i ) ≠ y i ) × c o s t 10 ) E(f;D;cost)=\frac{1}{m}(\sum_{x_i\in D^+}\prod (f(x_i)\neq y_i)\times cost_{01}+\sum_{x_i\in D^-}\prod (f(x_i)\neq y_i)\times cost_{10}) E(f;D;cost)=m1(xiD+(f(xi)=yi)×cost01+xiD(f(xi)=yi)×cost10)

(结合上文中的错误率公式进行理解。类似的,可给出基于分布定义的代价敏感错误率。若令 c o s t i j cost_{ij} costij中的i,j取值不限于0,1,则可定义出多分类任务的代价敏感性能度量。)

在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”则可达到该目的。

  • 代价曲线的横轴:取值为 [ 0 , 1 ] [0,1] [0,1]的正例概率代价:

P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 (1) P(+)cost=\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}}\tag{1} P(+)cost=p×cost01+(1p)×cost10p×cost01(1)

其中 p p p是样例为正例的概率。

  • 代价曲线的纵轴:取值为 [ 0 , 1 ] [0,1] [0,1]的归一化代价:

c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 (2) cost_{norm}=\frac{FNR\times p\times cost_{01}+FPR\times (1-p)\times cost_{10}}{p\times cost_{01}+(1-p)\times cost_{10}}\tag{2} costnorm=p×cost01+(1p)×cost10FNR×p×cost01+FPR×(1p)×cost10(2)

设ROC曲线上点的坐标为 ( F P R , T P R ) (FPR,TPR) (FPR,TPR),可对应地,在代价平面上绘制一条从 ( 0 , F P R ) (0,FPR) (0,FPR) ( 1 , F N R ) (1,FNR) (1FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。见下图:

代价曲线上的每一点对应的都是最小的归一化代价(无论哪个阈值)。图中每一条线都对应ROC中的一个点,对应一个相应的阈值 η \eta η。相比ROC,代价曲线多考虑了p,即正例先验概率

5.1.关于式(2)的推导

先只看单个分类器的期望代价,假设我们的分类器是: x ≷ d e c i d e   H 0 d e c i d e   H 1 η x \underset{decide\ H_1}{\overset{decide\ H_0}{\gtrless}}\eta xdecide H1decide H0η

则该分类器的期望代价就是:

E [ C o s t ] = ∑ i = 0 1 ∑ j = 0 1 C i j P r [ d e c i d e   H i ∣ H j ] P r [ H j ] E[Cost]=\sum_{i=0}^1 \sum_{j=0}^1 C_{ij}Pr[decide\ H_i\mid H_j]Pr[H_j] E[Cost]=i=01j=01CijPr[decide HiHj]Pr[Hj]

其中:

  • C i j C_{ij} Cij来自于代价矩阵,即 c o s t i j cost_{ij} costij
  • P r [ d e c i d e   H i ∣ H j ] Pr[decide\ H_i\mid H_j] Pr[decide HiHj]为条件概率
    • P r [ d e c i d e   H 0 ∣ H 1 ] = F P R Pr[decide\ H_0\mid H_1]=FPR Pr[decide H0H1]=FPR
    • P r [ d e c i d e   H 1 ∣ H 1 ] = T N R Pr[decide\ H_1\mid H_1]=TNR Pr[decide H1H1]=TNR
    • P r [ d e c i d e   H 1 ∣ H 0 ] = F N R Pr[decide\ H_1\mid H_0]=FNR Pr[decide H1H0]=FNR
    • P r [ d e c i d e   H 0 ∣ H 0 ] = T P R Pr[decide\ H_0\mid H_0]=TPR Pr[decide H0H0]=TPR
  • P r [ H j ] Pr[H_j] Pr[Hj]是先验概率,即 P r [ H 0 ] = p , P r [ H 1 ] = 1 − p Pr[H_0]=p,Pr[H_1]=1-p Pr[H0]=p,Pr[H1]=1p

又因为有 c o s t 00 = c o s t 11 = 0 cost_{00}=cost_{11}=0 cost00=cost11=0,所以有:

E [ C o s t ] = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 E[Cost]=FNR\times p\times cost_{01}+FPR\times (1-p)\times cost_{10} E[Cost]=FNR×p×cost01+FPR×(1p)×cost10

即为式(2)中分子,即未归一化的期望代价。

若要对其进行归一化处理(压缩至[0,1]区间),可除以最大代价期望,即全部分错的情况, T N = T P = 0 TN=TP=0 TN=TP=0,最大代价期望为: p × c o s t 01 + ( 1 − p ) × c o s t 10 p\times cost_{01}+(1-p)\times cost_{10} p×cost01+(1p)×cost10。据此便可得到式(2)。

5.2.关于式(1)的推导

未归一化的 E [ C o s t ] E[Cost] E[Cost]p线性相关,描述某一阈值下,p E [ C o s t ] E[Cost] E[Cost]的关系: ∫ 0 1 E [ C o s t ] d p \int_0^1E[Cost]dp 01E[Cost]dp可以表示某一阈值下的总代价期望。

归一化的 c o s t n o r m cost_{norm} costnorm不与p呈线性相关,那么 ( 0 , F P R ) (0,FPR) (0,FPR) ( 1 , F N R ) (1,FNR) (1,FNR)之间的连线可能就不是线段,可能会是非常复杂的曲线(并且不一定在二维空间内),取所有曲线的下界,并求其围成的面积是非常困难的。

“规范化”“归一化”
“规范化”是将不同变化范围内的值映射到相同的固定范围中,常见的是[0,1],此时亦称“归一化”

那么在归一化 c o s t n o r m cost_{norm} costnorm后,如何保证 ( 0 , F P R ) (0,FPR) (0,FPR) ( 1 , F N R ) (1,FNR) (1,FNR)之间的连线依旧是线段呢?

答:假设线段的两点分别是 A : ( 0 , F P R ) A:(0,FPR) A:(0,FPR) B : ( 1 , F N R ) B:(1,FNR) B:(1,FNR),如果想表示AB连线上所有点的集合就用 λ A + ( 1 − λ ) B , λ ∈ [ 0 , 1 ] \lambda A+(1-\lambda)B,\lambda \in [0,1] λA+(1λ)B,λ[0,1],通过变化 λ \lambda λ,我们可以得到线段AB。则线段AB上任意一点的纵坐标为: λ F P R + ( 1 − λ ) F N R = c o s t n o r m \lambda FPR+(1-\lambda)FNR=cost_{norm} λFPR+(1λ)FNR=costnorm。因此可以得到 1 − λ = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 1-\lambda =\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}} 1λ=p×cost01+(1p)×cost10p×cost01 λ = ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 \lambda=\frac{(1-p)\times cost_{10}}{p\times cost_{01}+(1-p)\times cost_{10}} λ=p×cost01+(1p)×cost10(1p)×cost10。又线段AB上任意一点的横坐标为: λ × 0 + ( 1 − λ ) × 1 = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 = P ( + ) c o s t \lambda \times 0+(1-\lambda)\times 1=\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}}=P(+)cost λ×0+(1λ)×1=p×cost01+(1p)×cost10p×cost01=P(+)cost

6.参考资料

1.机器学习(周志华)第2.3.4节中,代价曲线的理解?(参考知乎用户“xf3227”的回答)


想要获取最新文章推送或者私聊谈人生,请关注我的个人微信公众号:⬇️x-jeff的AI工坊⬇️

个人博客网站:https://shichaoxin.com

GitHub:https://github.com/x-jeff


;