背景

目前的分类算法大多都强调准确率,但对于我们实际研究的问题来说可能不是特别的符合。
例如:在1000个人中,有10个人得癌症,一般的非代价敏感(Non Cost-Sensitive)学习算法可能会把几乎所有人都分为“健康”的这一类,虽然这样做的准确率很高,但是对于我们研究的问题来说(找出患病的人),却是无意义的。并且,把癌症患者误诊为健康者,让患者错过最佳治疗时间,这样的代价是极其高昂的,远大于把健康者误诊为癌症患者的代价。因此,引入代价敏感(Cost-Sensitive)就是为了在分类时,给不同的分类错误分配不同的代价,使得总代价最小。

常用的方法有:

  • 调整样本分布(Stratification),这是一种传统的方法,根据错误分类的代价,按照比例变换训练集中类别的频率。但这种方式改变了样本的分布情况,可能会影响算法的性能。

  • 元代价(MetaCost),这是一种将一般分类模型转换成代价敏感模型的方法。它通过一个“元学习”过程,根据最小期望代价修改训练样本的标记,并使用修改过的训练集重新学习新的模型。

  • 代价敏感决策(Direct Cost-Sensitive Decision Making),首先在训练集中多次取样,生成多个模型,再根据多个模型,得到测试样本属于每个类别的概率,然后计算测试样本的所有错误分类的代价,并根据最小代价得到类标记。一种典型的做法就是利用集成学习技术(Ensemble Learning)。

二分类代价敏感矩阵 CCC

预测为正类 预测为负类
实际为正类 C11C_{11}C11 C10C_{10}C10
实际为负类 C01C_{01}C01 C00C_{00}C00

一般情况,分类正确的代价取值为0,即 C00C_{00}C00 = C11C_{11}C11 =0,在不平衡问题中,往往多数类被视为负类,少数类被视为正类。因此,C00C_{00}C00C01C_{01}C01C10C_{10}C10C11C_{11}C11 满足 C10C_{10}C10 > C01C_{01}C01 > C00C_{00}C00 = C11C_{11}C11

TP(True Positive):判断为正样本,实际上也是正样本
TN(True Negative):判断为负样本,实际上也是负样本
FP(False Negative):判断为正样本,实际上是负样本
FN(False Positive):判断为负样本,实际上是正样本

因此总代价 TC(Total Coast) 为:
TC(Total Coast) = C10C_{10}C10 * FN + C01C_{01}C01 * FP

AdaCost 算法原理:

AdaCost 算法相对于 Adaboost,主要做了两方面的改进:

  1. 为每个训练样本分配了误分类代价因素 cic_ici ,并将代价因素加入到分类的学习过程中;
  2. 在权值调整公式中加入代价调整函数 β(sign(yiht(xi)),ci)\beta(\mathbf{sign}(y_ih_t(x_i)),c_i)β(sign(yiht(xi)),ci) ,简记为 β(i)\beta(i)β(i)sign(yiht(xi))\mathbf{sign}(y_ih_t(x_i))sign(yiht(xi)) 是用于表示分类器 ht(xi)h_t(x_i)ht(xi)xix_ixi 的分类结果是否正确。
    sign(yiht(xi))=+1\mathbf{sign}(y_ih_t(x_i)) = + 1sign(yiht(xi))=+1β(i)\beta(i)β(i) 简记为 β+\beta_+β+,表示分类正确;
    sign(yiht(xi))=−1\mathbf{sign}(y_ih_t(x_i)) = - 1sign(yiht(xi))=1β(i)\beta(i)β(i) 简记为 β−\beta_-β,表示分类错误;

β(i)\beta(i)β(i) 加入到样本权重更新式子中,可以通过权值调整实现以下几点:

  1. 如果样本的误分类代价高,且在检测时又被误分类,通过权值调整得到的新权值较原本的权值应增大许多;
  2. 如果样本的误分类代价高,且在检测时又正确分类,通过权值调整得到的新权值较原本的权值应缩小许多;
  3. 误分类代价高的样本权值相对较高,误分类代价低的样本权值相对较低。

因此,代价调整函数 β(sign(yiht(xi)),ci)\beta(\mathbf{sign}(y_ih_t(x_i)),c_i)β(sign(yiht(xi)),ci) 满足两个要求:

  1. β−\beta_-βcic_ici 的非递减非负函数,被错误分类的样本误分类代价越高,通过权值调整得到的新权值就越大。
  2. β+\beta_+β+cic_ici 的非递增非负函数,被正确分类的样本误分类代价越高,通过权值调整得到的新权值就越小。

AdaCost

伪代码:

在这里插入图片描述

Adacost Upper bound:

