同一个数据集不同的预测结果

same dataset different prediction results

我有一个非常简单的数据集,见下文(我们称之为 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

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

如果你尝试 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 一起发挥作用。我不确定这是否是一个错误。但是你可以举报。