我的目标是在他们的参数空间中对各种VW模型进行网格搜索(尝试不同的损失函数和正则化等).由于模型可以使用多次传递,我想使用交叉验证.我想知道我是否应该实现自己的交叉验证代码(可能作为bash脚本)或者我是否重新发明轮子.关于这是否已在之前完成的任何指示或最佳方式继续进行将是有用的.我正在考虑在bash脚本中实现交叉验证,并使用GNU parallel来并行化Grid Search
我在多类设置中看到了关于类不平衡的几个问题.但是,我有一个多标签问题,所以在这种情况下你会怎么处理?
我有一组约300k文本示例.如标题中所述,每个示例至少有一个标签,并且只有100个可能的唯一标签.我已经通过利用命名空间将这个问题简化为Vowpal Wabbit的二进制分类,例如
从:
healthy fruit | bananas oranges jack fruit
evil monkey | bipedal organism family guy
...
Run Code Online (Sandbox Code Playgroud)
至:
1 |healthy bananas oranges jack fruit
1 |fruit bananas oranges jack fruit
0 |evil bananas oranges jack fruit
0 |monkey bananas oranges jack fruit
0 |healthy bipedal organism family guy
0 |fruit bipedal organism family guy
1 |evil bipedal organism family guy
1 |monkey bipedal organism family guy
...
Run Code Online (Sandbox Code Playgroud)
我正在使用大众提供的默认选项(我认为是在线SGD,具有平方损失功能).我正在使用平方损失,因为它非常类似汉明损失.
在训练之后,当我在相同的训练集上进行测试时,我注意到所有的例子都是用'0'标签预测的 ......这是一种最小化损失的方法,我想.在这一点上,我不知道该怎么做.我正在考虑使用成本敏感的一对一分类来尝试平衡类,但是由于存在2 ^ 100个标签组合,因此将多标签减少到多类是不可行的.我想知道是否有其他人有任何建议.
编辑:我终于有机会测试类失衡,特别是vw …
classification machine-learning vowpalwabbit text-classification
我正在使用Vowpal Wabbit在具有25个特征和4800万个实例的数据集上执行逻辑回归.我对当前的预测值有疑问.它应该在0或1之内.
average since example example current current current
loss last counter weight label predict features
0.693147 0.693147 1 1.0 -1.0000 0.0000 24
0.419189 0.145231 2 2.0 -1.0000 -1.8559 24
0.235457 0.051725 4 4.0 -1.0000 -2.7588 23
6.371911 12.508365 8 8.0 -1.0000 -3.7784 24
3.485084 0.598258 16 16.0 -1.0000 -2.2767 24
1.765249 0.045413 32 32.0 -1.0000 -2.8924 24
1.017911 0.270573 64 64.0 -1.0000 -3.0438 25
0.611419 0.204927 128 128.0 -1.0000 -3.1539 25
0.469127 0.326834 256 256.0 -1.0000 -1.6101 23
0.403473 …Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的问题.我想做低级矩阵分解,我正在查看有关该主题的Vowpal Wabbit文档.我的问题是:
这两种方法有区别吗?(实施或其他)
$ vw --lrq ab5
Run Code Online (Sandbox Code Playgroud)
要么
$ vw -q ab --rank 5
Run Code Online (Sandbox Code Playgroud)
在这里,a并b有多项功能的命名空间和5为潜在因素维度.
可能的后续行动:
如果这些是等价的,--rank也适用于高阶交互?
有人设法在Vowpal Wabbit中运行普通的最小二乘回归吗?我试图确认它将返回与确切解决方案相同的答案,即当选择最小化||y - X a||_2 + ||Ra||_2(其中R是正则化)时,我想得到分析答案
a = (X^T X + R^T R)^(-1) X^T y.在numpy python中进行这种类型的回归需要大约5行.
大众的文档表明它可以做到这一点(可能是"平方"的损失函数),但到目前为止,我还是无法让它接近匹配python结果.因为平方是默认的损失函数,我只是简单地称:
$ vw-varinfo input.txt
Run Code Online (Sandbox Code Playgroud)
其中input.txt有像这样的行
1.4 | 0:3.4 1:-1.2 2:4.0 .... etc
Run Code Online (Sandbox Code Playgroud)
我还需要大众电话中的其他参数吗?我无法理解(相当简单的)文档.
regression command-line-arguments least-squares vowpalwabbit
Vowpal Wabbit会在每个纪元/通过后自动调整其数据吗?我希望创建的缓存文件将包含在线算法(如VW的默认在线SGD方法)所必需的混洗元数据.例如
vw -d train.txt -c --passes 50 -f train.model
Run Code Online (Sandbox Code Playgroud)
如果没有,我有一个备份脚本,可以在每次传递时手动调整数据
# Create the initial regressor file
vw -d train.txt -f train.model
# For the next 49 passes, shuffle and then update the regressor file
for i in {0..49}
do
<some script: train.txt --> shuffled_data.txt>
vw -d shuffled_data.txt -i train.model -f train.model
done
Run Code Online (Sandbox Code Playgroud)
如果VW没有自动洗牌,那么是否有更有效的方法来执行上述代码块?不幸的是,VW的wiki对此并不清楚.谢谢.
有没有办法使用Vowpal Wabbit对回归使用渐变增强?我使用Vowpal Wabbit附带的各种技巧很有帮助.我想尝试渐变增强,但我找不到在大众实现渐变增强的方法.
在这种情况下,其中一个输入是选择手臂/动作的概率,但我们如何找到该概率?是不是发现概率本身就是一项重大任务?
大众最近添加了一个python接口,但是我无法找到如何安装它的说明.如果我从自制软件安装大众汽车(brew install vowpal-wabbit),我打开python,然后打电话
import pyvw
我得到一个ImportError.
我正在尝试通过 Java使用Vowpal Wabbit。我已经从 GitHub 下载并成功编译了代码。命令行工具工作正常。在快速浏览了存储库(尤其是这里)之后,我只能假设通过 Java 使用它应该已经是可能的,而且我真的不想重新发明轮子。
Vowpal Wabbit 的包装器,允许通过 Java 使用。此包装器设计为自包含的。由于使用了 JNI,因此该 JAR 支持多种平台。
我已经将 maven 依赖项(在这里找到)添加到我的项目中,但是没有任何类型的文档,我真的不知道从哪里开始。我在另一个问题中看到,似乎可以将 VW 与 Java 一起使用,但是这家伙只Runtime.getRuntime.exec()用来调用他的 bash 命令,而我找不到有关任何其他方式的任何文档(并且只有2 个问题在 SO 上混合 VW 和 Java,这无济于事)。我是 JNI 的新手,所以很可能有一些我看不到的简单内容。完全清楚,我的问题是:
Runtime.getRuntime.exec()吗?这似乎不是 JNI 的精神,因为不需要任何包装器/库。另外,这并不使它非常便携。欢迎任何形式的帮助或指导。