協同過濾(CF)演算法(基於spark)

2021-09-03 07:41:23 字數 1713 閱讀 3094

協同過濾(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表示不同使用者對物品的評分...