《机器学习》------AdaCost学习笔记
Adacost 是Adaboost算法的变种目前的分类算法大多都强调准确率,但对于我们实际研究的问题来说可能不是特别的符合。例如:在1000个人中,有10个人得癌症,一般的非代价敏感(Non Cost-Sensitive)学习算法可能会把几乎所有人都分为“健康”的这一类,虽然这样做的准确率很高,但是对于我们研究的问题来说(找出患病的人),却是无意义的。并且,把癌症患者误诊为健康者,让患者错过最佳治
背景
目前的分类算法大多都强调准确率,但对于我们实际研究的问题来说可能不是特别的符合。
例如:在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}C00、C01C_{01}C01、C10C_{10}C10、C11C_{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,主要做了两方面的改进:
- 为每个训练样本分配了误分类代价因素 cic_ici ,并将代价因素加入到分类的学习过程中;
- 在权值调整公式中加入代价调整函数 β(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) 加入到样本权重更新式子中,可以通过权值调整实现以下几点:
- 如果样本的误分类代价高,且在检测时又被误分类,通过权值调整得到的新权值较原本的权值应增大许多;
- 如果样本的误分类代价高,且在检测时又正确分类,通过权值调整得到的新权值较原本的权值应缩小许多;
- 误分类代价高的样本权值相对较高,误分类代价低的样本权值相对较低。
因此,代价调整函数 β(sign(yiht(xi)),ci)\beta(\mathbf{sign}(y_ih_t(x_i)),c_i)β(sign(yiht(xi)),ci) 满足两个要求:
- β−\beta_-β− 为 cic_ici 的非递减非负函数,被错误分类的样本误分类代价越高,通过权值调整得到的新权值就越大。
- β+\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)=∑jmcjci⋅Z1e−yiα1h1(x1)β(sign(yiht(x1)),c1)⋅...⋅ZTe−yiαThT(xi)β(sign(yihT(xi)),ci)=∑jmcj∏tZtcie∑t−yiαtht(xi)β(sign(yiht(xi)),ci)=∑jmcj∏tZtcie−yi∑tα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)=yif∀c,β−(c)≥β+(c)following:∀x∈S={(x1,c1,y1),...,(xi,ci,yi)},H′(x)=y⟹H(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)=y⟺yf′(x)=yt=1∑Tαtht(x)β(sign(yht(x)),c)左边可以表示为正确分类与错误分类的和:yt+∑αt+ht+(x)β++yt−∑αt−ht−(x)β−∵yt+∑αt+ht+(x)β+>0,yt−∑αt−ht−(x)β−≤0,β−≥β+>0∴yt+∑αt+ht+(x)β++yt−∑αt−ht−(x)β+左边可以表示为:β+(yf(x))>0∴yf(x)>0yf′(x)⟹yf(x)∴H′(x)=y⟹H(x)=y>0>0≥yt+∑αt+ht+(x)β++yt−∑αt−ht−(x)β−>0(2)
step3:易知 yi、H(xi)∈{−1,1}y_i、H(x_i) \in \{-1,1\}yi、H(xi)∈{−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)}\geq1e−yif(xi)≥1
- 当 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)} \leq1e−yif(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]]≤e−yif(xi)
同理:
⟦H′(xi)≠yi⟧≤e−yif′(xi) \llbracket H'(x_i) \neq y_i \rrbracket \leq e^{-y_if'(x_i)} [[H′(xi)=yi]]≤e−yif′(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]]≤e−yif′(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} i∑ci[[H(xi)=yi]]≤i∑ci[[H′(xi)=yi]]≤i∑cie−yif′(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 i∑ci[[H′(xi)=yi]]≤i∑DT+1(i)t∏Ztj∑mcj
因为,无论多少次迭代,样本权值之和始终为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 i∑ci[[H′(xi)=yi]]≤i∑cit∏TZt
令 ∑ici=d\sum_i c_i =d∑ici=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} i∑ci[[H′(xi)=yi]]≤dt∏TZt(4)
step4:从 (4)式 中可以可以看出:
min∑ici⟦H′(xi)≠yi⟧≤mind∏tTZt≈d∏tTminZt(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}mini∑ci[[H′(xi)=yi]]≤mindt∏TZt≈dt∏TminZt(5)
通过每次迭代找局部最优的 Zt{Z_t }Zt, 而 Zt=sum(D){Z_t }=sum(D)Zt=sum(D),即每次迭代是误分类代价越来越小的过程。
参考文献:
《AdaCost: Misclassification Cost-sensitive Boosting》
《基于权值控制的误分类算法研究》
《代价敏感分类算法的实验比较》
更多推荐


所有评论(0)