我正在使用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 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度量。
但是我关注的论文报告了该数据集的81%的准确性。因此,在实现或解释结果时肯定出现了错误。我无法弄清楚那是什么。
编辑:我在测试命令中使用了--binary选项,这给了我标签{-1,+ 1}。我对其进行了评估,得出以下结果-准确度为51.25%,f测度为34.88%。
最佳答案
编辑:主要问题是训练数据不是随机排列的。当使用任何在线学习时,这是必需的(除非训练数据已经被改组或它是实时序列)。可以使用Unix命令shuf
完成。
说明:在极端情况下,如果训练数据首先包含所有负面示例,然后包含所有正面示例,则该模型很可能会学会将(几乎)所有内容分类为正面。
可能导致低F1测度(几乎所有预测都是积极的)的另一个常见原因是数据不平衡(很多积极的例子,很少有负面的例子)。 Satarupa Guha问题中的数据集不是这种情况,但是我在这里保留了原始答案:
显而易见的解决方案是为否定示例赋予更高的(比默认值1大)重要性。重要性权重的最佳值可以使用保留集找到。
如果我使用一个规则,如果该值大于阈值(例如14),则该值为正,否则为负
负面预测与正面预测的阈值应为0。
请注意,Vowpal Wabbit的一大优点是您无需将要素名称(在您的情况下为单词)转换为整数。您可以使用原始(标记化的)文本,只需确保转义管道“ |”即可和冒号“:”(以及空格和换行符)。当然,如果您已经将单词转换为整数,则可以使用它。
关于machine-learning - Vowpal Wabbit输出的解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29826536/