分类问题中不平衡数据分布的解决方案

来源:互联网 发布:电信网络诈骗例子 编辑:程序博客网 时间:2024/06/07 19:17

问题定义:

解决方案:
1. 做一次聚类分析。可以考察,其中是否有一些cluster明显的不包含正样本。我们是否可以先做一个粗的分类器,将这一些样本分开,然后再看剩下来的数据是否不均衡的状况会减轻很多。在剩余的数据上再做一个分类器。
2. 从采样的角度处理
over-sampling,对小样本增加副本(复制部分)
under-sampling,对大样本选取部分
3. 人工生成样本
SMOTE+Tomek
SMOTE或者Borderline-SMOTE来随机生成人造样本
Tomek来删除空间上相邻的不同类样本对。

  1. 从算法的角度
    将样本分布极不平衡的分类问题看作是异常点检测(anomaly detection)和变化趋势问题(change detection),训练one-class分类器。
    比如 One-class SVM

  2. EasyEnsemble 和 BalanceCascade 算法介绍

(1).EasyEnsemble 核心思想是:
首先通过从多数类中独立随机抽取出若干子集
将每个子集与少数类数据联合起来训练生成多个基分类器
最终将这些基分类器组合形成一个集成学习系统
EasyEnsemble 算法被认为是非监督学习算法,因此它每次都独立利用可放回随机抽样机制来提取多数类样本
(2). BalanceCascade 核心思想是:
使用之前已形成的集成分类器来为下一次训练选择多类样本
然后再进行欠抽样

其他trick:
1. 使用组合方法,使用不同模型训练多个分类器,然后组合这些分类器进行分类
2. 设超大类中样本的个数是极小类中样本个数的L倍,那么在随机梯度下降(SGD,stochastic gradient descent)算法中,每次遇到一个极小类中样本进行训练时,训练L次。
3. 将大类中样本划分到L个聚类中,然后训练L个分类器,每个分类器使用大类中的一个簇与所有的小类样本进行训练得到。最后对这L个分类器采取少数服从多数对未知类别数据进行分类,如果是连续值(预测),那么采用平均值。
4. 设小类中有N个样本。将大类聚类成N个簇,然后使用每个簇的中心组成大类中的N个样本,加上小类中所有的样本进行训练。
5. 一个很好的方法去处理非平衡数据问题,并且在理论上证明了。这个方法便是由Robert E. Schapire于1990年在Machine Learning提出的”The strength of weak learnability” ,该方法是一个boosting算法,它递归地训练三个弱学习器,然后将这三个弱学习器结合起形成一个强的学习器。我们可以使用这个算法的第一步去解决数据不平衡问题。
  首先使用原始数据集训练第一个学习器L1。
  然后使用50%在L1学习正确和50%学习错误的的那些样本训练得到学习器L2,即从L1中学习错误的样本集与学习正确的样本集中,循环一边采样一个。
  接着,使用L1与L2不一致的那些样本去训练得到学习器L3。
  最后,使用投票方式作为最后输出。
  那么如何使用该算法来解决类别不平衡问题呢?
  假设是一个二分类问题,大部分的样本都是true类。让L1输出始终为true。使用50%在L1分类正确的与50%分类错误的样本训练得到L2,即从L1中学习错误的样本集与学习正确的样本集中,循环一边采样一个。因此,L2的训练样本是平衡的。L使用L1与L2分类不一致的那些样本训练得到L3,即在L2中分类为false的那些样本。最后,结合这三个分类器,采用投票的方式来决定分类结果,因此只有当L2与L3都分类为false时,最终结果才为false,否则true。