Kri*_*ris 7 machine-learning vowpalwabbit matrix-factorization
我有一个非常基本的问题.我想做低级矩阵分解,我正在查看有关该主题的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也适用于高阶交互?
--rank并且--lrq是vowpal wabbit中矩阵分解/分解的两种独立且非常不同的实现.
"矩阵分解",有时称为"矩阵分解"是ML中的一般术语,有许多方法可以使用更简单的因子(有时会丢失信息)来近似矩阵.
尽管它们具有一些相似之处,但它们都试图捕获两个特征子集之间最强的潜在相互作用,但它们在实现中和在它们产生的模型的质量上都不相等.他们的表现很大程度上取决于手头的问题.
--rank是vwJake Hofman 首次实施MF .它的灵感来自SVD(奇异值分解)--lrq几年后Paul Mineiro实施了这项工作.它的灵感来自libfm在难以概括的数据集上(例如,电影版本1M,其中用户每部电影最多有一个评级),--lrq似乎表现更好.它似乎使用更好的默认值,更快收敛,更高效并生成更小的磁盘模型. --rank可以在其他数据集上表现更好,其中每个用户/项目的更多示例可以概括.
通过运行示例,您可以告诉两个实现产生不同的结果.例如,在test目录下选择一个数据集并在其上运行两个算法:
vw --lrq aa3 test/train-sets/0080.dat
Run Code Online (Sandbox Code Playgroud)
与:
vw --rank 3 -q aa test/train-sets/0080.dat
Run Code Online (Sandbox Code Playgroud)
随意添加:--holdout_off -c --passes 1000使它们运行更长时间,以便您可以比较两者之间的运行时间.
您会注意到,每个示例使用不同数量的特征(--lrq更简约,只会查看您明确告诉它的子集),收敛和最终平均损失更好--lrq.如果你存储模型-f modelname- 你会注意到它会小得多,--lrq特别是在大数据集上.
OTOH,如果您尝试像test/train-sets/ml100k_small_train源代码树中那样的数据集,在命名空间u(用户)和i(项目)之间的等级为10 ,那么您将获得--rank比使用更好的损失--lrq.这表明哪一个更好取决于手头的数据集.
--cubic)对于你的第二个问题:--rank不允许更高的互动.如果您尝试添加--cubic,则会收到错误消息:
vw (gd_mf.cc:139): cannot use triples in matrix factorization
Run Code Online (Sandbox Code Playgroud)
但它将允许多个/附加-q(二次)交互.
--lrq 不那么繁琐,所以你可以添加更高阶的交互选项.
通常,当使用自己的独立SGD代码并且不接受其他选项(例如,或)时,--lrq它更加不可知并独立于其他vw选项.此外,内存要求更高.--rank--normalized--adaptive--rank
同样,结果将取决于数据,其他选项和特定交互.
--lrq 源代码树中的演示libfm(由Steffen Rendle撰写)之后--lrq设计了许多进一步的参考文献.| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |