Vowpal Wabbit输出解释

我使用Vowpal Wabbit进行二元情感分类(正面和负面),使用的是基本的单字特征。我的训练特征看起来像这样:

1 | 28060 10778 21397 64464 19255-1 | 44248 21397 3353 57948 4340 7594 3843 44368 33938 49249 45696     32698 57948 21949 58810 32698 62793 644641 | 44248 21397 3353 32698 629961 | 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.64133515.40983413.05779328.48816516.71683919.752426

这些值的范围在-0.114076到28.641335之间。如果我使用一个规则,即如果值超过某个阈值,比如14,则为正面,否则为负面,那么我得到的准确率为51%,F-measure为40.7%。

但我参考的论文报告说在这个数据集上的准确率为81%。所以我的实现或结果解释中肯定有问题。我无法找出问题所在。

编辑:我在测试命令中使用了–binary选项,这给了我{-1,+1}的标签。我进行了评估,得到了以下结果 – 准确率为51.25%,F-measure为34.88%。


回答:

编辑:主要问题是训练数据没有按随机顺序打乱。这在使用任何在线学习时是必要的(除非训练数据已经打乱,或者它是一个实时序列)。可以使用Unix命令shuf来完成。

解释:在极端情况下,如果训练数据先包含所有负面例子,然后是所有正面例子,那么模型很可能学会将(几乎)所有东西分类为正面。

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

显而易见的解决方案是给负面例子赋予更高的(比默认值1高)重要性权重。重要性权重的最佳值可以通过使用保留集来找到。

如果我使用一个规则,即如果值超过某个阈值,比如14,则为正面,否则为负面

负面与正面预测的阈值应该是0。

请注意,Vowpal Wabbit的一大优势是你不需要将特征名称(在你的例子中是单词)转换为整数。你可以使用原始(已分词)的文本,只需确保转义管道”|”和冒号”:”(以及空格和换行符)。当然,如果你已经将单词转换为整数,你也可以使用它。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注