相同的数据集不同的预测结果

时间:2016-10-29 23:48:59

标签: vowpalwabbit

我有一个非常简单的数据集,见下文(让我们称之为a.vw):

-1 |a 1 |b c57
1 |a 2 |b c3

2个命名空间(ab),在阅读wiki之后,我知道vw会自动生成a^1b^c57这样的真实功能。 但是,在我知道它之前,我实际上制作了一个这样的vw文件(称之为b.vw):

-1 |a a_1 |b b_c57
1 |a a_2 |b b_c3

如您所见,我只是手动为每个功能添加前缀。

现在我在具有相同配置的两个文件上训练模型,如下所示:

cat a.vw | vw --loss_function logistic --passes 1 --hash all -f a.model --invert_hash a.readable  --random_seed 1
cat b.vw | vw --loss_function logistic --passes 1 --hash all -f b.model --invert_hash b.readable --random_seed 1

然后我检查了可读的模型文件,它们每个功能的权重完全相同,见下文:

$ cat a.readable
Version 8.2.1
Id
Min label:-50
Max label:50
bits:18
lda:0
0 ngram:
0 skip:
options:
Checksum: 295637807
:0
Constant:116060:-0.0539969
a^1:112195:-0.235305
a^2:1080:0.243315
b^c3:46188:0.243315
b^c57:166454:-0.235305

$ cat b.readable
Version 8.2.1
Id
Min label:-50
Max label:50
bits:18
lda:0
0 ngram:
0 skip:
options:
Checksum: 295637807
:0
Constant:116060:-0.0539969
a^a_1:252326:-0.235305
a^a_2:85600:0.243315
b^b_c3:166594:0.243315
b^b_c57:227001:-0.235305

最后,我分别使用两个数据集上的两个模型进行预测,如下所示:

$ cat a.vw | vw -t -i a.model -p a.pred --link logistic --quiet
$ cat b.vw | vw -t -i b.model -p b.pred --link logistic --quiet

现在,问题出现了,a.predb.pred的结果截然不同,见下文:

$ cat a.pred
0.428175
0.547189

$ cat b.pred
0.371776
0.606502

为什么?这是否意味着我们必须手动为功能添加前缀?

1 个答案:

答案 0 :(得分:1)

如果你尝试cat a.vw | vw -t -i a.model -p a.pred --link logistic --quiet --hash all,你会得到:
$ cat a.pred 0.371776 0.606502
似乎--hash参数值未存储在模型文件中,您也需要在测试步骤中指定它。 b.vw没关系,因为它没有纯数字功能,但与a.vw起作用。我不确定这是不是一个错误。但你可以举报。