为什么 spark-ml ALS 模型 returns NaN 和负数预测?
Why does spark-ml ALS model returns NaN and negative numbers predictions?
实际上,我正在尝试将 spark-ml
中的 ALS
与隐式评分一起使用。
我注意到我训练的模型给出的一些预测是 negative
或 NaN
,这是为什么?
Apache Spark 提供了在 ALS 上强制执行 非负约束 的选项。
因此,要删除这些负值,您只需设置:
Python:
nonnegative=True
Scala:
setNonnegative(true)
创建 ALS
模型时,即:
>>> als = ALS(rank=10, maxIter=5, seed=0, nonnegative=True)
非负矩阵分解(NMF或NNMF),也称为非负矩阵逼近,是多元分析和线性代数中的一组算法,其中矩阵V 被(通常)分解为两个矩阵 W 和 H,其中 和 属性 所有三个矩阵都具有非负元素 [Ref. Wikipedia].
如果您想了解更多关于 NMF 的信息,我建议您阅读以下论文:
至于 NaN
值,通常是由于拆分数据集,如果训练集中不存在项目或用户,而测试中只存在该问题,则可能会导致看不见的项目或用户放。如果您交叉验证您的训练,也可能会发生这种情况。就此而言,有几个标记为 resolved for 2.2 的 JIRA:
- https://issues.apache.org/jira/browse/SPARK-14489.
- https://issues.apache.org/jira/browse/SPARK-19345.
最新版本将允许您设置冷启动策略以在创建模型时使用。
实际上,我正在尝试将 spark-ml
中的 ALS
与隐式评分一起使用。
我注意到我训练的模型给出的一些预测是 negative
或 NaN
,这是为什么?
Apache Spark 提供了在 ALS 上强制执行 非负约束 的选项。
因此,要删除这些负值,您只需设置:
Python:
nonnegative=True
Scala:
setNonnegative(true)
创建 ALS
模型时,即:
>>> als = ALS(rank=10, maxIter=5, seed=0, nonnegative=True)
非负矩阵分解(NMF或NNMF),也称为非负矩阵逼近,是多元分析和线性代数中的一组算法,其中矩阵V 被(通常)分解为两个矩阵 W 和 H,其中 和 属性 所有三个矩阵都具有非负元素 [Ref. Wikipedia].
如果您想了解更多关于 NMF 的信息,我建议您阅读以下论文:
至于 NaN
值,通常是由于拆分数据集,如果训练集中不存在项目或用户,而测试中只存在该问题,则可能会导致看不见的项目或用户放。如果您交叉验证您的训练,也可能会发生这种情况。就此而言,有几个标记为 resolved for 2.2 的 JIRA:
- https://issues.apache.org/jira/browse/SPARK-14489.
- https://issues.apache.org/jira/browse/SPARK-19345.
最新版本将允许您设置冷启动策略以在创建模型时使用。