2014-10-16 80 views
2

我正在尝试使用vw来查找预测是否有人会打开电子邮件的单词或短语。如果他们打开电子邮件,则目标为1,否则为0。我的数据是这样的:Vowpal Wabbit varinfo和ngrams:不存在的组合

1 |A this is a test 
0 |A this test is only temporary 
1 |A i bought a new polo shirt 
1 |A that was a great online sale 

我把它改成了一个名为“test1.txt文件”和文件运行下面的代码做2的n-gram,也输出变量信息:

C:\~\vw>perl vw-varinfo.pl -V --ngram 2 test1.txt >> out.txt 

当我看看有没有在原始数据中看到的bigrams输出。这是一个错误还是我误解了一些东西。

输出:

FeatureName   HashVal MinVal MaxVal Weight RelScore 
A^a      239656  0.00  1.00 +0.1664 100.00% 
A^is      7514  0.00  1.00 +0.0772  46.38% 
A^test     12331  0.00  1.00 +0.0772  46.38% 
A^this     169573  0.00  1.00 +0.0772  46.38% 
A^bought    245782  0.00  1.00 +0.0650  39.06% 
A^i      245469  0.00  1.00 +0.0650  39.06% 
A^new     51974  0.00  1.00 +0.0650  39.06% 
A^polo     48680  0.00  1.00 +0.0650  39.06% 
A^shirt     73882  0.00  1.00 +0.0650  39.06% 
A^great     220692  0.00  1.00 +0.0610  36.64% 
A^online    147727  0.00  1.00 +0.0610  36.64% 
A^sale     242707  0.00  1.00 +0.0610  36.64% 
A^that     206586  0.00  1.00 +0.0610  36.64% 
A^was     223274  0.00  1.00 +0.0610  36.64% 
A^a^bought    216990  0.00  0.00 +0.0000  0.00% 
A^bought^great   7122  0.00  0.00 +0.0000  0.00% 
A^great^i    190625  0.00  0.00 +0.0000  0.00% 
A^i^is     76227  0.00  0.00 +0.0000  0.00% 
A^is^new    140536  0.00  0.00 +0.0000  0.00% 
A^new^online    69117  0.00  0.00 +0.0000  0.00% 
A^online^only   173498  0.00  0.00 +0.0000  0.00% 
A^only^polo    51059  0.00  0.00 +0.0000  0.00% 
A^polo^sale    131483  0.00  0.00 +0.0000  0.00% 
A^sale^shirt   191329  0.00  0.00 +0.0000  0.00% 
A^shirt^temporary  81555  0.00  0.00 +0.0000  0.00% 
A^temporary^test   90632  0.00  0.00 +0.0000  0.00% 
A^test^that    13689  0.00  0.00 +0.0000  0.00% 
A^that^this    127863  0.00  0.00 +0.0000  0.00% 
A^this^was    22011  0.00  0.00 +0.0000  0.00% 
Constant    116060  0.00  0.00 +0.1465  0.00% 
A^only     62951  0.00  1.00 -0.0490 -29.47% 
A^temporary    44641  0.00  1.00 -0.0490 -29.47% 

例如,^bought^great实际上从未出现在任何原始输入行。难道我做错了什么?

回答

3

这是vw-varinfo中的一个错误。

这可以通过--invert_hash单独运行vw进行验证:

$ vw --ngram 2 test1.txt --invert_hash train.ih 

$ grep '^bought^great' train.ih 
# no output 

快速部分解决办法是把所有的功能具有重量0.0为高度怀疑,可能是伪造的。不幸的是,还有一些功能缺失,因为vw-varinfo--ngram一无所知。我需要重写vw-varinfovw由于编写了vw-varinfo而改变了很多,加上vw-varinfo被写成次优重复许多已经在vw本身中的交叉特征逻辑。我想到的新实现应该更有效率,并且不易受到这类错误的影响。

由于比较紧急的东西,这个项目被搁置了。希望今年能找到一些时间来纠正这个问题。

无关的提示:由于您正在执行二进制分类,因此您应该在{-1,1}而不是{0,1}中使用标签,并使用--loss_function logistic以获得最佳结果。

+0

感谢您的信息和提示! – screechOwl 2014-10-17 11:50:36

+0

看起来不重要,但提示非常有价值! – 2015-02-04 00:21:09

相关问题