首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wabbit:低秩矩阵分解?

Wabbit:低秩矩阵分解?
EN

Stack Overflow用户
提问于 2016-08-19 13:49:06
回答 1查看 1.1K关注 0票数 8

我有一个非常基本的问题。我想做低级别的矩阵因式分解,我正在研究关于这个主题的Vowpal Wabbit文档。我的问题是:

这两种方法之间有什么区别吗?(实现与否)

代码语言:javascript
复制
$ vw --lrq ab5

代码语言:javascript
复制
$ vw -q ab --rank 5

在这里,ab是特征命名空间,5是潜在因素维度.

可能的后续行动:

如果这些是等价的,--rank 也适用于高阶交互吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-24 00:44:37

简短答覆:

--rank--lrq是在元音块中实现矩阵分解/分解的两个独立的、非常不同的实现。

“矩阵分解”,有时被称为“矩阵分解”,是ML中的一个通用术语,有许多方法可以用更简单的因素(有时是信息的丢失)来逼近矩阵。

虽然它们有一些相似之处,因为它们都试图捕捉两个特征子集之间最强的潜在交互,但它们在实现上和它们所产生的模型的质量上都不是等价的。他们的表现在很大程度上取决于眼前的问题。

更详细的是:

  • --rank是Jake首次在vw中实现MF。它的灵感来源于奇异值分解
  • --lrq在几年后由Paul实现。它的灵感来源于利布夫姆

在难以概括的数据集(例如,每部电影的用户最多只有一个评分的电影100万)上,--lrq似乎表现得更好。它似乎使用了更好的缺省值,收敛速度更快,效率更高,并生成了更小的磁盘模型。在其他数据集中,如果每个用户/项目有更多的示例可供泛化,--rank的性能可能会更好。

通过运行一个示例,您可以告诉这两个实现产生不同的结果。例如,选择test目录下的数据集并在其上运行两个标记:

代码语言:javascript
复制
vw --lrq aa3       test/train-sets/0080.dat

相对于:

代码语言:javascript
复制
vw --rank 3 -q aa  test/train-sets/0080.dat

可以随意添加:--holdout_off -c --passes 1000使它们运行得更长,这样您就可以比较两者之间的运行时间。

您会注意到,这两个示例使用了不同数量的特性(--lrq更简约,只会查看您明确告诉它的子集),收敛性和最终平均损失在--lrq中更好。如果您用-f modelname存储模型--您会注意到,使用--lrq时,它要小得多,特别是在大数据集上。

OTOH,如果在源树中尝试像test/train-sets/ml100k_small_train这样的数据集,在名称空间u (用户)和i (item)之间排名为10,那么使用--rank会比使用--lrq更好。这表明哪一个更好取决于手头的数据集。

更高的交互作用(如--cubic)

关于你的第二个问题:--rank不允许更高的交互。如果您尝试添加--cubic,您将得到一个错误:

代码语言:javascript
复制
vw (gd_mf.cc:139): cannot use triples in matrix factorization

但是它将允许多个/附加的-q (二次)交互。

--lrq不那么挑剔,所以您可以在其中添加更高级的交互选项。

更多的差异:

通常,--lrq更不可知,独立于其他vw选项,而--rank则使用自己的独立SGD代码,并且不接受其他选项(如--normalized--adaptive)。此外,对--rank的内存需求也更高。

同样,结果将取决于数据、附加选项和特定交互。

再读

-职级

--lrq

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39040721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档