处理不平衡分类问题

来源:互联网 发布:python 爬取金融数据 编辑:程序博客网 时间:2024/04/29 20:40
2.1 数据层面的方法:重采样技术
平衡分类的主要目标不是增加少数类的的频率就是降低多数类的频率。这样做是为了获得大概相同数量的两个类的实例。

2.1.1 随机欠采样(Random Under-Sampling)
随机欠采样的目标是通过随机地消除占多数的类的样本来平衡类分布;直到多数类和少数类的实例实现平衡,目标才算达成。
  • 优点 :它可以提升运行时间;并且当训练数据集很大时,可以通过减少样本数量来解决存储问题
  • 缺点:(1) 它会丢弃对构建规则分类器很重要的有价值的潜在信息
(2) 被随机欠采样选取的样本可能具有偏差,不能准确的代表大多数。从而在实际的测试数据集上得到不精确的结果。

2.1.2 随机过采样(Random Over-Sampling)
过采样(Over-Sampling)通过随机复制少数类来增加其中的实例数量,从而可增加样本中少数类的代表性。
  • 优点 :与欠采样不同,这种方法不会带来信息损失表现优于欠采样
  • 缺点:由于复制少数类事件,它加大了过拟合的可能性

2.1.3 基于聚类的过采样(Cluster-Based Over Sampling)
在这种情况下,K-均值聚类算法独立地被用于少数和多数类实例。这是为了识别数据集中的聚类。随后,每一个聚类都被过采样以至于相同类型样本的所有聚类有着同样的实例数量,且所有的类有着相同的大小

  • 优点:(1)有助于克服类之间不平衡的挑战。表示正例的样本数量不同于表示反例的样本数量。
(2)有助于克服由不同子聚类组成的类之间的不平衡的挑战。每一个子聚类不包含相同数量的实例。
  • 缺点:正如大多数过采样技术,这一算法的主要缺点是有可能过拟合训练集

总观测 = 1000
欺诈性观察 = 20
非欺诈性观察 = 980
事件发生率 = 2%
  • 多数类聚类
 1. 聚类 1:150 个观察
 2. 聚类 2:120 个观察
 3. 聚类 3:230 个观察
 4. 聚类 4:200 个观察
 5. 聚类 5:150 个观察
 6. 聚类 6:130 个观察
  • 少数类聚类
 1. 聚类 1:8 个观察
 2. 聚类 2:12 个观察
每个聚类过采样之后,相同类的所有聚类包含相同数量的观察。

  • 多数类聚类
 1. 聚类 1:170 个观察
 2. 聚类 2:170 个观察
 3. 聚类 3:170 个观察
 4. 聚类 4:170 个观察
 5. 聚类 5:170 个观察
 6. 聚类 6:170 个观察
  • 少数类聚类
 1. 聚类 1:250 个观察
 2. 聚类 2:250 个观察
基于聚类的过采样之后的事件率 = 500/ (1020+500) = 33 %

2.1.4 信息性过采样:合成少数类过采样技术(SMOTE)
这一技术可用来避免过拟合--当直接复制少数类实例并将其添加到主数据集时。从少数类中把一个数据子集作为一个实例取走,接着创建相似的新合成的实例。这些合成的实例接着被添加进原来的数据集。新数据集被用作样本以训练分类模型。

  • 优点:(1) 通过随机采样生成的合成样本而非实例的副本,可以缓解过拟合的问题。
(2)不会损失有价值信息
  • 缺点:(1)当生成合成性实例时,SMOTE 并不会把来自其他类的相邻实例考虑进来。这导致了类重叠的增加,并会引入额外的噪音
(2)SMOTE 对高维数据不是很有效

总观测 = 1000
欺诈性观察 = 20
非欺诈性观察 = 980
事件发生率 = 2%
从少数类中取走一个包含 15 个实例的样本,并生成相似的合成实例 20 次。
生成合成性实例之后,创建下面的数据集
少数类(欺诈性观察)= 300
多数类(非欺诈性观察)= 980
事件发生率 = 300/1280 = 23.4 %

2.1.5 改进的合成少数类过采样技术(MSMOTE)
这是 SMOTE 的改进版本,SMOTE 没有考虑数据集中少数类和潜在噪声的基本分布。所以为了提高 SMOTE 的效果,MSMOTE 应运而生。
该算法将少数类别的样本分为 3 个不同的组:安全样本、边界样本和潜在噪声样本分类通过计算少数类的样本和训练数据的样本之间的距离来完成。安全样本是可以提高分类器性能的那些数据点。而另一方面,噪声是可以降低分类器的性能的数据点。两者之间的那些数据点被分类为边界样本。
虽然 MSOMTE 的基本流程与 SMOTE 的基本流程相同,在 MSMOTE 中,选择近邻的策略不同于 SMOTE。该算法是从安全样本出发随机选择 k-最近邻的数据点,并从边界样本出发选择最近邻,并且不对潜在噪声样本进行任何操作。

2.2 算法集成技术(Algorithmic Ensemble Techniques)
集成方法的主要目的是提高单个分类器的性能。该方法从原始数据中构建几个两级分类器,然后整合他们的预测。
2.2.1 基于 Bagging 的方法
Bagging 是 Bootstrap Aggreegating 的缩写。传统的 Bagging算法包含生成 n 个不同替换的引导训练样本,并分别训练每个自举算法上的算法,然后再聚合预测。
Bagging 常被用于减少过拟合,以提高学习效果生成准确预测。与 boosting 不同,bagging 方法允许在自举样本中进行替换。
从具有替换的群体中选择 10 个自举样品。每个样本包含 200 个观察值。每个样本都不同于原始数据集,但在分布和变化上与原始数据集类似。机器学习算法(如 logistic 回归、神经网络与决策树)拟合包含 200 个观察的自举样本,且分类器 c1,c2 ... c10 被聚合以产生复合分类器。这种集成方法能产生更强的复合分类器,因为它组合了各个分类器的结果。

  • 优点:(1) 提高了机器学习算法的稳定性与准确性;
(2)减少方差;
(3) 减少了 bagged 分类器的错误分类;
(4) 在嘈杂的数据环境中,bagging 的性能优于 boosting:
  • 缺点:bagging 只会在基本分类器效果很好时才有效。错误的分类可能会进一步降低表现。

2.2.2. 基于 Boosting 的方法
Boosting 是一种集成技术,它可以将弱学习器结合起来创造出一个能够进行准确预测的强大学习器。Boosting 开始于在训练数据上准备的基本分类器/弱分类器。

基本学习器/分类器是弱学习器,即预测准确度仅略好于平均水平。弱是指当数据存在小变化时,会引起分类模型出现大的变化。

在下一次迭代中,新分类器将重点放在那些在上一轮中被错误分类的案例上。
2.2.2.1 自适应 boosting——Ada Boost
Ada Boost 是最早的 boosting 技术,其能通过许多弱的和不准确的规则的结合来创造高准确度的预测。其中每个训练器都是被串行地训练的,其目标在每一轮正确分类上一轮没能正确分类的实例。

对于一个学习过的分类器,如果要做出强大的预测,其应该具备以下三个条件:
  • 规则简单
  • 分类器在足够数量的训练实例上进行了训练
  • 分类器在训练实例上的训练误差足够低



原创粉丝点击