在 vowpal 中,使用 wabbit 命名空间是为了方便地在运行时即时生成交互功能,而无需预先声明它们。
没有名称空间的简单示例格式是:
1 | a:2 b:3
其中1 是标签,a、b 是常规输入特征。
注意|后面有一个空格。
与使用两个名称空间x 和y 进行对比(注意| 分隔符和名称空间之间没有空格):
1 |x a:2 |y b:3
这个例子本质上与第一个例子是等价的(除了特征哈希位置)。它仍然有两个与原始示例具有相同值的特征。不同之处在于,现在有了这些命名空间,我们可以通过将选项传递给vw 来交叉功能。例如:
vw -q xy
将通过将命名空间x 中的所有特征与命名空间y 中的所有特征交叉生成额外的特征。自动生成的特征的名称将是来自两个名称空间的名称的串联,并且值将是它们各自值的乘积。在这种特殊情况下,我们的数据集就好像多了一个特征:ab:6 (*)
显然,这是一个非常简单的示例,假设您有一个在名称空间中有 3 个特性的示例:
1 |x a:2 b:3 c:5
通过将-q xx 添加到vw,您可以自动生成6 额外的交互功能:aa, ab, ac, bb, bc, cc。如果你有 3 个命名空间,比如:x, y, z,你可以在命令行上跨越它们中的任何一个(或任何想要的子集):-q xx -q xy -q xz -q yz -q yy -q zz,以获得所有可能的交互不同的功能集。
仅此而已。这是一项强大的功能,可让您即时试验和添加交互功能。
有几个选项可以接受(第一个字母的)名称空间作为参数,其中包括:
-q
--cubic
--ignore
--keep
--redefine (very new)
--lrq
查看vw command line arguments wiki了解更多详情。
(*) 实际上,功能名称将在名称空间前面加上^ 分隔符,因此实际的散列字符串将是x^a^y^b:6 而不是ab:6(您可以通过使用来验证这一点--audit 选项)但这只是一个细节。