gpt4 book ai didi

machine-learning - Vowpal 兔子 : Low-rank matrix factorization?

转载 作者:行者123 更新时间:2023-11-30 08:24:42 27 4
gpt4 key购买 nike

我有一个非常基本的问题。我想做低阶矩阵分解,我正在查看 Vowpal Wabbit documentation关于这个话题。我的问题是:

这两种方法之间有区别吗?(实现或其他)

$ vw --lrq ab5

$ vw -q ab --rank 5

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

<小时/>

可能的后续行动:

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

最佳答案

简短回答:

--rank--lrq 是 Vowpal wabbit 中矩阵分解/分解的两个独立且非常不同的实现。

“矩阵分解”,有时也称为“矩阵分解”,是机器学习中的通用术语,有很多方法可以使用更简单的因子(有时会丢失信息)来近似矩阵。

尽管它们具有一些相似之处,因为它们都试图捕获两个特征子集之间最强的潜在交互,但它们在实现和生成的模型质量方面并不等效。他们的表现很大程度上取决于手头的问题。

更详细:

在难以概括的数据集上(例如 movielens 1M,其中用户对每部电影最多有一个评分),--lrq 似乎表现更好。它似乎使用了更好的默认值,收敛速度更快,效率更高,并且生成的磁盘模型要小得多。 --rank 在其他数据集上可能会表现更好,因为每个用户/项目有更多示例可供概括。

通过运行示例,您可以看出这两种实现会产生不同的结果。例如在 test 目录下选择一个数据集并在其上运行两个算法:

vw --lrq aa3       test/train-sets/0080.dat

对比:

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 之间的排名为 10(用户) 和 i (item),使用 --rank 会比使用 --lrq 得到更好的损失。这表明哪一个更好取决于手头的数据集。

更高的交互(例如--cubic)

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

vw (gd_mf.cc:139): cannot use triples in matrix factorization

但它将允许多个/额外的-q(二次)交互。

--lrq 不太复杂,因此您可以向其添加更高阶的交互选项。

更多差异:

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

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

进一步阅读

--排名

--lrq

关于machine-learning - Vowpal 兔子 : Low-rank matrix factorization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com