在使用R或Python进行分析时,我们只知道特征名称(它们的值)并使用它们。在Vowpal Wabbit中,我们还有命名空间。
我无法理解: a. 什么是命名空间; b. 它与特征有何不同; c. 何时使用?什么情况下不使用?也就是说,我们能否避免使用它。 d. 如何使用它?
以下是一两个示例,将不胜感激。
在使用R或Python进行分析时,我们只知道特征名称(它们的值)并使用它们。在Vowpal Wabbit中,我们还有命名空间。
我无法理解: a. 什么是命名空间; b. 它与特征有何不同; c. 何时使用?什么情况下不使用?也就是说,我们能否避免使用它。 d. 如何使用它?
以下是一两个示例,将不胜感激。
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
(*)。
显然,这是一个非常简单的例子,想象一下你有一个具有三个特征的示例名称空间:
1 |x a:2 b:3 c:5
vw
中添加-q xx
,您可以自动生成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
^
分隔符,因此特征名称会有名称空间的前缀,所以实际的哈希字符串将是x^a^y^b:6
而不是ab:6
(您可以使用--audit
选项进行验证),但这只是一个细节。
--hash strings
与--hash all
之间的区别,当特征名称为数字时会有所不同。上面的描述主要是为了解释名称空间背后的概念,同时保持答案简洁(我猜我在这方面失败了 :) 在大多数情况下,确切的哈希值以及存储在内存中的特征结束的地址对用户没有影响。 - arielfcolor=red color=blue color=green
,这是可能的,因为等号=
只是特征名称字符串的一部分(即等号不像冒号:
那样是一个特殊的分隔符)。这个主题是正交的,与命名空间无关。当特征是二进制交互时自然而然地工作。顺便说一下:随时可以提出关于如何表示不同类型特征给vw
的单独问题。 - arielf