Hexo

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

ML——样本不均衡问题处理

  • 参考链接:
    • 一文解决样本不均衡(全)

样本不均衡问题描述

  • 问题描述:机器学习中的样本不均衡问题,是指在分类任务中不同类别的训练样例数量存在显著差异的情况
  • 场景:包括金融欺诈检测、医疗诊断、网络入侵检测等领域

样本不均衡的影响

  • 模型偏向性 :模型倾向于预测label为多数类,因为这样做可以最大化准确率,即使对少数类的预测几乎总是错误的
  • 过拟合风险 :由于少数类样本数量少,模型容易过拟合这些样本,导致模型在新数据上泛化性差
  • 总结:样本不均衡带来的根本影响是模型会学习到训练集中样本比例的这种先验性信息,以致于实际预测时就会对多数类别有侧重(可能导致多数类精度更好,而少数类比较差)通过解决样本不均衡,可以减少模型学习样本比例的先验信息,以获得能学习到辨别好坏本质特征的模型

哪些情况下需要解决样本不均衡问题


评估指标

  • 不能使用:准确率(Accuracy)
  • 建议使用:F1分数、精确率(Precision)、召回率(Recall)和AUC等

解决样本不均衡的方法

数据层面的方法

  • 过采样(Over-sampling) :通过增加少数类样本的数量来缓解不均衡问题。常见的方法包括:
    • 随机过采样 :简单地复制少数类样本,容易导致过拟合
    • 数据增强(Data Augmentation) :通过变换现有样本生成新的样本,适用于图像(翻转,拉伸等)、文本等数据类型
    • SMOTE(Synthetic Minority Over-sampling Technique) :通过在少数类样本间插值生成新的合成样本,一定程度上可以避免过拟合,但生成的数据置信度也存在问题
    • ADASYN(Adaptive Synthetic Sampling) :通过生成少数类别样本改善不均衡问题,与传统的过采样技术(如SMOTE)相比,ADASYN更注重类间距离和局部密度,尤其是对于少数类中的困难样本或噪声敏感区域,它可以更加精细地调整采样策略,详情可参考:不平衡学习的自适应合成采样方法ADASYN(Matlab代码实现)
  • 欠采样(Under-sampling) :通过减少多数类样本的数量来达到平衡。常用的方法有:
    • 随机欠采样 :随机删除多数类样本,但可能丢失重要信息
    • Tomek Links :移除位于类别边界附近的样本对,有助于清理噪声
    • ENN(Edited Nearest Neighbors Rule) :移除与最近邻居类别不同的样本
    • NearMiss :选择与少数类样本最接近的多数类样本
  • 组合采样 :结合过采样和欠采样的方法

模型层面的方法

  • 成本敏感学习(Cost-sensitive Learning) :为不同类别的错误分配不同的固定权重,使模型更加关注少数类的预测
  • 集成学习(Ensemble Learning) :使用集成学习的方法降低过拟合问题(比如多个模型进行投票或加权平均)

损失函数层面

  • 损失函数优化 :比如使用Focal Loss等

异常检测

  • 异常检测(Anomaly Detection) :将少数类视为异常点(特别是少数类样本非常稀少的情况),使用异常检测算法进行识别,常见的异常检测算法通常包括统计方法、距离检测(K近邻方法)、聚类方法(K-Means)、分类模型(one-class SVM)、自编码器、孤立森林等
    • 其中K近邻方法可以用于回归或者分类场景,还可以直接用于异常检测(距离过大的点认为是异常)
    • K-Means方法作异常检测时,原理聚类中心的样本视为异常值
    • 自编码器方法:通过训练一个自编码器来重建数据,重建误差大的数据点被视为异常点
    • 孤立森林(Isolation Forest):通过随机挑选特征、随机挑选分割点构建多棵孤立树,在所有孤立树中的平均路径长度的数据点被视为异常点(孤立森林的核心思想是异常点通常更容易被孤立,即在随机分割数据空间时,异常点往往比正常点更快地被单独分隔出来)

实践建议

  • 评估指标的选择 :在不均衡数据集上,不能使用准确率(Accuracy),建议使用均衡指标(F1-Score,AUC等)
  • 模型选择 :选择对不均衡数据的适应性较好的模型,如决策树和随机森林等,可以多使用一些简单的模型,再进行Bagging来减少过拟合
  • 具体情况具体分析,很多时候不需要特别的进行处理,另外如果真的进行采样,会导致预估均值有偏差,在CTR等对预估绝对值有要求的场景中,还需要校准

RS——从CG到NDCG评估指标


整体说明

  • CG(Cumulative Gain,累计增益),DCG(Discounted Cumulative Gain,折损累计增益)和NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)是信息检索和推荐系统中常用的评估指标,用于衡量排序结果的质量

CG(Cumulative Gain,累计增益)

  • 定义 :单纯对前\( k \)个结果的相关性分数求和,不考虑位置的影响
  • 公式 :
    $$
    CG@k = \sum_{i=1}^k rel_i
    $$
    • \( rel_i \):第\( i \)个结果的相关性分数(如:0不相关,1相关,2非常相关等)
    • \( rel_i \)的准确性尤为重要,通常使用:
      • 人工标注相关性
      • 线上用户真实行为数据(比如点击为1,长时间观看为2,购买/下单为3,跳过为0)
      • 注:特殊场景下也会使用模型预测值
  • 局限性 :未考虑排序顺序对用户体验的影响(例如,相关结果排在后面对用户价值更低)

