我在Azure ML中尝试进行一些基本的多标签分类。我有一些基本数据,格式如下:
value_x value_y labelx1 y1 label1x2 y2 label1x3 y3 label2.....
我的问题是,在我的数据中,某些标签(总共有五个)出现频率过高,大约40%的数据属于标签1,大约20%属于标签2,其余的约10%。
我想从这些数据中抽样来训练我的模型,以便每个标签的数量均等。
我在抽样模块的标签列上尝试了分层选项,但这只会给我一个与初始数据集相同标签分布的抽样结果。
有什么办法可以用一个模块来实现这一点吗?
回答:
我通过结合使用拆分数据、分区和抽样以及添加行模块实现了这一点。可能有更简单的方法,但我确认这种方法是有效的。:) 我已将我的工作发布在http://gallery.azureml.net/Details/1245147fd7004e91bc7a3683cda19cc7,你可以直接从那里获取,并运行以确认它是否符合你的预期。
由于你说你想要对数据进行抽样,我只是将每个标签的比例都调整到10%,以确保所有标签的代表性相同。由于你对数据集的分布有很好的了解,可以将标签3、4和5保持在约10%,并将标签1减少1/4,将标签2减少1/2,以使它们也达到约10%。
为了解释我在上面链接的工作空间中所做的工作:
- 我使用了一些“拆分数据”模块来筛选出标签1和标签2的数据。在拆分数据模块中,将拆分模式更改为“正则表达式”,并将正则表达式设置为\”Label” ^label1(例如,用于获取标签1的数据)。
- 然后我使用了一些“分区和抽样”模块来适当减少标签1和标签2数据的规模。
- 最后,我使用了一些“添加行”模块将所有数据重新组合在一起。
最后,虽然我没有在我的工作中包含这一点,但你也可以查看SMOTE模块。它将通过合成少数类过采样来增加低频样本的数量。