在 R 或 python 中进行分析时,我们只知道特征名称(它们的值)并使用它们。在 Vowpal Wabbit 中,我们也有命名空间。
我无法理解:
一个。命名空间是什么意思;
湾它与特征有何不同;
C。什么时候使用?什么时候不用?也就是说,我们能不能避免使用它。
d.它是如何使用的?
将不胜感激一两个例子。抱歉问了这么多问题。
最佳答案
在 vawpal wabbit namespace 中,为了方便地在运行时即时生成交互功能,而无需预先声明它们。
一个没有命名空间的简单示例格式是:
1 | a:2 b:3
哪里
1
是标签,a
, b
是常规输入特征。注意
|
后面有一个空格.对比上面使用两个 namespace
x
和 y
(注意 |
分隔符和 namespace 之间没有空格):1 |x a:2 |y b:3
此示例本质上与第一个示例等效(除了特征哈希位置)。它仍然有两个与原始示例具有相同值的特征。不同之处在于,现在有了这些命名空间,我们可以通过将选项传递给
vw
来交叉功能。 .例如:vw -q xy
将通过跨越命名空间中的所有特征来即时生成附加特征
x
具有命名空间中的所有功能 y
.自动生成的特征的名称将是来自两个命名空间的名称的串联,值将是它们各自值的乘积。在这种特殊情况下,就好像我们的数据集有一个附加特征:ab:6
(*)显然,这是一个非常简单的示例,假设您有一个 namespace 中有 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更多细节。
(*) 在实践中,功能名称将在 namespace 前面加上
^
之间的分隔符,因此实际的散列字符串将是 x^a^y^b:6
而不是 ab:6
(您可以使用 --audit
选项验证这一点)但这只是一个细节。
关于namespaces - 在 Vowpal Wabbit 中,命名空间和功能之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28586225/