今天推荐的是一个 github 项目,项目地址如下,主要是类别不平衡学习的论文、代码、框架、库等资源
https://github.com/ZhiningLiu1998/awesome-imbalanced-learning
前言
类别不平衡(Class-imbalance),也被称为长尾问题(long-tail problem),指的是分类问题中数据集的类别数量并不一致,有的类别特别多,但有的类别特别少,并且这是实际应用里非常常见的问题。例如,欺诈检测,罕见药物不良反应的预测,以及基因家族预测。因为类别不平衡的原因就会导致预测不准确,降低了分类模型的性能。因此,不平衡学习(Imbalanced learning)的目标就是要解决类别不平衡问题,并从不平衡的数据中学习一个无偏模型。
目录如下所示:
- 代码库/框架
- Python
- R
- Java
- Scalar
- Julia
- 论文
- 综述
- 深度学习
- 数据重采样(Data resampling)
- 成本敏感学习(Cost-sensitive Learning)
- 集成学习(Ensemble Learning)
- 异常检测
- 其他
- 不平衡数据库
- 其他的资源
另外,带有🉑 标记的是作者特别推荐的重要或者高质量的论文和框架。
代码库/框架
Python
imbalanced-learn
官网:https://imbalanced-learn.org/stable/
Github:https://github.com/scikit-learn-contrib/imbalanced-learn
官方文档:https://imbalanced-learn.readthedocs.io/en/stable/
论文地址:http://10.187.70.34/www.jmlr.org/papers/volume18/16-365/16-365.pdf
这个库是一个 python 编写的提供了一些常用于数据集的重采样技术,它适配 scikit-learn 库,并且也是 scikit-learn-contrib 库的一部分。
🉑 python 编写,上手简单
R
- smote_variants
官网:https://smote-variants.readthedocs.io/en/latest/
文档: [(https://smote-variants.readthedocs.io/en/latest/
Github:https://github.com/analyticalmindsltd/smote_variants)
集合了 85 种用于不平衡学习的过采样技术,包括多类别的过采样和模型选择特征方法(支持 R 和 Julia)
- caret
官网:https://cran.r-project.org/web/packages/caret/index.html
文档:http://topepo.github.io/caret/index.html
Github:https://github.com/topepo/caret
实现了随机欠采样和过采样方法
- ROSE
官网:https://cran.r-project.org/web/packages/ROSE/index.html
文档:https://www.rdocumentation.org/packages/ROSE/versions/0.0-3
实现了随机过采样方法
- DMwR
官网:https://cran.r-project.org/web/packages/DMwR/index.html
文档:https://www.rdocumentation.org/packages/DMwR/versions/0.4.1
实现了 SMOTE(Synthetic Minority Over-sampling TEchnique),即合成少数过采样技术
Java
KEEL
官网:https://sci2s.ugr.es/keel/description.php
Github:https://github.com/SCI2SUGR/KEEL
KEEL 提供了一个简单的图形界面,可以基于数据流程来设计不同数据集的实验,以及不同智能计算的算法(特别关注进化算法),从而接触到算法的行为。该工具包含了很多广泛应用的不平衡学习方法,比如过采样和欠采样,损失敏感学习,算法修正以及集成学习方法。
🉑 包含多种算法,比如经典分类算法、回归算法以及预处理算法
Scalar
undersampling
官网:https://github.com/NestorRV/undersampling
文档:https://nestorrv.github.io/
Github:https://github.com/NestorRV/undersampling
实现了欠采样方法以及集成方法变形的方法。
Julia
smote_variants
官网:https://smote-variants.readthedocs.io/en/latest/
文档:https://smote-variants.readthedocs.io/en/latest/
Github:https://github.com/analyticalmindsltd/smote_variants
集合了 85 种用于不平衡学习的过采样技术,包括多类别的过采样和模型选择特征方法(支持 R 和 Julia)
论文
- Learning from imbalanced data,2009 年的论文,有 4700+的引用,非常经典的论文。主要是系统性的回顾了流行的解决方法、评估标准以及未来研究中需要面临的挑战和问题(2009 年的时候);
🉑 经典的工作
- Learning from imbalanced data: open challenges and future directions(2016, 400+ 引用,这篇论文主要关注不平衡学习的开放性问题和挑战,比如极端类别不平衡,处理在线/流学习的不平衡问题,多类别不平衡学习以及半监督或无监督的不平衡学习。
- Learning from class-imbalanced data: Review of methods and applications(2017(400+ 引用),一篇非常详细的不平衡学习方法和应用的综述论文,总共包含了 527 篇相关论文。它提供了几种现有方法详细的分类标准,同时也是最近研究领域的趋势。
🉑 一篇系统的并且对现有方法详细分类标准的综述
深度学习
-
综述
- A systematic study of the class imbalance problem in convolutional neural networks (2018, 330+ 引用)
- Survey on deep learning with class imbalance (2019, 50+ 引用)
🉑 最近深度学习方向关于类别不平衡问题的综合性论文
-
困难样本挖掘
- Training region-based object detectors with online hard example mining (CVPR 2016, 840+ 引用),在神经网络训练的最后阶段,仅对”困难样本“进行梯度的反向传播(比如,loss 数值很大的样本)
-
损失函数工程
- Training deep neural networks on imbalanced data sets (IJCNN 2016, 110+ 引用) ,均方根误差可以从大多数类和少数类中同等的捕获分类错误
- Focal loss for dense object detection [Code (Unofficial)](ICCV 2017, 2600+ 引用) ,一个集中训练困难样本稀疏集合的均匀损失函数,可以防止大量容易在训练中压倒检测器的简单负样本。
🉑 优雅的解法,影响力很高
- Deep imbalanced attribute classification using visual attention aggregation [Code] (ECCV 2018, 30+ 引用)
- Imbalanced deep learning by minority class incremental rectification (TPAMI 2018, 60+ 引用) ,介绍了一个类别修正损失,它是在迭代的分批学习过程中,通过发现少数类的稀疏采样边界来最小化多数类的优势效应;
- Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss [Code] (NIPS 2019, 10+ 引用) ,一种理论上有原则的标签分布感知边际损失(LDAM),其动机是最小化基于边际的泛化边界。
- Gradient harmonized single-stage detector [Code] (AAAI 2019, 40+ 引用) ,相比 Focal loss 只会降低”容易“的负样本的权重,GHM 还可以降低一些可能是异常值的”困难“样本的权重。
🉑 有趣的想法:根据梯度分布来协调样本的贡献
- Class-Balanced Loss Based on Effective Number of Samples (CVPR 2019, 70+ 引用) ,一种简单而通用的基于有效样本数量的类权重调整机制。
-
元学习
-
Learning to model the tail (NIPS 2017, 70+ citations) ,将元知识从分布头部的数据丰富的类转移到尾部的数据贫乏的类;
-
Learning to reweight examples for robust deep learning [Code] (ICML 2018, 150+ citations) ,在深度神经网络的梯度更新中隐式学习一个权重函数对样本进行权重的调整。
🉑 通过元学习解决类别不平衡问题的代表性工作.
-
Meta-weight-net: Learning an explicit mapping for sample weighting [Code] (NIPS 2019) ,在深度神经网络的梯度更新中,显式学习一个权重函数(使用多层感知器作为函数逼近器)来对样本的权重进行调整;
-
Learning Data Manipulation for Augmentation and Weighting [Code] (NIPS 2019)
-
Learning to Balance: Bayesian Meta-Learning for Imbalanced and Out-of-distribution Tasks [Code] (ICLR 2020)
-
-
表示学习
-
课程学习
-
两阶段学习
- Brain tumor segmentation with deep neural networks (2017, 1200+ 引用) ,先在类别平衡的数据集进行预训练,然后在原始的类别不平衡数据集上进行微调网络 softmax 之前的最后一层输出层;
-
网络结构
数据重采样
-
过采样
-
ROS [Code] - 随机过采样
-
SMOTE [Code] (2002, 9800+ 引用) ,合成少数类的过采样技术(Synthetic Minority Over-sampling TEchnique)
🉑 经典的工作
-
Borderline-SMOTE [Code] (2005, 1400+ 引用) ,边界合成少数类的过采样技术;
-
ADASYN [Code] (2008, 1100+ 引用) ,自适应合成采样(ADAptive SYNthetic Sampling);
-
SPIDER [Code (Java)] (2008, 150+ 引用) ,不平衡数据的选择性预处理;
-
Safe-Level-SMOTE [Code (Java)] (2009, 370+ 引用) ,安全级综合少数类的过采样技术;
-
SMOTE-IPF (2015, 180+ 引用) ,迭代分区过滤的 SMOTE
-
-
欠采样
- RUS [Code],随机欠采样;
- CNN [Code] (1968, 2100+ 引用) ,浓缩的最近邻(Condensed Nearest Neighbor);
- ENN [Code] (1972, 1500+ citations) ,可编辑的浓缩的最近邻(Edited Condensed Nearest Neighbor);
- TomekLink [Code] (1976, 870+ citations) ,Tomek 对浓缩的最近邻的修正方法;
- NCR [Code] (2001, 500+ 引用) , 近邻的清洗规则;
- NearMiss-1 & 2 & 3 [Code] (2003, 420+ 引用) ,几种解决不平衡数据分布的 KNN 方法
- CNN with TomekLink [Code (Java)] (2004, 2000+ 引用) ,结合了浓缩的最近邻和 TomekLink 方法;
- OSS [Code] (2007, 2100+ 引用):单边选择(One Side Selection);
- EUS (2009, 290+ 引用) :进化的欠采样(Evolutionary Under-sampling);
- IHT [Code] (2014, 130+ 引用) :实例难度阈值(Instance Hardness Threshold);
-
混合采样
-
SMOTE-Tomek & SMOTE-ENN (2004, 2000+ 引用) [Code (SMOTE-Tomek)] [Code (SMOTE-ENN)] ,综合少数过采样技术和 Tomek 对压缩近邻/编辑近邻的修改;
🉑广泛的实验评估涉及10种不同的过/欠采样方法。
-
SMOTE-RSB (2012, 210+ 引用) ,混合了使用 SMOTE 预处理和粗糙集合理论;
-
成本敏感学习
- CSC4.5 [Code (Java)] (2002, 420+ 引用) ,一个实际加权方法来引起成本敏感树;
- CSSVM [Code (Java)] (2008, 710+ 引用) ,用于高度不平衡分类的成本敏感 SVMs;
- [CSNN](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/2006 - IEEE_TKDE - Zhou_Liu.pdf) [Code (Java)] (2005, 950+ 引用) ,基于解决类别不平衡问题的方法来训练一个成本敏感的神经网络;
集成学习
-
Boosting-based
-
[AdaBoost](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/1997-JCSS-Schapire-A Decision-Theoretic Generalization of On-Line Learning (AdaBoost).pdf) [Code] (1995, 18700+ 引用)
-
DataBoost (2004, 570+ 引用)
-
SMOTEBoost [Code] (2003, 1100+ 引用)
🉑 经典的工作
-
[MSMOTEBoost](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/2011-IEEE TSMC partC- GalarFdezBarrenecheaBustinceHerrera.pdf) (2011, 1300+ 引用)
-
[RUSBoost](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/2010-IEEE TSMCpartA-RUSBoost A Hybrid Approach to Alleviating Class Imbalance.pdf) [Code] (2009, 850+ 引用)
🉑 经典的工作
-
AdaBoostNC (2012, 350+ 引用)
-
EUSBoost (2013, 210+ 引用)
-
-
bagging-based
- [Bagging](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/1996-ML-Breiman-Bagging Predictors.pdf) [Code] (1996, 23100+ 引用) ,Bagging 预测器;
- [OverBagging & UnderOverBagging & SMOTEBagging & MSMOTEBagging](https://sci2s.ugr.es/keel/pdf/algorithm/congreso/2009-IEEE CIDM-WangYao.pdf) [Code (SMOTEBagging)] (2009, 290+ 引用) ,基于 Bagging 的随机过采样/随机混合重采样/ SMOTE / 修改版 SMOTE;
- [UnderBagging](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/2003-PAA- New Applications of Ensembles of Classifiers.pdf) [Code] (2003, 170+ 引用) ,基于 Bagging 的随机欠采样;
-
其他继承方法
-
[EasyEnsemble & BalanceCascade](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/2009-IEEE TSMCpartB Exploratory Undersampling for Class Imbalance Learning.pdf) [Code (EasyEnsemble)] [Code (BalanceCascade)] (2008, 1300+ 引用) , 使用 RUS 进行并行集成训练(EasyEnsemble) /使用 RUS 进行级联集成训练,同时迭代地删除分类很好的样本(BalanceCascade);
🉑 简单但有效的方法
-
Self-paced Ensemble [Code] (ICDE 2020) ,用自适应协调分类困难训练不平衡数据的有效集成;
🉑 高性能和计算效率高,广泛适用于不同的分类器。
-
异常检测
- Anomaly Detection Learning Resources,异常检测相关的书籍、论文、视频和工具箱。
- 综述
- Anomaly detection: A survey (2009, 7300+ 引用)
- A survey of network anomaly detection techniques (2017, 210+ 引用)
- 基于分类
- One-class SVMs for document classification (2001, 1300+ 引用)
- One-class Collaborative Filtering (2008, 830+ 引用)
- Isolation Forest (2008, 1000+ 引用)
- Anomaly Detection using One-Class Neural Networks (2018, 70+ 引用)
- Anomaly Detection with Robust Deep Autoencoders (KDD 2017, 170+ 引用)
其他
不平衡数据集
ID | Name | Repository & Target | Ratio | #S | #F |
---|---|---|---|---|---|
1 | ecoli | UCI, target: imU | 8.6:1 | 336 | 7 |
2 | optical_digits | UCI, target: 8 | 9.1:1 | 5,620 | 64 |
3 | satimage | UCI, target: 4 | 9.3:1 | 6,435 | 36 |
4 | pen_digits | UCI, target: 5 | 9.4:1 | 10,992 | 16 |
5 | abalone | UCI, target: 7 | 9.7:1 | 4,177 | 10 |
6 | sick_euthyroid | UCI, target: sick euthyroid | 9.8:1 | 3,163 | 42 |
7 | spectrometer | UCI, target: > =44 | 11:1 | 531 | 93 |
8 | car_eval_34 | UCI, target: good, v good | 12:1 | 1,728 | 21 |
9 | isolet | UCI, target: A, B | 12:1 | 7,797 | 617 |
10 | us_crime | UCI, target: >0.65 | 12:1 | 1,994 | 100 |
11 | yeast_ml8 | LIBSVM, target: 8 | 13:1 | 2,417 | 103 |
12 | scene | LIBSVM, target: >one label | 13:1 | 2,407 | 294 |
13 | libras_move | UCI, target: 1 | 14:1 | 360 | 90 |
14 | thyroid_sick | UCI, target: sick | 15:1 | 3,772 | 52 |
15 | coil_2000 | KDD, CoIL, target: minority | 16:1 | 9,822 | 85 |
16 | arrhythmia | UCI, target: 06 | 17:1 | 452 | 278 |
17 | solar_flare_m0 | UCI, target: M->0 | 19:1 | 1,389 | 32 |
18 | oil | UCI, target: minority | 22:1 | 937 | 49 |
19 | car_eval_4 | UCI, target: vgood | 26:1 | 1,728 | 21 |
20 | wine_quality | UCI, wine, target: <=4 | 26:1 | 4,898 | 11 |
21 | letter_img | UCI, target: Z | 26:1 | 20,000 | 16 |
22 | yeast_me2 | UCI, target: ME2 | 28:1 | 1,484 | 8 |
23 | webpage | LIBSVM, w7a, target: minority | 33:1 | 34,780 | 300 |
24 | ozone_level | UCI, ozone, data | 34:1 | 2,536 | 72 |
25 | mammography | UCI, target: minority | 42:1 | 11,183 | 6 |
26 | protein_homo | KDD CUP 2004, minority | 111:1 | 145,751 | 74 |
27 | abalone_19 | UCI, target: 19 | 130:1 | 4,177 | 10 |
上述数据集的集合来自 imblearn.datasets.fetch_datasets
其他资源
- Paper-list-on-Imbalanced-Time-series-Classification-with-Deep-Learning
- acm_imbalanced_learning ,2016年4月27日在德克萨斯州奥斯汀市举行的ACM不平衡学习讲座的幻灯片和代码;
- imbalanced-algorithms ,基于python实现的算法学习不平衡的数据;
- imbalanced-dataset-sampler ,一种(PyTorch)非平衡数据集采样器,用于过采样低频率类和欠采样高频率类;
- class_imbalance ,通过 Jupyter Notebook 展示的二进制分类的类别不平衡;
最后,github 地址是:
https://github.com/ZhiningLiu1998/awesome-imbalanced-learning
另外,本人水平有限,所以对部分专业术语的翻译可能并不正确,没法做到非常完美,请多多包涵,谢谢!
欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!
image
网友评论