2017-07-04 28 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解決

最新將允許您設置冷啓動策略以在創建模型時使用。