4

我正在使用 Vowpal Wabbit 并生成作为可读模型训练的分类器。

我的数据集有 22 个特征,可读模型作为输出给出:

Version 7.2.1
Min label:-50.000000
Max label:50.000000
bits:18
0 pairs:
0 triples:
rank:0
lda:0
0 ngram:
0 skip:
options:
:0
101143:0.035237
101144:0.033885
101145:0.013357
101146:-0.007537
101147:-0.039093
101148:-0.013357
101149:0.001748
116060:0.499471
157941:-0.037318
157942:0.008038
157943:-0.011337
196772:0.138384
196773:0.109454
196774:0.118985
196775:-0.022981
196776:-0.301487
196777:-0.118985
197006:-0.000514
197007:-0.000373
197008:-0.000288
197009:-0.004444
197010:-0.006072
197011:0.000270

有人可以向我解释如何解释文件的最后一部分(在选项之后:)?我正在使用逻辑回归,我需要检查迭代训练如何更新我的分类器,以便我可以理解何时达到收敛......

提前致谢 :)

4

2 回答 2

10

您看到的值是生成的训练模型中所有 22 个特征的哈希值和权重以及一个额外的“常量”特征(其哈希值为 116060)。

格式为:

hash_value:weight

为了查看原始特征名称而不是哈希值,您可以使用以下两种方法之一:

  • 在您的训练集上使用utl/vw-varinfo(在源代码树中)实用程序以及用于训练的相同选项。尝试utl/vw-varinfo获取帮助/使用信息
  • 使用相对较新的--invert_hash readable.model选项

顺便说一句:由于较大的性能损失,将哈希值反转回原始特征名称不是默认设置。默认情况下,vw 在它看到的每个特征字符串上应用单向哈希。它根本不维护特征名称及其哈希值之间的哈希映射。

编辑:

另一个可能有趣的小消息是第一个条目,之后options:是:

:0

它本质上意味着任何“其他”特征(所有不在训练集中的特征,因此没有散列到权重向量中)默认为权重 0。这意味着在 vowpal-wabbit 中训练是多余的在具有零值的特征上,无论如何这是默认值。显式:0价值特征根本不会对模型做出任何贡献。当您在训练集中遗漏权重时,例如:feature_name没有尾随的:<value>vowpal wabbit 隐含地假定它是具有值的二元特征TRUE。IOW:它将所有无价值特征默认为值一 ( :1) 而不是值零 ( :0)。HTH。

于 2014-01-20T01:30:06.497 回答
4

Vowpal Wabbit 现在还有一个--invert_hash选项,它将为您提供一个具有实际变量以及哈希值的可读模型。

它消耗了更多的内存,但是由于您的模型似乎很小,它可能会起作用。

于 2014-03-31T16:05:32.817 回答