- Author: MaXiao
- E-Mail: maxiaoscut@aliyun.com
- GitHub: https://github.com/Albertsr
- 备注: 若文档无法正常显示图片,请参考右方链接:github图片不显示的问题
- 第一部分:代价敏感综述
- 第二部分:Thresholding、Sampling与Weighting
- 第三部分:经典论文《The Foundations of Cost-Sensitive Learning [Charles Elkan]》解读
- 第四部分:参考文献
- cost-sensitive Learning对不同的分类错误赋予不同的代价
- cost-insensitive Learning不区分不同分类的错误的代价
- cost-sensitive Learning以最小的代价为目标
- cost-insensitive Learning以最小的分类误差为目标
- FN是指没有识别出真实的欺诈交易,FP是指将正常交误判为欺诈交易。显然FN的代价大于FP的代价
- 算法构建过程中就已考虑不同分类错误的代价
- incorporates the misclassification costs into the learning algorithm, to design classifiers that are cost-sensitive in themselves
-
在不改变算法本身的情况下,将非代价敏感算法转化为代价敏感算法,也称为meta-learning method
-
主要分为两大类
- Thresholding(阈值法)
- Sampling(采样法)
- Weighting(权重法)
- Costing
-
多数情况下样本被正确分类的代价为0,因此阈值默认取
-
非代价敏感算法的阈值一般设定为0.5,改变此阈值则间接实现了代价敏感学习
-
Thresholding的相关理论阐述
- Charles Elkan在论文The Foundations of Cost-Sensitive Learning中明确地指出了阈值与负样本比例之间的转换关系
-
Theorem 1解读: 设算法将样本推断为正样本的初始阈值为p',为了达到目标阈值p,则训练集中负样本的数量应从初始值n'变为n,且满足以下比例关系:
-
阈值的变化趋势与负样本数成正比关系:为了达到更小的目标阈值,则应对负样本进行欠采样(Under Sampling)
-
Theorem 1为Sampling(采样法)提供了坚实理论基础: 严格论述了在二分类问题中,如何改变训练集中负样本的比例,使得非代价敏感算法学习到代价最小化的决策边界
-
常见的过采样方法
- SMOTE
- Borderline_SMOTE
- ADASYN
- BOS:Borderline Over_Sampling (基于正类支持向量的线性外插与内插)
-
欠采样及其缺点:
-
对比代码: oversampling_contrast.py
-
对比结果:
-
Coverage、G_Mean的定义: 模型评估指标
G_Mean = sqrt(Recall * Specificity)
Coverage = 0.4 * TPR(FRP=0.001) + 0.3 * TPR(FRP=0.005) + 0.3 * TPR(FRP=0.01)
-
-
对比结论
- 过采样算法的表现与具体的数据集、模型评估指标等多方面因素有关,不存在持续占优的过采样算法
- 通常将少类样本视为正样本,所有过采样算法均有效地增加了正样本的数量,对Recall均有明显提升作用
- BOS_SVM能灵活地选择内插或外插方式,生成的新样本更具合理性,有助于提升分类器的综合表现,AUC、G_Mean等指标也证明了此结论
-
高样本权重(大于1)可以视为对样本的复制,即为Over_Sampling;低样本权重(小于1)可以视为对样本的删减,即为Under_Sampling
-
样本的权重应与其被误分的代价成比: 少类样本一般为正样本,FN的代价高于FP的代价;应用Weighting(权重法)时,应对正样本赋予更高的权重
-
运用fit方法中的sample_weight参数实现
-
sklearn实现的监督算法、XGBoost、LightGBM均提供了fit方法,均含有sample_weight参数
-
以sklearn文档为例: fit方法中的参数sample_weightt
-
-
scale_pos_weight参数:
-
XGBoost与LightGBM不仅提供了sample_weight参数,还提供了scale_pos_weight参数
-
XGBOOST相关文档
-
- LightGBM相关文档
- 若scale_pos_weight的取值设定为某常数ratio,则等价于将正样本权重设置为ratio,负样本的权重设置为1;
- 代码验证: scale_pos_weight.py
- Charles Elkan提出的Theroem 1论述了负样本在训练集中的占比与阈值之间的转换关系,并给出了严格的转换公式
- 在TP、TN的代价为0时,非代价敏感算法判定为正样本的后验概率阈值为0.5;若此阈值变更为[0, 1]区间内的其他值,则非代价敏感学习转化为代价敏感学习
- Sampling(或Weighting)通过改变正、负样本在训练集中的占比,内生地改变了阈值,从而间接实现了代价敏感学习
- 代码实现: adacost.py
-
EasyEnsemble
-
BalanceCascade
-
Theorem 1: 设算法将样本推断为正样本的初始阈值为p',为了达到目标阈值p,则训练集中负样本的数量应从初始值n'变为n,且满足以下比例关系:
- 若p<p',则n<n';若p>p',则n>n'
- 为了达到更小的目标阈值,则应对负样本进行欠采样(Under Sampling)
-
Theorem 2: 若训练集中正类样本的先验概率由b变为b',则从训练集中随机抽取的样本x为正样本的后验概率由p变为p',其中
-
Theorem 3: 对于二分类问题,若决策树的生成过程中以p(1-p)的平方根形式衡量数据集的不纯度,则训练集中正、负样本的先验概率变化不影响决策树的结构;其中p为数据集中正样本的先验概率
- 先证明Theorem 2
- 再证明Theorem 1
- Theorem 3的证明
- 略,请查阅原论文;
-
Paper_01: The Foundations of Cost-Sensitive Learning [Charles Elkan]
-
Paper_02: Cost-Sensitive Learning and the Class Imbalance Problem [Charles X. Ling et.al.]
-
Paper_03: Exploiting the Cost (In)sensitivity of Decision Tree Splitting Criteria [Drummond et.al.]
-
Paper_05: Exploratory Undersampling for Class-Imbalance Learning [Liu et.al.]