step1:先表示出第T+1轮迭代时的样本权重:
DT+1(i)=ci∑jmcj⋅e−yiα1h1(x1)β(sign(yiht(x1)),c1)Z1⋅...⋅e−yiαThT(xi)β(sign(yihT(xi)),ci)ZT=cie∑t−yiαtht(xi)β(sign(yiht(xi)),ci)∑jmcj∏tZt=cie−yi∑tαtht(xi)β(sign(yiht(xi)),ci)∑jmcj∏tZt令,f(xi)=∑tαtht(xi),f′(xi)=∑tαtht(xi)β(sign(yihT(xi)),ci)令,H(x)=sign(f(x)),H′(x)=sign(f′(x)),(1) \begin{aligned}\tag{1} D_{T+1}(i)&=\frac{c_i}{\sum_j^mc_j}\cdot \frac{e^{-y_i \alpha_{1}h_1(x_1)}\beta(\mathbf{sign}(y_ih_t(x_1)),c_1)}{Z_1}\cdot...\cdot \frac{e^{-y_i \alpha_{T}h_{T}(x_i)}\beta(\mathbf{sign}(y_ih_T(x_i)),c_i)}{Z_T} \\ &=\frac{c_ie^{\sum_t-y_i\alpha_th_t(x_i)\beta(\mathbf{sign}(y_ih_t(x_i)),c_i)}}{\sum_j^mc_j\prod_tZ_t} \\ &=\frac{c_ie^{-y_i\sum_t\alpha_th_t(x_i)\beta(\mathbf{sign}(y_ih_t(x_i)),c_i)}}{\sum_j^mc_j\prod_tZ_t} \\ & 令 , f(x_i)=\sum_t\alpha_th_t(x_i), f'(x_i)=\sum_t\alpha_th_t(x_i)\beta(\mathbf{sign}(y_ih_T(x_i)),c_i)\\ &令,H(x) = \mathbf{sign}(f(x)),H'(x)= \mathbf{sign}(f'(x)), \end{aligned} DT+1(i)=jmcjciZ1eyiα1h1(x1)β(sign(yiht(x1)),c1)...ZTeyiαThT(xi)β(sign(yihT(xi)),ci)=jmcjtZtcietyiαtht(xi)β(sign(yiht(xi)),ci)=jmcjtZtcieyitαtht(xi)β(sign(yiht(xi)),ci),f(xi)=tαtht(xi),f(xi)=tαtht(xi)β(sign(yihT(xi)),ci)H(x)=sign(f(x)),H(x)=sign(f(x)),(1)

step2:证明 H(x)H(x)H(x)H′(x)H'(x)H(x)更准确:

if∀c,β−(c)≥β+(c)following:∀x∈S={(x1,c1,y1),...,(xi,ci,yi)},H′(x)=y⟹H(x)=yif \forall c,\beta_-(c) \geq \beta_+(c) \\ following: \forall x \in S=\{(x_1,c_1,y_1),...,(x_i,c_i,y_i)\},\\ H'(x) = y \Longrightarrow H(x)=yifc,β(c)β+(c)following:xS={(x1,c1,y1),...,(xi,ci,yi)},H(x)=yH(x)=y

Proof:
H′(x)=y  ⟺  yf′(x)=y∑t=1Tαtht(x)β(sign(yht(x)),c)>0左边可以表示为正确分类与错误分类的和:y∑t+αt+ht+(x)β++y∑t−αt−ht−(x)β−>0∵y∑t+αt+ht+(x)β+>0,y∑t−αt−ht−(x)β−≤0,β−≥β+>0∴y∑t+αt+ht+(x)β++y∑t−αt−ht−(x)β+≥y∑t+αt+ht+(x)β++y∑t−αt−ht−(x)β−>0左边可以表示为:β+(yf(x))>0∴yf(x)>0yf′(x)⟹yf(x)∴H′(x)=y⟹H(x)=y(2)\begin{aligned} H'(x)=y \iff yf'(x)=y\sum_{t=1}^T\alpha_th_t(x)\beta(\mathbf{sign}(yh_t(x)),c) &>0 \\ 左边可以表示为正确分类与错误分类的和:\\ y\sum_{t+}\alpha_{t+}h_{t+}(x)\beta_{+}+y\sum_{t-}\alpha_{t-}h_{t-}(x)\beta_-&>0\\ \because y\sum_{t+}\alpha_{t+}h_{t+}(x)\beta_+>0,\\y\sum_{t-}\alpha_{t-}h_{t-}(x)\beta_-\leq 0,\\\beta_-\geq\beta_+>0 \\ \therefore y\sum_{t+}\alpha_{t+}h_{t+}(x)\beta_++y\sum_{t-}\alpha_{t-}h_{t-}(x)\beta_+ &\geq y\sum_{t+}\alpha_{t+}h_{t+}(x)\beta_++y\sum_{t-}\alpha_{t-}h_{t-}(x)\beta_- >0\\ 左边可以表示为:\beta_+(yf(x))>0\\ \therefore yf(x)>0\\ yf'(x) \Longrightarrow yf(x) \\ \therefore H'(x) = y \Longrightarrow H(x)=y \tag{2} \end{aligned}H(x)=yyf(x)=yt=1Tαtht(x)β(sign(yht(x)),c)yt+αt+ht+(x)β++ytαtht(x)βyt+αt+ht+(x)β+>0,ytαtht(x)β0,ββ+>0yt+αt+ht+(x)β++ytαtht(x)β+β+(yf(x))>0yf(x)>0yf(x)yf(x)H(x)=yH(x)=y>0>0yt+αt+ht+(x)β++ytαtht(x)β>0(2)

step3:易知 yi、H(xi)∈{−1,1}y_i、H(x_i) \in \{-1,1\}yiH(xi){1,1}, 有两种情况:

  1. H(xi)≠yiH(x_i) \neq y_iH(xi)=yi 时,yif(xi)<0y_i \mathcal{f}(x_i)<0yif(xi)<0,即e−yif(xi)≥1e^{-y_i\mathcal{f}(x_i)}\geq1eyif(xi)1
  2. H(xi)=yiH(x_i) = y_iH(xi)=yi 时, yif(xi)>0y_i\mathcal{f}(x_i)>0yif(xi)>0, 即e−yif(xi)≤1e^{-y_i\mathcal{f}(x_i)} \leq1eyif(xi)1

因此,用一个式子同时包含两种情况:⟦H(xi)≠yi⟧=1\llbracket H(x_i) \neq y_i \rrbracket =1[[H(xi)=yi]]=1
该式子表示的意思是:如果括号内的条件成立,则式子为1,反之为0.
易得:
⟦H(xi)≠yi⟧≤e−yif(xi) \llbracket H(x_i) \neq y_i \rrbracket \leq e^{-y_if(x_i)} [[H(xi)=yi]]eyif(xi)
同理:
⟦H′(xi)≠yi⟧≤e−yif′(xi) \llbracket H'(x_i) \neq y_i \rrbracket \leq e^{-y_if'(x_i)} [[H(xi)=yi]]eyif(xi)
所以,由式(2)可得:
⟦H(xi)≠yi⟧≤⟦H′(xi)≠yi⟧⟦H(xi)≠yi⟧≤⟦H′(xi)≠yi⟧≤e−yif′(xi)\begin{aligned} \llbracket H(x_i) \neq y_i \rrbracket &\leq \llbracket H'(x_i) \neq y_i \rrbracket \\ \llbracket H(x_i) \neq y_i \rrbracket &\leq \llbracket H'(x_i) \neq y_i \rrbracket \leq e^{-y_if'(x_i)} \end{aligned}[[H(xi)=yi]][[H(xi)=yi]][[H(xi)=yi]][[H(xi)=yi]]eyif(xi)
把不等式两边做相同的处理:
∑ici⟦H(xi)≠yi⟧≤∑ici⟦H′(xi)≠yi⟧≤∑icie−yif′(xi)(3) \sum_i c_i\llbracket H(x_i)\neq y_i \rrbracket \leq \sum_i c_i\llbracket H'(x_i) \neq y_i \rrbracket \leq \sum_i c_i e^{-y_if'(x_i)}\tag{3} ici[[H(xi)=yi]]ici[[H(xi)=yi]]icieyif(xi)(3)
可以看到表达式左边表示的是误分类的代价

