分类问题中不平衡数据分布的解决方案
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。
解决方案:
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。
相关文章推荐
- Keras 处理 不平衡的数据的分类问题 imbalance data 或者 highly skewed data
- 从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
- 分类中数据不平衡问题的解决经验
- 分类中样本数据不平衡问题的解决方法
- 非均衡数据分布的分类问题
- 分类问题中的数据不平衡问题
- 分类中数据不平衡问题的解决经验
- 从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
- 分类中数据不平衡问题的解决经验
- 从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12
- 分类中数据不平衡问题的解决经验(转)
- 分类问题中的数据不平衡问题
- 分类中数据不平衡问题的解决经验[转载]
- 分类中数据不平衡问题的解决经验
- 从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
- 分类中数据不平衡问题的解决经验
- linux上面运行python抓取数据时由于chromedriver和chromium没有关闭导致的内存泄漏的问题解决方案
- 机器学习中的数据不平衡问题----通过随机采样比例大的类别使得训练集中大类的个数与小类相当,或者模型中加入惩罚项
- 数据结构—Java版链表相交问题的终极解决方案
- JSP和Servlet互相传输数据的过程中产生的乱码问题及解决方案(没有使用AJAX的情况)