同一个数据集不同的预测结果
same dataset different prediction results
我有一个非常简单的数据集,见下文(我们称之为 a.vw
):
-1 |a 1 |b c57
1 |a 2 |b c3
2 个命名空间(a
和 b
),在阅读 wiki 后,我知道 vw 会自动生成像 a^1
或 b^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.pred
与 b.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
一起发挥作用。我不确定这是否是一个错误。但是你可以举报。
我有一个非常简单的数据集,见下文(我们称之为 a.vw
):
-1 |a 1 |b c57
1 |a 2 |b c3
2 个命名空间(a
和 b
),在阅读 wiki 后,我知道 vw 会自动生成像 a^1
或 b^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.pred
与 b.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
一起发挥作用。我不确定这是否是一个错误。但是你可以举报。