DCG(Discounted Cumulative Gain,折损累计增益)

  • 定义 :在CG基础上引入位置折损 ,排名越靠后的结果对总增益的贡献越小
  • 公式(常用版本) :
    $$
    DCG@k = \sum_{i=1}^k \frac{rel_i}{\log_2(i+1)}
    $$
    • 折损因子 :\( \log_2(i+1) \) 会随着位置\( i \)增大而降低当前结果的贡献
  • 变体(更强调相关性) :
    $$
    DCG@k = \sum_{i=1}^k \frac{2^{rel_i} - 1}{\log_2(i+1)}
    $$
    • 适用于相关性分数差异较大的场景(如0/1/3/5分级)

NDCG(Normalized DCG,归一化折损累计增益)

  • 定义 :将DCG除以理想排序下的DCG(IDCG) ,得到归一化分数(0~1之间)
  • 公式 :
    $$
    NDCG@k = \frac{DCG@k}{IDCG@k}
    $$
    • \( IDCG@k \):将前\( k \)个结果按相关性从高到低排序后计算的DCG(即理论最大值)
  • 特点 :
    • 值越接近1,排序越接近理想状态
    • 解决了不同查询间DCG无法直接比较的问题(因为不同查询的IDCG可能不同)

使用场景与示例

  • 适用领域 :
    • 搜索引擎结果排序
    • 推荐系统(如电影、商品推荐)
    • 问答系统答案排序
  • 示例 :
    • 查询结果的相关性分数:[3, 2, 3, 0, 1](按当前排序)
    • 计算DCG@3:
      $$
      DCG@3 = \frac{3}{\log_2 2} + \frac{2}{\log_2 3} + \frac{3}{\log_2 4} \approx 3 + 1.26 + 1.5 = 5.76
      $$
    • 理想排序的相关性分数:[3, 3, 2] -> \( IDCG@3 \approx 6.43 \)
    • \( NDCG@3 = \frac{5.76}{6.43} \approx 0.90 \)

优缺点

  • 优点 :
    • 考虑相关性分级和位置因素,更贴近用户实际体验
    • NDCG提供标准化比较,适合不同查询间的评估
  • 缺点 :
    • 需要人工标注相关性分数(成本高)
    • 对相关性分数的定义敏感(如0/1/2还是0/1/3/5)

附录:推荐系统中的其他评估指标

HitRate@K

  • 通常包含 用户粒度HitRate@K 和 物品粒度HitRate@K 两种
    • 用户粒度HitRate@K,也称为二值命中率(Binary Hit Rate):
      • 对单个用户而言,只要推荐列表(TopK)中有至少一个相关物品则该样本(用户)算作为命中 (即Hit = 1),否则为不命中(即Hit=0)
      • 用户粒度HitRate@K是所有用户命中情况的平均值:
        $$ HitRate@K = \frac{兴趣出现在TopK物品的用户数量}{总用户数量} $$
    • 物品粒度HitRate@K,也称为命中次数占比(Hit Ratio)
      • 对被推荐的单个物品而言,如果是用户喜欢的则视为命中 (即Hit = 1),否则为不命中(即Hit=0)
      • 物品粒度HitRate@K是所有推荐物品命中情况的平均值
        $$ HitRate@K = \frac{总命中物品数量}{总推荐物品数量} = \frac{\sum_{i}命中用户i的物品数量}{\sum_{i}给用户i的推荐物品总数} $$

MRR

  • TLDR:MRR(Mean Reciprocal Rank)是对每个查询的相关文档在推荐列表中排名的倒数的平均值
  • 具体计算方法为:
    $$MRR=\frac{1}{|Q|}\sum_{i=1}^{|Q|}\frac{1}{rank_i}$$
    • \(|Q|\)是查询的总数
    • \(rank_i\)是第\(i\)个查询中第一个相关文档在推荐列表中的排名
    • 如果一个查询在推荐列表中没有相关文档,则该查询对MRR的贡献为\(0\)
  • MRR主要用于衡量推荐系统在返回相关结果时的排序能力,它特别关注第一个相关结果在推荐列表中的位置,能够反映出推荐系统将最相关的项目排在前面的能力
  • 举例:假设用户有3个查询,对应的推荐列表及相关文档的排名如下:
    • 查询1:推荐列表为$$D_3,D_1,D_2$$,其中\(D_1\)是相关文档,排名为\(2\),则该查询的\(\frac{1}{rank}=\frac{1}{2}\)
    • 查询2:推荐列表为$$D_2,D_4,D_1$$,相关文档\(D_2\)排名为\(1\),该查询的\(\frac{1}{rank}=1\)
    • 查询3:推荐列表为$$D_3,D_4,D_5$$,没有相关文档,该查询的\(\frac{1}{rank}=0\)
    • 那么\(MRR = \frac{(\frac{1}{2}+1+0)}{3}=\frac{1.5}{3}=0.5\)

AP & mAP

  • 参见:RS——推荐系统评估指标-mAP
1…174175176…352
San Ye

San Ye

Stay Hungry. Stay Foolish.

704 posts
53 tags
© 2026 San Ye
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4