0

我正在尝试在 Azure ML 中进行一些基本的多标签分类。我有以下格式的一些基本数据:

value_x value_y label
x1      y1      label1
x2      y2      label1
x3      y3      label2
.....

我的问题是,在我的数据中,某些标签(总共五个标签)的比例过高,因为大约 40% 的数据是标签 1,大约 20% 是标签 2,其余大约 10%。

我想从中抽取一个样本来训练我的模型,以便每个标签都以相等的数量表示。

在标签列的采样模块中尝试了分层选项,但这只是给了我一个与初始数据集中标签分布相同的采样。

知道如何使用模块来做到这一点吗?

4

1 回答 1

3

我能够使用Split DataPartition 和 Sample以及Add Rows模块的组合来做到这一点。可能有一种更简单的方法可以做到这一点,但我确实确认它有效。:) 我在http://gallery.azureml.net/Details/1245147fd7004e91bc7a3683cda19cc7上发布了我的作品,因此您可以直接从那里获取它,然后运行以确认它是否符合您的预期。

既然您说您想要对数据进行抽样,我只是将每个标签减少到 10% 以使所有标签均等表示。由于您对数据集中的分布有很好的了解,因此将标签 3、4 和 5 全部保留在 10% 左右,并将标签 1 减少 1/4 并将标签 2 减少 1/2 以获得其中的 10% 左右好。

解释我在上面链接的工作区中所做的事情:

  • 我使用了一些“拆分数据”模块来过滤掉 label1 和 label2 数据。在拆分数据模块中,将拆分模式更改为“正则表达式”,并将正则表达式设置为\“标签”^label1(以获取label1数据为例)。
  • 然后我使用了一些“分区和样本”模块来适当地减小 label1 和 label2 数据的大小。
  • 最后,我使用了一些“添加行”模块将所有数据重新组合在一起。

最后,我没有在我的工作中包含这个,但你也可以看看SMOTE模块。它将使用合成少数过采样来增加低出现样本的数量。

于 2016-02-26T03:51:29.160 回答