精选的不平衡学习论文、代码和库
语言: [English] [中文]
类别不平衡(也称为长尾问题) 是指在分类问题中,类别之间的表示不均衡,这在实践中非常常见。例如,欺诈检测、预测罕见的不良药物反应和预测基因家族。未能考虑类别不平衡通常会导致许多分类算法的预测性能不准确和下降。不平衡学习旨在解决类别不平衡问题,从不平衡数据中学习无偏模型。
受 awesome-machine-learning 的启发。在这个仓库里:
- 框架 和 库 按 编程语言 分组。
- 研究论文 按 研究领域 分组。
注意:
- ⭐ 如果你喜欢这个项目,请给它一个 星级! ⭐
- 贡献并且你会出现在 贡献者✨!
- 在这个研究领域中有大量的论文,所以这个列表并不打算穷尽所有。
- 我们的目标是只保留那些 有良好影响 或者已经 *在 知名顶级会议/期刊 上发表的 “精彩”成果。
有什么新内容:
- 更新了 图学习 章节。
- 添加了一个包 imbalanced-ensemble [Github][Documentation]。
查看 Zhining 的其他开源项目!
Imbalanced-Ensemble [PythonLib] | Machine Learning [Awesome] | Self-paced Ensemble [ICDE] | Meta-Sampler [NeurIPS] |
目录
1. 框架和库
1.1 Python
-
imbalanced-ensemble [Github][文档][画廊][论文]
注意: 用 Python 编写,易于使用。
imbalanced-ensemble
是一个 Python 工具箱,用于快速实施和部署在类别不平衡数据上进行 集成学习算法。其特点有:- (i) 统一、易用的 API,详细的 文档 和 示例。
- (ii) 开箱即用的多类别不平衡学习能力。
- (iii) 在可能时通过 joblib 进行并行优化性能。
- (iv) 强大、可定制、互动的训练日志和可视化工具。
- (v) 与 scikit-learn 和 imbalanced-learn 等其他流行包完全兼容。
- 当前 (v0.1.4),它包括超过 15 种基于 重采样 和 成本敏感学习 的集成算法(例如,SMOTEBoost/Bagging, RUSBoost/Bagging, AdaCost, EasyEnsemble, BalanceCascade, SelfPacedEnsemble, 等等)。
-
imbalanced-learn [Github][文档][论文]
注意: 用 Python 编写,易于使用。
imbalanced-learn
是一个 Python 包,提供了许多在类别不平衡数据集中常用的 重采样 技术。它兼容 scikit-learn,并且是 scikit-learn-contrib 项目的一部分。- 当前 (v0.8.0),它包含21种不同的重采样技术,包括过采样、欠采样和混合技术(例如,SMOTE, ADASYN, TomekLinks, NearMiss, OneSideSelection, SMOTETomek, 等等)
- 此包还提供许多实用工具,例如,Keras/TensorFlow 的批量生成器,详见 API 参考。
-
smote_variants [文档][Github] - 一个用于不平衡学习的 85 种少数类 过采样 技术的集合,具有多类别过采样和模型选择功能(全部用 Python 编写,也支持 R 和 Julia)。
1.2 R
- smote_variants [文档][Github] - 一个用于不平衡学习的 85 种少数类 过采样 技术的集合,具有多类别过采样和模型选择功能(全部用 Python 编写,也支持 R 和 Julia)。
- caret [文档][Github] - 包含随机欠/过采样的实现。
- ROSE [文档] - 包含 ROSE (随机过采样示例) 的实现。
- DMwR [文档] - 包含 SMOTE (合成少数过采样技术) 的实现。
1.3 Java
-
KEEL [Github][论文] - KEEL 提供了一个基于数据流的简单 图形用户界面 来设计实验,使用不同的数据集和计算智能算法(尤其关注进化算法)来评估算法的表现。这一工具包含许多广泛使用的不平衡学习技术,例如(进化)过/欠采样、成本敏感学习、算法修改和集成学习方法。
注意: 包含多种经典的分类、回归、预处理算法。
1.4 Scalar
- undersampling [文档][Github] - 一个用于不平衡分类中 欠采样及其集成变种 的 Scala 库。
1.5 Julia
- smote_variants [文档][Github] - 一个用于不平衡学习的 85 种少数类 过采样 技术的集合,具有多类别过采样和模型选择功能(全部用 Python 编写,也支持 R 和 Julia)。
2. 研究论文
2.1 调查
-
从不平衡数据中学习 (IEEE TKDE, 2009, 6000+ 引用) [论文]
- 高度引用的经典调查论文。系统地回顾了流行的解决方案、评估指标以及未来研究中的挑战问题(截至2009年)。
-
从不平衡数据中学习:开放挑战和未来方向 (2016, 900+ 引用) [论文]
- 这篇论文集中讨论了不平衡学习中的开放问题和挑战,例如极端类别不平衡、在线/流学习中的不平衡、多类别不平衡学习以及半监督/无监督的不平衡学习。
-
学习不平衡数据:方法和应用综述 (2017, 900+ 引用) [论文]
- 最近的一项全面调查不平衡学习方法和应用,总共包括 527 篇论文。它提供了多个现有方法的详细分类,并讨论了该研究领域的最新趋势。
2.2 集成学习
2.2.1 通用集成
注意: 灵活的解决方案,具有卓越的性能和计算效率。
-
MESA: 用MEta-SAmpler提升集成不平衡学习 (NeurIPS 2020) [论文][代码][视频][知乎]
注意: 直接从数据中学习最佳采样策略。
-
类不平衡学习的探索性欠采样 (IEEE Trans. on SMC, 2008, 引用1300+) [论文]
注意: 简单但有效的解决方案。
2.2.2 基于Boosting
- AdaBoost (1995, 引用18700+) [论文][代码] - 自适应Boosting与C4.5
- DataBoost (2004, 引用570+) [论文] - 为不平衡数据生成数据的Boosting
- SMOTEBoost (2003, 引用1100+) [论文][代码] - 合成少数类过采样技术Boosting
- MSMOTEBoost (2011, 引用1300+) [论文] - 修改型合成少数类过采样技术Boosting
- RAMOBoost (2010, 引用140+) [论文][代码] - 排序少数类过采样Boosting
- RUSBoost (2009, 引用850+) [论文][代码] - 随机欠采样Boosting
- AdaBoostNC (2012, 引用350+) [论文] - 具有负相关学习的自适应Boosting
- EUSBoost (2013, 引用210+) [论文] - 基于进化欠采样的Boosting
2.2.3 基于Bagging
-
利用集成模型对不平衡数据集的多样性分析 (2009, 引用400+) [论文]
2.2.4 成本敏感集成
- AdaCost (ICML 1999,引用800+) [论文][代码] - 误分类成本敏感的Boosting
- AdaUBoost (NIPS 1999, 引用100+) [论文][代码] - 具有不等损失函数的AdaBoost
- AsymBoost (NIPS 2001, 引用700+) [论文][代码] - 非对称AdaBoost及检测器级联
2.3 数据重采样
2.3.1 过采样
- ROS [代码] - 随机过采样
- SMOTE (2002, 引用9800+) [论文][代码] - 合成少数类过采样技术
- Borderline-SMOTE (2005, 引用1400+) [论文][代码] - 边界合成少数类过采样技术
- ADASYN (2008, 引用1100+) [论文][代码] - 自适应合成采样
- SPIDER (2008, 引用150+) [论文][代码(Java)] - 不平衡数据的选择性预处理
- Safe-Level-SMOTE (2009, 引用370+) [论文][代码(Java)] - 安全级合成少数类过采样技术
- SVM-SMOTE (2009, 引用120+) [论文][代码] - 基于支持向量机支持向量的SMOTE
- MDO (2015, 引用150+) [论文][代码] - 基于马氏距离的多类不平衡问题过采样。
注意: 关于更多过采样方法,请参见 smote-variants.
2.3.2 欠采样
- RUS [代码] - 随机欠采样
- CNN (1968年, 2100+ 引用) [论文][代码] - 浓缩最近邻
- ENN (1972年, 1500+ 引用) [论文] [代码] - 编辑的浓缩最近邻
- TomekLink (1976年, 870+ 引用) [论文][代码] - Tomek 的浓缩最近邻修改
- NCR (2001年, 500+ 引用) [论文][代码] - 邻域清理规则
- NearMiss-1 & 2 & 3 (2003年, 420+ 引用) [论文][代码] - 针对不平衡数据分布的几种 kNN 方法
- CNN with TomekLink (2004年, 2000+ 引用) [论文][代码(Java)] - 浓缩最近邻 + TomekLink
- OSS (2007年, 2100+ 引用) [论文][代码] - 单侧选择
- EUS (2009年, 290+ 引用) [论文] - 进化欠采样
- IHT (2014年, 130+ 引用) [论文][代码] - 实例硬度阈值
2.3.3 混合采样
-
A Study of the Behavior of Several Methods for Balancing Training Data (2004年, 2000+ 引用) [论文]
注意: 涉及 10 种不同过采样/欠采样方法的广泛实验评估。
2.4 成本敏感学习
- CSC4.5 (2002年, 420+ 引用) [论文][代码(Java)] - 一种实例加权方法,用于构建成本敏感树
- CSSVM (2008年, 710+ 引用) [论文][代码(Java)] - 用于高度不平衡分类的成本敏感 SVM
- CSNN (2005年, 950+ 引用) [论文][代码(Java)] - 使用解决类别不平衡问题的方法训练成本敏感神经网络。
2.5 深度学习
2.5.1 综述
-
综述
-
卷积神经网络中类别不平衡问题的系统研究 (2018年, 330+ 引用) [论文]
-
类别不平衡深度学习综述 (2019年, 50+ 引用) [论文]
注意: 最近关于深度学习中类不平衡问题的全面综述。
2.5.2 图数据挖掘
-
图神经网络
-
多类不平衡图卷积网络学习 (IJCAI 2020) [论文]
2.5.3 困难样本挖掘
-
困难样本挖掘
-
使用在线困难样本挖掘训练基于区域的目标检测器 (CVPR 2016, 840+ 引用) [论文][代码] - 在 NN 训练的后期阶段,仅对“困难样本”(即损失值较大的样本)执行梯度反向传播
2.5.4 损失函数工程
-
损失函数工程
-
用于密集目标检测的焦点损失 (ICCV 2017, 2600+ 引用) [论文][代码 (detectron2)][代码(非官方)] - 一种均匀的损失函数,专注于训练一组稀疏的困难样本,以防止训练过程中大量容易的负样本压倒检测器。
注意: 优雅的解决方案,高影响力。
- 在不平衡数据集上训练深度神经网络 (IJCNN 2016, 110+ 引用) [论文] - 平均(平方)错误,可以同样捕捉来自多数类和少数类的分类错误。
- 使用视觉注意力聚合进行深度不平衡属性分类 (ECCV 2018, 30+ 引用) [论文][代码]
- 通过少数类增量修正实现不平衡深度学习 (TPAMI 2018, 60+ 引用) [论文] - 类别修正损失,通过在迭代批量学习过程中发现少数类的稀疏采样边界,最小化多数类的主导效应。
- 带有标签分布感知边缘损失的不平衡数据集学习 (NIPS 2019, 10+ 引用) [论文][代码] - 一个理论上有原则的标签分布感知边缘(LDAM)损失,通过最小化基于边缘的泛化界限。
- 梯度和谐单阶段检测器 (AAAI 2019, 40+ 引用) [论文][代码] - 与仅对“容易”负样本进行降权的Focal损失相比,GHM还对可能为异常值的“非常困难”样本进行降权。
- 基于有效样本数量的类平衡损失 (CVPR 2019, 70+ 引用) [论文][代码] - 一个基于有效样本数量的简单而通用的类重加权机制。
- 对不平衡视觉分类的影响平衡损失 (ICCV 2021) [论文][代码]
- AutoBalance:用于不平衡数据的优化损失函数 (NeurIPS 2021) [论文]
- 过度参数化下的不平衡标签和群体敏感分类 (NeurIPS 2021) [论文][代码]
元学习
- 学习尾部模型 (NIPS 2017, 70+ 引用) [论文] - 从分布头中的数据丰富类转移元知识到尾部的数据匮乏类。
- 学习重新加权样本以实现稳健的深度学习 (ICML 2018, 150+ 引用) [论文][代码] - 通过隐式学习一个权重函数来在DNN的梯度更新中重新加权样本。
注意: 通过元学习解决类别不平衡问题的代表性工作。
- 元权重网络:学习一个显式的样本加权映射 (NIPS 2019) [论文][代码] - 显式学习一个权重函数(以多层感知器作为函数近似器)来在DNN的梯度更新中重新加权样本。
- 学习数据操纵以增强和加权 (NIPS 2019) [论文][代码]
- 学习平衡:用于不平衡和分布外任务的贝叶斯元学习 (ICLR 2020) [论文][代码]
- MESA: 使用元采样器增强集成不平衡学习 (NeurIPS 2020) [论文][代码][视频]
注意: 由元学习驱动的集成学习
表示学习
- 用于不平衡分类的深度表示学习 (CVPR 2016, 220+ 引用) [论文]
- 基于GAN的不平衡分类的有监督类分布学习 (ICDM 2019) [论文]
- 长尾识别的表示与分类器解耦 (ICLR 2020) [论文][代码]
注意: 在表示学习和分类器学习方面的有趣发现
后验校准
半监督/自监督学习
注意: 半监督训练/自监督预训练有助于不平衡学习
- 不平衡半监督学习的伪标签分布校准精炼 (NeurIPS 2020) [论文][代码]
- 用于类不平衡半监督学习的辅助平衡分类器 (NeurIPS 2021) [论文][代码]
- 通过开放世界采样改善不平衡数据的对比学习 (NeurIPS 2021) [论文]
- 用于不平衡半监督学习的分布感知语义导向伪标签 (CVPR 2022) [论文][代码]
课程学习
- 用于不平衡数据分类的动态课程学习 (ICCV 2019) [论文]
两阶段训练
在平衡数据集上进行预训练,在原始不平衡数据上微调softmax之前的最后输出层。
网络架构
深度生成模型
- 用于鲁棒不平衡分类的深度生成模型 (CVPR 2020) [论文]
不平衡回归
- 半监督图不平衡回归 (KDD 2023) [论文] [代码]
- RankSim: 排名相似性正则化用于深度不平衡回归 (ICML 2022) [论文] [代码]
- 不平衡视觉回归的均衡MSE (CVPR 2022) [论文] [代码]
- 深入研究深度不平衡回归 (ICML 2021) [论文][代码][视频]
- 基于密度加权的不平衡回归 (Machine Learning [J], 2021) [论文][代码]
2.5.14 数据增强
3. 杂项
3.1 数据集
-
imbalanced-learn
数据集该数据集集合来自
imblearn.datasets.fetch_datasets
.ID 名称 存储库及目标 比例 #S #F 1 ecoli UCI, 目标: imU 8.6:1 336 7 2 optical_digits UCI, 目标: 8 9.1:1 5,620 64 3 satimage UCI, 目标: 4 9.3:1 6,435 36 4 pen_digits UCI, 目标: 5 9.4:1 10,992 16 5 abalone UCI, 目标: 7 9.7:1 4,177 10 6 sick_euthyroid UCI, 目标: sick euthyroid 9.8:1 3,163 42 7 spectrometer UCI, 目标: > =44 11:1 531 93 8 car_eval_34 UCI, 目标: good, v good 12:1 1,728 21 9 isolet UCI, 目标: A, B 12:1 7,797 617 10 us_crime UCI, 目标: >0.65 12:1 1,994 100 11 yeast_ml8 LIBSVM, 目标: 8 13:1 2,417 103 12 scene LIBSVM, 目标: >one label 13:1 2,407 294 13 libras_move UCI, 目标: 1 14:1 360 90 14 thyroid_sick UCI, 目标: sick 15:1 3,772 52 15 coil_2000 KDD, CoIL, 目标: minority 16:1 9,822 85 16 arrhythmia UCI, 目标: 06 17:1 452 278 17 solar_flare_m0 UCI, 目标: M->0 19:1 1,389 32 18 oil UCI, 目标: minority 22:1 937 49 19 car_eval_4 UCI, 目标: vgood 26:1 1,728 21 20 wine_quality UCI, wine, 目标: <=4 26:1 4,898 11 21 letter_img UCI, 目标: Z 26:1 20,000 16 22 yeast_me2 UCI, 目标: ME2 28:1 1,484 8 23 webpage LIBSVM, w7a, 目标: minority 33:1 34,780 300 24 ozone_level UCI, ozone, data 34:1 2,536 72 25 mammography UCI, 目标: minority 42:1 11,183 6 26 protein_homo KDD CUP 2004, 目标: minority 111:1 145,751 74 27 abalone_19 UCI, 目标: 19 130:1 4,177 10 -
不平衡数据库
3.2 Github 存储库
3.2.1 算法 & 工具 & Jupyter 笔记本
- imbalanced-algorithms - 基于Python的不平衡数据学习算法实现。
- imbalanced-dataset-sampler - 一个(PyTorch)不平衡数据集采样器,用于过采样低频类和欠采样高频类。
- class_imbalance - 一个关于二分类类不平衡问题的 Jupyter Notebook 演示文档。
- Multi-class-with-imbalanced-dataset-classification - 在不平衡的20新闻组数据集上进行多类分类。
- 高级机器学习与scikit-learn:不平衡分类和文本数据 - 不同的特征选择方法和用于不平衡数据的重采样方法。
3.2.2 论文列表
- 异常检测学习资源 by yzhao062 - 异常检测相关的书籍、论文、视频和工具箱。
- 基于深度学习的不平衡时间序列分类的论文列表 - 不平衡时间序列分类
3.2.3 幻灯片
- acm_imbalanced_learning - 2016年4月27日在德克萨斯州奥斯汀举行的ACM不平衡学习讲座的幻灯片和代码。
Contributors ✨
感谢以下这些优秀的人们 (emoji key):
该项目遵循all-contributors规范。欢迎任何形式的贡献!