用于多实例学习的 SMOTE 即 num_rows(x_train) > num_rows(y_train)

数据挖掘 数据集 数据科学模型 阶级失衡 打击 多实例学习
2022-03-01 18:48:40

我有一个不平衡的数据集,我希望预测类(0 或 1)。

样品x_train

id      date    c1   c2 . . . . . .  c20
101  13-02-2015  2    7 . . . . . .   14
101  14-02-2015 24    7 . . . . . .    8
  .
  .
  .
105  13-02-2015 12    5 . . . . . . .  4
  . 
  .

样本y_train

id   class
101    1
105    1
107    0
 .
 .
 .

现在我希望在数据集中对 0 类进行过度采样,但问题是每个id我只有一行,y_train而我有 50 行相同idx_train

1个回答

您在这里所拥有的称为多实例学习。来自维基百科

在机器学习中,多实例学习(MIL)是一种监督学习。学习器不是接收一组单独标记的实例,而是接收一组标记的包,每个包包含许多实例。

来源:https ://en.wikipedia.org/wiki/Multiple_instance_learning

在这种情况下,您采取的方法是不同的。您需要将多实例学习问题转化为单实例学习问题。您可以这样做的一种方法是:

  1. 对每个实例包执行 K-Means 聚类
  2. 计算每个实例与每个集群的 Hausdorff 距离
  3. 使用这些距离作为特征,并保留 y_train 集中的标签

然后在新数据集(其中有一行用于特征和标签)和任何类型的单实例学习模型上应用 SMOTE。

您可以在这篇《多实例学习及其应用回顾》中找到详细信息