您的位置:首页 > 其它

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

2017-10-16 14:15 246 查看
问题定义:

解决方案:

1. 做一次聚类分析。可以考察,其中是否有一些cluster明显的不包含正样本。我们是否可以先做一个粗的分类器,将这一些样本分开,然后再看剩下来的数据是否不均衡的状况会减轻很多。在剩余的数据上再做一个分类器。

2. 从采样的角度处理

over-sampling,对小样本增加副本(复制部分)

under-sampling,对大样本选取部分

3. 人工生成样本

SMOTE+Tomek

SMOTE或者Borderline-SMOTE来随机生成人造样本

Tomek来删除空间上相邻的不同类样本对。

从算法的角度

将样本分布极不平衡的分类问题看作是异常点检测(anomaly detection)和变化趋势问题(change detection),训练one-class分类器。

比如 One-class SVM

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