在Vowpal Wabbit中,命名空间和功能有什么区别?

时间:2015-02-18 14:36:45

标签: namespaces command-line-arguments feature-selection vowpalwabbit

在R或python中进行分析时,我们只知道特征名称(它们的值)并使用它们。在Vowpal Wabbit,我们也有命名空间。

我无法理解: 一个。 Namespace是什么意思; 湾它与功能有何不同; C。什么时候使用?什么时候不用?也就是说,我们可以避免使用它。 d。它是如何使用的?

将会感激一两个例子。很抱歉这么多问题。

1 个答案:

答案 0 :(得分:7)

在vowpal wabbit名称空间用于在运行时方便地生成交互功能,而无需预先声明它们。

没有名称空间的简单示例格式是:

1 | a:2 b:3

其中1是标签,ab是常规输入功能。

请注意,|之后有一个空格。

将上述内容与使用两个名称空间xy进行对比(注意|分隔符和名称空格之间没有空格):

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选项验证这一点,但这只是一个细节。