Cost-sensitive与损失函数
之前设计的所有Cost-sensitive算法, 无论是rescaling还是reweighted类算法, 或是数据预处理, 或是非cost-sensitive分类器内部更新逻辑改造, 或是模型之间相互配合. 但都是对某个或某类特殊的算法模型进行改造, 并没有一个通用的算法.
而任何分类器的训练都需要一个损失函数来推动学习的进行, 如果能够根据cost matrix, 直接对损失函数进行改变, 使之成为代价敏感损失, 就有着很大的通用性.
这里探索代价敏感损失的设计准则.
代价敏感损失函数
在分类问题中, 常用损失函数有平方损失, 指数损失, 对数损失, SVM损失等. 针对Cost-sensitive分类问题, 可构造Cost-sensitive损失函数, 通过优化代价敏感风险达到最小化分类代价的目的.
正式表述如下:
已知样本空间X, 类别空间Y={±1}. 给定样本(x,y),x∈X,y∈Y, 代价敏感损失函数为LC(y,F(x)), 是度量分类器F对(x,y)的预测损失. 其中C是代价矩阵.
Cost-sensitive学习算法优化整个样本空间的代价敏感损失, 得到代价敏感风险EX,Y[LC(y,F(x))], 这是一个期望值. 再求代价敏感决策函数FC∗:
FC∗=argminFEX,Y[LC(y,F(x))]
这样得到的就是当前样本集合代价矩阵下, 最优的分类器.
在给定具体样本x情况下, 代价敏感风险EX,Y[LC(y,F(x))]可以转换为优化条件代价敏感风险EY[LC(y,F(x))∣x], 即采用F对x的类别进行预测产生的风险, 代价敏感决策函数的求解也变为:
FC∗(x)=argminFEY[LC(y,F(x))∣x]
代价敏感损失函数设计准则
依据Bayes最优分类, 提出代价敏感损失函数的一般设计准则.
Bayes最优分类
以二分类问题为例, 代价矩阵(cost matrix)为:
C=[c++c−+c+−c−−] 其中cab是将b类样本预测为a类样本的代价, 根据Bayes决策理论, 最优决策应最小化期望分类代价, 因此, 将一个样本分为正样本的条件是, 造成的分类成正样本造成的预期cost比分成负样本造成的cost小, 否则为负, 即需要满足:
c++p(x)+c+−(1−p(x))⩽c−+p(x)+c−−(1−p(x))
其中的p(x)=P(y=+1∣x)为后验概率, 即分类器F预测的该样本的为正样本的概率.
记c+=c−+−c++,c−=c+−−c−−分别表示正负类样本的分类代价, 可以将Bayes分类器记为:
x’s label={1,p(x)⩾c++c−c−−1,p(x)<c++c−c− 也可以记为sgn(p(x)−c++c−c−).
当正负类别分类代价相等时, 即c+=c−, Bayes分类器为sgn(p(x)−21).
代价敏感损失设计准则
准则 1
代价敏感损失LC(y,F(x))需满足Bayes一致性.
即根据代价敏感损失LC(y,F(x))求得的最优分类器FC∗(x)始终可以使用sgn(FC∗(x))的形式来进行决策, 即当p(x)以某个值为界限进行分类. 符合Bayes分类器的形式.
准则1保证优化代价敏感风险得到的分类器FC∗(x)能最小化期望分类代价, 实现最优代价敏感分类.
额外补充一句, 从上面可以看出, 这里的F(x)是一个判决函数, 大于零代表一类样本, 小于零代表另一类样本. 注意与模型本身输出的区别, 一般分类模型的输出是属于每个类别的概率p(x), 而判决函数F(x)则是p(x)的函数, 例如最简单的F(x)=2p(x)−1, 即二分类模型以0.5为界限.
准则 2
FC∗(x)对应的条件代价敏感风险EY[LC(y,F(x))∣x]在Bayes分类边界{x∣p(x)=c++c−c−}处取得最大值.
Bayes分类器的期望分类代价为:
cost={c−(1−p(x)),c+p(x),p(x)⩾c++c−c−p(x)<c++c−c−+c− 在分类边界{x∣p(x)=c++c−c−}处, 将样本x判为正负类别的分类代价相等并达到最大值c++c−c+c−, 此时最难预测样本类别. 因此根据Bayes最优分类, 给定x, FC∗(x)对其预测产生的风险EY[LC(y,F(x))∣x]应同样在Bayes分类边界处取得最大值.
准则2保证代价敏感损失能更有效地近似分类代价, 在最优决策处的代价敏感损失和分类代价有一样的全局性质.
这两条准则都是把通过 (条件)代价敏感风险 得到的FC∗(x)与使用 最优决策应最小化期望分类代价 贝叶斯分类的形式联系起来.
代价敏感损失函数
以几种常用的分类损失函数为例, 分析两类代价敏感损失函数的性能.
具体涉及到平方损失, 指数损失, 对数损失, SVM损失四种.
指数损失成功应用于boosting算法, 如Adaboost算法
关于这些损失函数的样子, 以及在上述算法模型中是如何使用对应函数的, 参考机器学习-损失函数.
这几种损失函数均可表示为间隔yF(x)的函数, 即L(y,F(x))=L(yF(x)), 如下图表示:
注意其中的一些转换, 如平方损失如何转到分类问题上, 对数损失与逻辑回归的关系等.
关于各个损失函数的条件风险EX,Y[LC(y,F(x))]和最优决策函数FC∗(x), 与模型输出概率p(x)的关系见参考资料中的第一篇论文: 代价敏感学习中的损失函数设计. 有图例说明, 直观清晰.
引入分类代价的策略
通常有两种:
分类代价在损失函数外: cyL(yF(x))
分类代价在损失函数内: L(ycyF(x))
两种方法的理论和对比在论文中也有详细说明, 这里就不展开了. 总结如下:
分类代价在损失函数外的方法, 各种形式的损失函数均满足准则1, 但除了SVM损失外, 都不满足准则2
分类代价在损失函数内的方法, 各种形式的损失函数均既满足准则1, 又满足准则2
引入分类代价后, 最直观的改变是分类边界的改变. 从之前的0.5, 变化到一个小于0.5的值
如何使用代价敏感损失设计准则
注意这里的损失函数, 与算法模型中直接拿来训练, 计算梯度的损失函数不是一个概念.
论文中给出一种boosting方法, 即采用泛函空间的梯度下降法拟合判决函数F. 构造弱分类器集合, 每次迭代从中选择出与前条件风险负梯度拟合最好的弱分类器, 计算其最优步长, 最终判决函数是所有弱分类器的加权组合:
关键在于第二步, 根据当前判决函数所在的泛函空间中的负梯度, 去拟合一个分类器. 具体的拟合方法没有提及, 但猜测由于判决函数F(x)是p(x)的函数, 可以由F(x)计算出p(x).
另外, 上述四种损失函数对应的最优判决函数FC∗(x)与p(x)之间是可导的, 是不是可以使用链式法则, 直接求出损失对于模型中参数的负梯度, 直接更新模型内部的参数?
参考资料