在 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 命令行参数 wiki了解更多详细信息。
(*) 在实践中,功能名称将在名称空间前面加上^
分隔符,因此实际的散列字符串将是x^a^y^b:6
而不是ab:6
(您可以使用该--audit
选项验证这一点)但这只是一个细节。