協同過濾(cf)是一種推薦演算法,spark中採用的是矩陣分解求als(alternating least squares交替最小二乘)的實現。
spark推薦演算法在org.apache.spark.mllib.recommendation
包下,共有三個類:
封裝使用者id,物品id,評分的資料結構,沒有其他介面。
new
rating
(user: int, product: int, rating: double)
根據輸入的rdd[rating]資料和配置的引數訓練模型。具體引數如下:
1) ratings : 評分矩陣對應的rdd。需要我們輸入。如果是隱式反饋,則是評分矩陣對應的隱式反饋矩陣。
2) rank : 矩陣分解時對應的低維的維數。這個值越大則演算法執行的時間和占用的記憶體越多。通常需要進行調參,一般可以取10-200之間的數。
3) iterations :在矩陣分解用交替最小二乘法求解時,進行迭代的最大次數。一般來說,不需要太大,比如5-20次即可。預設值是10。
4) lambda: 這個值即為funksvd分解時對應的正則化係數。主要用於控制模型的擬合程度,增強模型泛化能力。取值越大,則正則化懲罰越強。大型推薦系統一般需要調參得到合適的值。
5) alpha : 這個引數僅僅在使用隱式反饋trainimplicit時有用。指定了隱式反饋信心閾值,這個值越大則越認為使用者和他沒有評分的物品之間沒有關聯。一般需要調參得到合適值。
最終模型,包含**和推薦的一些常用方法。
//計算usersproducts中每個(user, product)的評分
predict
(usersproducts: rdd[
(int, int)])
: rdd[rating]
//計算user使用者對product的評分
predict
(user: int, product: int)
: double
//為user推薦num個產品
recommendproducts
(user: int, num: int)
: array[rating]
//把product推薦給num個使用者
recommendusers
(product: int, num: int)
: array[rating]
//為每個使用者進行推薦,每使用者推薦num個產品
recommendproductsforusers
(num: int)
: rdd[
(int, array[rating])]
//推薦每個產品,將每個產品推薦給num個使用者
recommendusersforproducts
(num: int)
: rdd[
(int, array[rating])]
val rank: int //此模型特徵維度
val productfeatures: rdd[
(int, array[double])]
//rdd[(產品, 產品特徵陣列)]
val userfeatures: rdd[
(int, array[double])]
//rdd[(使用者, 使用者特徵陣列)]
關於矩陣分解的相關數學基礎知識,參考: 協同過濾推薦演算法 推薦演算法 基於協同過濾CF
前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些好玩的,你會怎麼做?你可能會上網查一下的...
推薦演算法 基於協同過濾CF
2019 01 06 18 21 09 前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些...
基於CF(協同過濾)推薦演算法
基於物品的cf 協同過濾 推薦演算法 1.1演算法簡介 cf 協同過濾 簡單來形容就是利用興趣相投的原理進行推薦,協同過濾主要分兩類,一類是基於物品的協同過濾演算法,另一種是基於使用者的協同過濾演算法,這裡主要介紹基於物品的協同過濾演算法。給定一批使用者,及一批物品,記vi表示不同使用者對物品的評分...