解读Vowpal Wabbit

时间:2015-04-23 14:30:55

标签: machine-learning logistic-regression sentiment-analysis vowpalwabbit

我正在使用Vowpal Wabbit进行二元情感分类(正面和负面),使用基本的unigram功能。 这就是我的火车功能:

1 | 28060 10778 21397 64464 19255
-1 | 44248 21397 3353 57948 4340 7594 3843 44368 33938 49249 45696     32698 57948 21949 58810 32698 62793 64464
1 | 44248 21397 3353 32698 62996
1 | 44248 21397 3353 57948 63747 40024 46815 37197 7594 47339 28060 10778 32698 45035 3843 54789 19806 60087 7594 47339

每行以标签开头,后跟词汇表中的一系列单词索引。这些功能的默认值为1.

我用这个命令训练:

cat trainfeatures.txt | vw --loss_function logistic -f trainedModel

这是我用于测试的命令:

cat testfeatures.txt | vw  -i trainedModel -p test.pred

这就是输出文件test.pred的样子:

28.641335
15.409834
13.057793
28.488165
16.716839
19.752426

值介于-0.114076和28.641335之间。如果我使用一个规则,如果该值超过阈值,比如14,那么它是正数,否则它是负数,那么我得到51%的准确度和40.7%的f-measure。

但我关注的论文报道该数据集的准确率为81%。因此,我在实施或对结果的解释中肯定存在一些问题。我无法弄清楚那是什么。

编辑:我在test命令中使用了--binary选项,这给了我标签{-1,+ 1}。我对它进行了评估并得到了以下结果 - 准确率为51.25%,f测量值为34.88%。

1 个答案:

答案 0 :(得分:1)

编辑:主要问题是训练数据没有以随机顺序洗牌。使用任何在线学习时都需要这样做(除非训练数据已经改组或者是实时系列)。可以使用Unix命令shuf完成。

说明:在极端情况下,如果训练数据首先包含所有反面例子,然后是所有正面​​例子,那么模型很可能会学会将(几乎)一切都归类为正面。

可能导致低F1测量(以及几乎所有预测为正)的另一个常见原因是数据不平衡(许多正面例子,很少有负面例子)。在Satarupa Guha的问题中,这不是数据集的情况,但我保留原来的答案:

显而易见的解决方案是为负面例子提供更高(默认值为1)的重要性权重。可以使用保持集来找到重要性权重的最佳值。

  

如果我使用规则,如果该值超过阈值,例如14,那么它是正的,否则它是负的

阴性与阳性预测的阈值应为0.

请注意,Vowpal Wabbit的一大优势是您不需要将功能名称(在您的情况下为单词)转换为整数。您可以使用原始(标记化)文本,只需确保转义管道#34; |"和冒号":" (以及空格和换行符)。当然,如果您已经将单词转换为整数,则可以使用它。