如何确定矩阵分解中的非负性?

数据挖掘 推荐系统 阿帕奇火花
2022-02-13 10:24:54

我们有关于用户在我们的应用中喜欢什么的信息,我们希望向相似的用户推荐内容,即使是那些可能没有明确喜欢特定内容但与明确喜欢该内容的用户相似的用户。

我计划使用 Apache Spark 使用交替最小二乘法的隐式反馈变体来实现推荐系统,该系统将为我找到可以定位的其他用户。

调整参数之一是nonnegative用于非负矩阵分解的布尔标志。

我将计算每个用户和标签的点赞数,所以我不会有负值。我可以说nonnegative=true或者它是否意味着完全不同的东西。我的理解是,非负约束适用于算法将我的原始矩阵分解为的两个矩阵内的值,但我不知道这些值对于我的场景是否是非负的。

参考: Spark ALS 算法不完全是因为还有另一个 API,但对于这个问题来说已经足够了。

1个回答

是的,该参数nonnegative用于约束两个矩阵的值:用户特征和项目特征在使用 ALS 算法进行优化时不具有低于零的值。它驱动使用哪个求解器:CholeskySolver 或 NNLS(共轭梯度)。两者都在 Spark mllib 中实现。

标志当然与输入相连。如果您的评分低于零,并且您直接将所有数据泵入模型,那么在您进行约束检查时预测负值nonnegative将有些困难:-)

在你的情况下,重要的是你有隐含的反馈。因此,您应该设置适当的标志或使用trainImplicit方法。找出最适合您的情况的nonnegative标志的最简单方法是将其作为另一个需要交叉验证检查的超参数来威胁。对我来说,验证时模型的测量是一个更关键的方面。如果您正在尝试进行前 N 项推荐,请使用 Recall@N、MRR@N 或 AUC 等排名指标。