Surprise:一個Python推薦系統演算法庫
Surprise,是scikit系列中的一個推薦系統演算法庫。
一、基本模組
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,考慮了每個使用者的平均打分值。
(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
(1)prediction_algorithms.matrix_factorization.SVD
(2)prediction_algorithms.matrix_factorization.SVDpp
引入隱式反饋,可以是打分動作(誰對某個商品打過分),或者是瀏覽記錄等,隱式回饋的原因比較複雜,專門用一部分引數空間去建模,每個 item 對應一個向量 yi ,通過 user 隱含回饋過的 item 的集合來刻畫使用者的偏好。
(3)prediction_algorithms.matrix_factorization.NMF
NMF 非負矩陣分解,與 SVD 演算法類似,使用者和物品因子都必須是正值。
6. prediction_algorithms.slope_one.SlopeOne
通過計算物品之間的平均差異來進行預測。
7. prediction_algorithms.co_clustering.CoClustering