ric*_*izy 7 classification machine-learning vowpalwabbit text-classification
我在多类设置中看到了关于类不平衡的几个问题.但是,我有一个多标签问题,所以在这种情况下你会怎么处理?
我有一组约300k文本示例.如标题中所述,每个示例至少有一个标签,并且只有100个可能的唯一标签.我已经通过利用命名空间将这个问题简化为Vowpal Wabbit的二进制分类,例如
从:
healthy fruit | bananas oranges jack fruit
evil monkey | bipedal organism family guy
...
Run Code Online (Sandbox Code Playgroud)
至:
1 |healthy bananas oranges jack fruit
1 |fruit bananas oranges jack fruit
0 |evil bananas oranges jack fruit
0 |monkey bananas oranges jack fruit
0 |healthy bipedal organism family guy
0 |fruit bipedal organism family guy
1 |evil bipedal organism family guy
1 |monkey bipedal organism family guy
...
Run Code Online (Sandbox Code Playgroud)
我正在使用大众提供的默认选项(我认为是在线SGD,具有平方损失功能).我正在使用平方损失,因为它非常类似汉明损失.
在训练之后,当我在相同的训练集上进行测试时,我注意到所有的例子都是用'0'标签预测的 ......这是一种最小化损失的方法,我想.在这一点上,我不知道该怎么做.我正在考虑使用成本敏感的一对一分类来尝试平衡类,但是由于存在2 ^ 100个标签组合,因此将多标签减少到多类是不可行的.我想知道是否有其他人有任何建议.
编辑:我终于有机会测试类失衡,特别是vw.vw处理不平衡非常糟糕,至少对于高度维度,人口稀少的文本特征.我已经尝试过从1:1到1:25的比率,性能在1:2的比例下突然降低.
如果您强迫它对二元分类问题使用平方损失,任何线性模型都会“非常糟糕”地处理类不平衡。想想损失函数:如果 99% 的观测值为零,则在所有情况下预测为 0 的平方误差为 0.01。Vowpal Wabbit 不能变魔术:如果你要求它最小化平方误差损失,它确实会最小化平方误差损失,就像任何其他回归程序一样。
这是在 R 中使用线性回归模型演示相同的“问题”:
set.seed(42)
rows <- 10000
cols <- 100
x <- matrix(sample(0:1, rows*cols, replace=TRUE), nrow=rows)
y <- x %*% runif(cols) + runif(rows)
y <- ifelse(y<quantile(y, 0.99), 0, 1)
lin_mod <- glm(y~., data.frame(y, x), family='gaussian') #Linear model
log_mod <- glm(factor(y)~., data.frame(y, x), family='binomial') #Logistic model
Run Code Online (Sandbox Code Playgroud)
比较线性模型与逻辑模型的预测结果表明,线性模型始终预测 0,逻辑模型预测 0 和 1 的正确组合:
> table(ifelse(predict(lin_mod, type='response')>0.50, 1, 0))
0
10000
> table(ifelse(predict(log_mod, type='response')>0.50, 1, 0))
0 1
9900 100
Run Code Online (Sandbox Code Playgroud)
使用--loss_function="logistic"或--loss_function="hinge"用于voppal wabbit 中的二元分类问题。您可以在事后使用汉明损失评估您的预测,但将您的结果与始终预测为 0 的汉明损失进行比较可能会提供信息。
一般来说,如果您希望解决训练数据中的类别不平衡问题,则意味着您必须更改为更适合的损失函数。特别是对于类别不平衡,您需要将损失函数更改为 ROC 曲线下的面积。专门为了解决这个问题而设计的。
有一个多标签版本,但如果您已经将其简化为二元分类,它应该可以开箱即用。
这是一篇维基百科文章更全面地解释了这个概念。
这是相关的sklearn 文档,它可能没有什么帮助,因为我不确定这是用什么语言发生的。
| 归档时间: |
|
| 查看次数: |
5386 次 |
| 最近记录: |