Spark 中的 ALS:它最小化了什么损失函数?

数据挖掘 阿帕奇火花 矩阵分解
2021-10-02 08:10:22

我玩过 Spark 的 ALS 下的 MovieLens 评级数据集和 ALS 的手动实现,并将结果与​​相同的超参数进行比较。我想确切地知道这一点,以便进行一些可重复的实验。我看过几篇论文以不同的方式描述了 ALS 的确切损失公式。这些似乎很常见:

1)min(ruiμbubipuTqi)2+λ(pu2+(qi2+bu2+bi2)
(评分以减去总体偏差为中心 μ,并且对于每个用户,一个偏差 bu 这是模型的一部分,也是正则化的一部分,以及每部电影的类似偏差 bi)

2)min(rujuiTmj)2+λ(nuiui2+nmjmj2)

(每个用户特征和电影特征向量的惩罚乘以每个用户/电影的评分数,评分可能事先居中,但偏差不是模型参数)。

而且我还看到了向量的 l2 范数不是平方的其他变体。

我玩过这些公式的不同变体,并将相同数据的结果与 Spark 的实现和我的手动实现进行比较,但我找不到任何可以在两种实现中产生相同超参数的变体(潜在因素的数量和值的 lambda) 使用相同的数据给出相似的结果(例如,在某些公式下,具有相同数量的潜在因子并使用相同的 lambda 值,在 Spark 中给出了良好的交叉验证结果,在我的实现中导致过度拟合或使所有的预测都接近于零,但完全不同的 lambda 值给出了可比较的结果)。

Spark 使用什么公式?另外,初始矩阵是如何初始化的?我已经看到一些建议说让电影因子矩阵的第一列是电影的平均评分,其余的随机正态数,而其他人建议随机统一数具有相当大的符号。第一个电影因子矩阵是如何初始化的?

0个回答
没有发现任何回复~