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

Alb*_*nto 4 apache-spark pyspark apache-spark-mllib

实际上,我正在尝试使用ALSfrom spark-ml与隐式评级。

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

负值

eli*_*sah 5

Apache Spark提供了对ALS 施加非否定约束的选项。

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

蟒蛇:

nonnegative=True
Run Code Online (Sandbox Code Playgroud)

Scala:

setNonnegative(true)
Run Code Online (Sandbox Code Playgroud)

在创建ALS模型时,即:

>>> als = ALS(rank=10, maxIter=5, seed=0, nonnegative=True)
Run Code Online (Sandbox Code Playgroud)

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

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

至于NaN值,通常是由于拆分了数据集导致的,如果训练集中没有出现其中一项,而测试集中也没有出现,则可能导致看不见的项目或用户。如果您交叉验证了培训,也可能会发生这种情况。就此而言,有几个JIRA被标记为针对2.2 解决

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