为什么 spark-ml ALS 模型 returns NaN 和负数预测?

Why does spark-ml ALS model returns NaN and negative numbers predictions?

实际上,我正在尝试将 spark-ml 中的 ALS 与隐式评分一起使用。

我注意到我训练的模型给出的一些预测是 negativeNaN,这是为什么?

Apache Spark 提供了在 ALS 上强制执行 非负约束 的选项。

因此,要删除这些负值,您只需设置:

Python:

nonnegative=True

Scala:

setNonnegative(true)

创建 ALS 模型时,即:

>>> als = ALS(rank=10, maxIter=5, seed=0, nonnegative=True)

非负矩阵分解(NMF或NNMF),也称为非负矩阵逼近,是多元分析和线性代数中的一组算法,其中矩阵V 被(通常)分解为两个矩阵 WH,其中 和 属性 所有三个矩阵都具有非负元素 [Ref. Wikipedia].

如果您想了解更多关于 NMF 的信息,我建议您阅读以下论文:

至于 NaN 值,通常是由于拆分数据集,如果训练集中不存在项目或用户,而测试中只存在该问题,则可能会导致看不见的项目或用户放。如果您交叉验证您的训练,也可能会发生这种情况。就此而言,有几个标记为 resolved for 2.2 的 JIRA:

最新版本将允许您设置冷启动策略以在创建模型时使用。