setp4:把 (1) 式代入 (3) 式右边进行替换,得到:
∑ici⟦H′(xi)≠yi⟧≤∑iDT+1(i)∏tZt∑jmcj \sum_i c_i\llbracket H'(x_i) \neq y_i \rrbracket \leq \sum_i D_{T+1}(i) \prod_tZ_t\sum_j^m c_j ici[[H(xi)=yi]]iDT+1(i)tZtjmcj
因为,无论多少次迭代,样本权值之和始终为1:
∑ici⟦H′(xi)≠yi⟧≤∑ici∏tTZt \sum_i c_i\llbracket H'(x_i) \neq y_i \rrbracket \leq \sum_ic_i\prod_t^TZ_t ici[[H(xi)=yi]]icitTZt
∑ici=d\sum_i c_i =dici=d
∑ici⟦H′(xi)≠yi⟧≤d∏tTZt(4) \sum_i c_i\llbracket H'(x_i) \neq y_i \rrbracket \leq d\prod_t^TZ_t \tag{4} ici[[H(xi)=yi]]dtTZt(4)
step4:从 (4)式 中可以可以看出:
min⁡∑ici⟦H′(xi)≠yi⟧≤min⁡d∏tTZt≈d∏tTmin⁡Zt(5)\min\sum_i c_i\llbracket H'(x_i)\neq y_i \rrbracket \leq \min d\prod_t^TZ_t \approx d\prod_t^T\min Z_t \tag{5}minici[[H(xi)=yi]]mindtTZtdtTminZt(5)
通过每次迭代找局部最优的 Zt{Z_t }Zt, 而 Zt=sum(D){Z_t }=sum(D)Zt=sum(D),即每次迭代是误分类代价越来越小的过程。


参考文献:
《AdaCost: Misclassification Cost-sensitive Boosting》
《基于权值控制的误分类算法研究》
《代价敏感分类算法的实验比较》

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