我在测试模式下运行我的VW模型(使用-t
标志)并使用-q SE SZ DR
,其中S, E, Z, D, R
是我的命名空间。然后我在诊断输出中遇到了以下警告:
WARNING: model file has set of {-q, --cubic, --interactions} settings stored, but they'll be OVERRIDEN by set of {-q, --cubic, --interactions} settings from command line.
所以问题是:在创建二次特征时,是否应该在-q
标志后指定与训练时相同的命名空间进行测试?
起初,我认为是的,最好这样做,否则:(a) 要么二次特征不会被创建,它们的权重在测试中会被忽略;(b) 要么它们会被创建但散列到与训练集中不同的桶中。这两种方式都会降低性能,这是我的想法。但上述警告让我产生了怀疑。那么在这种情况下,VW是如何工作的呢?
回答:
正如警告所述,已经存储(持久化)在模型文件中的选项,不应在命令行上重复(或更改)。
换句话说:如果你使用-q XY ...
交互进行训练,这些交互已经存储在模型中。它们在启动时加载模型时(使用-i model_file
)被初始化,因此没有理由在命令行上(重新)包含它们。
并非所有命令行选项都是模型持久化的:例如,默认情况下,损失函数(--loss_function ...
)不会存储在模型中,因此如果你运行回归,你可以每次测试运行时更改损失函数。这是一个非常有用的功能。
你可以通过创建一个“可读模型”使用--readable_model file_name
并查看其头部(前几行)来始终了解哪些选项在模型中被持久化。