2017-07-04 27 views
2

其实我试图用ALSspark-ml隐式评级。spark-ml ALS模型为什么会返回NaN和负数预测?

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

negative value

+0

你能告诉我们你是如何创建你的模型? – eliasah

+0

遇到类似问题。可能的原因见于这个问题的答案,https://stackoverflow.com/questions/37379751/spark-als-predictall-returns-empty – cow

+0

@eliasah https://databricks-prod-cloudfront.cloud.databricks.com/ public/4027ec902e239c93eaaa8714f173bcfc/633976740100210/2910709872521072/1005124714215883/latest.html –

回答

1

阿帕奇火花提供了一个选项来强制ALS 非负约束

因此,为了消除这些负面的价值,您只需要设置:

的Python:

nonnegative=True 

斯卡拉:

setNonnegative(true) 

创建ALS时型号,即:

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

非负矩阵分解(NMF或NNMF),也称为非负矩阵近似是一组其中一个矩阵V被分解成(通常)两个多变量分析和线性代数算法矩阵WH,与属性,所有三个矩阵都有非负元素 [参考文献] Wikipedia]。

如果您想了解更多关于NMF,我建议你阅读下列文件:

至于NaN值,通常这是由于拆分数据集可导致如果其中一个不存在于训练集中并且仅存在于测试集中,则看不见物品或用户。如果您交叉验证了您的训练,也可能会发生这种情况。针对此事,有一对夫妇被标记JIRAs的2.2解决

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