在R或python中进行分析时,我们只知道特征名称(它们的值)并使用它们。在Vowpal Wabbit,我们也有命名空间。
我无法理解: 一个。 Namespace是什么意思; 湾它与功能有何不同; C。什么时候使用?什么时候不用?也就是说,我们可以避免使用它。 d。它是如何使用的?
将会感激一两个例子。很抱歉这么多问题。
答案 0 :(得分:7)
在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
选项验证这一点,但这只是一个细节。