如何利用Spark MLlib進行個性推薦?

shenmanli發表於2017-11-07
在現今的推薦技術和演算法中,最被大家廣泛認可和採用的就是基於協同過濾的推薦方法。


協同過濾(Collaborative Filtering, 簡稱CF) 是利用集體智慧的一個典型方法。換句話說,就是借鑑和你相關人群的觀點來進行推薦。


MLlib中的協同過濾,常應用於推薦系統。
利用某興趣相投、擁有共同經驗之群體的喜好,來推薦使用者感興趣的資訊,補充使用者-商品(User-Item)效用矩陣中所缺失的部分
MLlib當前支援基於模型的協同過濾,其中使用者和商品通過一小組隱語義因子進行表達,並且這些因子也用於預測缺失的元素。
為此, MLlib實現了交替最小二乘法(ALS) 來學習這些隱性語義因子。


基於使用者的協同過濾(User CF)

基於使用者對物品的偏好找到相鄰鄰居使用者,然後將鄰居使用者喜歡的推薦給當前使用者。上述過程就屬於User CF。
基於物品的CF(Item CF)
原理和基於使用者的CF類似,只是在計算鄰居時採用物品本身,而不是從使用者的角度,即基於使用者對物品的偏好找到相似的物品,然後根據使用者的歷史偏好,推薦相似的物品給他。
兩者的計算複雜度和適用場景皆不同


圖書推薦的例子



資料格式:“使用者   書   打分”
使用者1和5,具有相同的興趣。他們都喜歡101這本書,對102的喜歡弱一些,對103的喜歡更弱
使用者1和4,具有相同的興趣,他們都喜歡101和103,沒有資訊顯示使用者4喜歡102。
使用者1和2,興趣好像正好相反,使用者1喜歡101,但使用者2討厭101,使用者1喜歡103而使用者2正好相反。
使用者1和3,交集很少,只有101這本書顯示了他們的興趣



那麼應該給使用者1推薦哪本書?不是101, 102或者103,因為使用者已購買,推薦系統需要發現新的事物。
直覺上,使用者4、5與使用者1類似,所以推薦一些使用者4和5喜歡的書籍,給使用者1是不錯的。
這樣使得104、105和106成為可能的推薦。
整體上看,104是最有可能的一個推薦,這基於104的4.5和4.0的偏好打分。


大部分的推薦系統,通過給item評價打分來實現。
評價推薦系統的一種方式,是評價它的評估偏好值的質量
評價評估偏好和實際偏好的匹配度。


訓練集和打分
計算評估值和實際值之間的平均距離,分值越低越好。
0.0表示非常好的評估 ,這說明評估值和實際值根本沒有差距



可以通過和其它朋友共同喜歡某個或某類影片,來確定使用者相似
通常是通過“距離”來表示相似
例如:歐幾里得距離、皮爾遜相關度、曼哈頓距離、Jaccard係數等等。

根據上述“距離”的演算法,可以找出與自己“口味一樣”的人了,但這並不是目的。目的是找出推薦的物品。

相關文章