6种方式处理机器学习中不平衡的数据集 - svpino


让我们从一个例子开始:您正在尝试构建一个分类模型。

  • 1 类:猫
  • 2 类:狗

不幸的是,您的数据非常不准确:有 950 张猫图片和 50 张狗图片。
如果您的模型将每张图片都归类为猫,那么您的准确率将达到 95%。想一想:由于类别不平衡,愚蠢的模型将使您达到 95% 的准确率。这是业界非常普遍的问题。
注意:“不平衡”并不意味着“每个类别的样本数量不同”。拥有 550 张猫图片和 450 张狗图片不一定是问题。
现在让我们通过一些技巧来解决这个问题:
1. 不要在不平衡的数据集上使用“准确性”。
对于这些问题,精度并不是一个好的性能指标。
相反,请查看以下内容:
  • 精度
  • Recall召回
  • F-Score
  • 混淆矩阵
  • ROC 曲线

 
2. 收集更多数据。

在我们的示例中,您可能能够找到更多的狗图片添加到您的数据集中并减少差异。我总是喜欢从这里开始,但收集更多数据并不总是一种选择。
 
3. 用合成数据扩充数据集。
这是处理非结构化数据的好方法:创建类似于真实数据的新样本。非结构化数据是指:视频、图像、文本、音频。
您可以转换一些狗图片以创建新样本:
  •  更改对比度
  •  水平翻转
  •  轻微旋转
  •  添加噪声
  •  ...
  •  

结合这些技术,我们可以生成大量新数据。
对于结构化数据,增强要困难得多,有时根本不可能。结构化数据 是指: 表格数据(想想列和行。)
 
4. 重新采样您的数据集。
有几种方法可以做到这一点:
  •  对狗的图片进行过采样。
  •  对猫的图片采样不足。

您也可以将两者结合起来。
以下是对我们的数据集重新采样的示例:
  •  将每张狗图片使用四次。
  • 使用所有其他猫图片。

新数据集:
  •  狗:400 张图片(50 × 4)
  •  猫:475 张图片(950 ÷ 2)

好多了,嗯?
重要提示:过采样和欠采样都会给您的数据集带来偏差:您正在通过任意弄乱现有样本来改变数据的分布。请务必牢记这一点并考虑后果。
 
5. 使用成本敏感性Cost Sensitivity。
向模型添加成本敏感层是优化预测的好方法。这将有助于权衡在不平衡数据上训练的模型的结果。我们只关心错误,因为如果模型正确,成本为 0 美元。在相信结果之前,我们将计算出错时的潜在错误成本。
 
6. 检查不同的算法。
决策树非常擅长处理不平衡的类。当然,我们不能将决策树用于“猫与狗”问题,但在处理结构化数据时它可能是一个很好的解决方案。