【问题标题】:Vowpal Wabbit: Low-rank matrix factorization?Vowpal Wabbit:低秩矩阵分解?
【发布时间】:2016-12-26 17:08:05
【问题描述】:

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

这两种方法有区别吗?(实施或其他方式)

$ vw --lrq ab5

$ vw -q ab --rank 5

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


可能的后续行动:

如果它们是等价的,--rank 是否也适用于高阶交互?

【问题讨论】:

    标签: machine-learning vowpalwabbit matrix-factorization


    【解决方案1】:

    简短回答:

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

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

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

    更详细:

    在难以泛化的数据集上(例如,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 更加简约,只会查看您明确告诉它的子集),收敛性和最终平均损失使用 @ 更好987654341@。如果您使用-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
    

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

    --lrq 不那么挑剔,因此您可以为其添加更高阶的交互选项。

    更多区别:

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

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

    进一步阅读

    --排名

    --lrq

    【讨论】:

    • 最后,有一位大众汽车人愿意分享一个答案:-)
    • 那么,lrq 优化了一个应该与 fm 相似的目标函数,而 rank 优化了不同的目标函数?
    • 是的,我相信--rank N 会迭代逼近SVD,其中只计算前 N 个对角线项。
    • 感谢@arielf 的详细回答,非常感谢!
    • 感谢@Kris 和@avocado。我注意到这个旧 Q 的主要原因是,当我回答一个新的相关 Q 时,它以 0 个答案出现在“相关”列中。我通常尝试用 vowpal-wabbit 标签回答 Q,当我觉得我知道答案时,情况并非总是如此。多年来,vw 已经发展到涵盖了许多我不太了解以提供帮助的算法。查看源代码会有所帮助,在小数据上添加--audit 选项可能是一个很好的说明。
    猜你喜欢
    • 2017-11-25
    • 2012-02-28
    • 1970-01-01
    • 2021-12-07
    • 2015-07-01
    • 2018-01-20
    • 2016-09-21
    • 2017-10-07
    • 2014-11-08
    相关资源
    最近更新 更多