天天看點

Surprise:一個Python推薦系統算法庫一、基本子產品二、實作推薦算法

Surprise,是scikit系列中的一個推薦系統算法庫。

官網:http://surpriselib.com/;Conda指令:https://anaconda.org/nicolashug/scikit-surprise

文檔:http://surprise.readthedocs.io/en/stable/

一、基本子產品

1. 推薦算法分類

可分為基于使用者行為的推薦算法和基于内容(物品屬性)的推薦算法。

基于使用者行為資料的推薦算法一般稱為協同過濾算法,主要方法有基于鄰域的方法(neighborhood-based)、隐語義模型(latent factor model,LFM)、基于圖的随機遊走算法(random walk on graph)等。

在業界得到最廣泛應用的算法是基于鄰域的方法,主要包含下面兩種算法:基于使用者的協同過濾算法 UserCF,給使用者推薦和他興趣相似的其他使用者喜歡的物品;基于物品的協同過濾算法 ItemCF,給使用者推薦和他之前喜歡的物品相似的物品。

2. 基于鄰域的CF算法的可設定度量準則,surprise.similarities 子產品

餘弦相似度 cosine、均方差相似度 msd、皮爾遜相關系數 pearson、基線皮爾遜相關系數 pearson_baseline。

3. 評價名額子產品,surprise.accuracy

均方根誤差 rmse、平均絕對誤差 mae、fcp。

4. 資料集 surprise.dataset 子產品

包含了 movielens-100k、movielens-1m、Jester 資料集。還可讀取 pandas.DataFrame 格式及其他檔案格式的資料集。

5. surprise.model_selection 子產品

提供了用于交叉驗證所需要的資料集切分、自動CV、網格搜尋 GridSearchCV 等。

二、實作推薦算法

1. surprise.prediction_algorithms.algo_base

該子產品定義了 類AlgoBase,每個單獨的預測算法都繼承自該類。

2. surprise.prediction_algorithms.predictions,定義了預測結果類。

3. Basic algorithms 基本算法

(1)prediction_algorithms.random_pred.NormalPredictor

從訓練集估計得到一個正态分布(均值和标準差),基于該正态分布進行随機預測。

(2)prediction_algorithms.baseline_only.BaselineOnly

4. k-NN inspired algorithms kNN算法

(1)prediction_algorithms.knns.KNNBasic,即基本的協同過濾算法。

  • k,kNN 算法中的 k 參數;
  • min_k,需考慮的最小鄰居數,當鄰居數不足時,使用全局平均進行預測;
  • sim_options,該參數接收一個 dict,如
    • sim_options = {'name': 'cosine',

'user_based': False # compute similarities between items}

(2)prediction_algorithms.knns.KNNWithMeans,考慮了每個使用者的平均打分值。

Surprise:一個Python推薦系統算法庫一、基本子產品二、實作推薦算法

(3)prediction_algorithms.knns.KNNWithZScore,考慮了每個使用者的 z-score 标準化。

(4)prediction_algorithms.knns.KNNBaseline,包含可學習參數,可使用 SGD 和 ALS 算法進行參數估計。推薦使用 pearson_baseline 度量方式。

  • bsl_options,接收一個 dict,說明配置資訊。
    • bsl_options = {'method': 'sgd', 'learning_rate': .00005, }

5. Matrix Factorization-based algorithms

SVD、RSVD、ASVD、SVD++詳解

(1)prediction_algorithms.matrix_factorization.SVD

Surprise:一個Python推薦系統算法庫一、基本子產品二、實作推薦算法

(2)prediction_algorithms.matrix_factorization.SVDpp

引入隐式回報,可以是打分動作(誰對某個商品打過分),或者是浏覽記錄等,隐式回饋的原因比較複雜,專門用一部分參數空間去模組化,每個 item 對應一個向量 yi ,通過 user 隐含回饋過的 item 的集合來刻畫使用者的偏好。

Surprise:一個Python推薦系統算法庫一、基本子產品二、實作推薦算法

(3)prediction_algorithms.matrix_factorization.NMF

NMF 非負矩陣分解,與 SVD 算法類似,使用者和物品因子都必須是正值。

6. prediction_algorithms.slope_one.SlopeOne

Surprise:一個Python推薦系統算法庫一、基本子產品二、實作推薦算法

通過計算物品之間的平均差異來進行預測。

7. prediction_algorithms.co_clustering.CoClustering