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

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

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

我无法理解:
一个。命名空间是什么意思;
湾它与特征有何不同;
C。什么时候使用?什么时候不用?也就是说,我们能不能避免使用它。
d.它是如何使用的?

将不胜感激一两个例子。抱歉问了这么多问题。

最佳答案

在 vawpal wabbit namespace 中,为了方便地在运行时即时生成交互功能,而无需预先声明它们。

一个没有命名空间的简单示例格式是:

1 | a:2 b:3

哪里1是标签,a , b是常规输入特征。

注意|后面有一个空格.

对比上面使用两个 namespace xy (注意 | 分隔符和 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 xxvw您可以自动生成 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/

相关文章:

c++ - 哪个命名空间包含这个友元函数的声明?

c - 是否有更惯用的方法来防止释放可选参数字符串?

flags - 功能标志——它们应该暴露给客户端应用程序吗?

machine-learning - 特征子集选择

php - 使用命名空间中的所有类

asp.net - 在 C# asp.net 中创建自定义命名空间

命令行参数和文件输入

python - 解析\在命令行参数 - python 2.7.3

scikit-learn - 特征聚集降维中的亲和性 ='precomputed' 是什么意思?

c++ - 将函数限制在命名空间