【问题标题】:Azure machine learning even samplingAzure 机器学习甚至采样
【发布时间】:2016-06-08 06:19:39
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 写一个R模块来操作数据?不确定这是否是最佳实践。
  • 最后我为它写了一个 Python 脚本,但我想知道是否已经内置了一些我缺少的东西。

标签: machine-learning classification sampling multilabel-classification azure-machine-learning-studio


【解决方案1】:

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

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

解释我在上面链接的工作区中做了什么:

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

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

【讨论】:

  • 啊,我什至没有想到会这样想,非常感谢! :)
猜你喜欢
  • 2015-03-15
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 2018-11-04
  • 2016-12-28
  • 1970-01-01
相关资源
最近更新 更多