3

我有一个数据集的多类分类问题(有 6 个目标类)。训练数据具有类标签的倾斜分布:下面是每个类标签的分布(1 到 6)

(array([174171,     12,     29,   8285,   9996,  11128]),

我正在使用 vowpal wabbit 的 oaa 方案进行分类,并为每个示例尝试了默认权重 1.0。然而,对于大多数模型,这只会导致模型对评估中的所有示例预测为 1.0(因为标签 1 在训练集中具有非常大的表示)。

我现在正在尝试尝试不同的权重,我可以将这些权重应用于每个类的示例,以帮助提高分类器的性能。

任何关于决定每个示例权重的技术的指针或实用技巧都将非常有用。一种可能的技术是根据频率以反比对示例进行加权。不幸的是,这似乎导致分类器极大地偏向标签 2 和 3 ,并预测评估中几乎所有内容的 2 和 3。

模型选择会在决定权重方面发挥作用吗?我正在试验神经网络、逻辑和铰链损失函数。

4

1 回答 1

4

可能有更好的方法,但我会像您一样开始,根据标签的稀有性对示例进行反向加权,如下所示:

标签计数总和 =174171 + 12 + 29 + 8285 + 9996 + 11128 = 203621所以

出现 174171 次(占总数的 85.5%)的标签 1 将被加权: 203621/174171 = 1.16909 出现 12 次(最稀有)的标签 2 将被加权:203621/12 = 16968.4

等等。

确保训练集中的示例被很好地洗牌。这对在线学习至关重要。将相同的标签示例混为一谈会导致在线性能非常差。

如果你确实洗牌很好,并且在新示例上表现不佳,你可以不那么激进地重新加权,例如取sqrt()反权重,然后如果仍然过于激进,切换到log()反权重等。

另一种方法是使用一个新的成本敏感的多类选项,例如--csoaa github 上的 VW wiki 有一些示例,其中详细说明了如何使用这些选项及其训练集格式。

选择的损失函数肯定会产生影响。但是请注意,通常,当在 中使用多类或任何其他基于归约的选项时vw,您应该不理会它--loss_function,让算法使用其内置的默认值。如果您尝试不同的损失函数并获得比归约内置损失函数更好的结果,这可能会引起开发人员的兴趣vw,请将其报告为错误。

于 2013-11-14T06:27:49.477 回答