python surprise库_Python推荐系统库:Surprise
Surprise簡介
Surprise(Simple Python Recommendation System Engine)是一款推薦系統(tǒng)庫,是scikit系列中的一個。surprise設計時考慮到以下目的:
讓用戶完美控制他們的實驗。為此,特別強調文檔,試圖通過指出算法的每個細節(jié)盡可能清晰和準確。
減輕數(shù)據(jù)集處理的痛苦。用戶可以使用內置數(shù)據(jù)集(Movielens, Jester)和他們自己的自定義數(shù)據(jù)集。
提供各種即用型預測算法,例如基線算法,鄰域方法,基于矩陣因子分解(SVD,PMF,SVD ++,NMF)等等。此外,內置了各種相似性度量(余弦,MSD,皮爾遜…)。
可以輕松實現(xiàn)新的算法思路。
提供評估,分析和比較算法性能的工具。使用強大的CV迭代器(受scikit-learn優(yōu)秀工具啟發(fā))以及對一組參數(shù)的詳盡搜索,可以非常輕松地運行交叉驗證程序。
Surprise的主要特點是簡單易用,同時支持多種推薦算法:
基礎算法/baseline algorithms
NormalPredictor: 根據(jù)訓練集的分布特征隨機給出一個預測值
BaselineOnly:給定用戶和Item,給出基于baseline的估計值
基于近鄰方法(協(xié)同過濾)/neighborhood methods
KNNBasic:最基礎的協(xié)同過濾
KNNWithMeans:將每個用戶評分的均值考慮在內的協(xié)同過濾實現(xiàn)
KNNBaseline:考慮基線評級的協(xié)同過濾
矩陣分解方法/matrix factorization-based
SVD:SVD實現(xiàn)
SVDpp:SVD++,即LFM+SVD
NMF:基于矩陣分解的協(xié)同過濾
SlopeOne:一個簡單但精確的協(xié)同過濾算法
CoClustering:基于協(xié)同聚類的協(xié)同過濾算法
其中基于近鄰的方法(協(xié)同過濾)可以設定不同的相似度度量標準:
Cosine:余弦相似度
msd:均方差異相似度
pearson:Pearson相關系數(shù)。
pearson_baseline:(縮小的)Pearson相關系數(shù),使用基線進行居中而不是平均值。
支持不同的評估準則:
rmse:均方根誤差
mae:平均絕對誤差
fcp:協(xié)調對的分數(shù)
Surprise的使用
接下來,在surprise內置的數(shù)據(jù)集(movielens)上用協(xié)同過濾算法來構建一個簡單的電影推薦系統(tǒng)。
利用協(xié)同過濾算法構建推薦系統(tǒng),并測試效果
from __future__ import (absolute_import, division, print_function, unicode_literals)
import os
import io
from surprise import KNNBaseline
from surprise import Dataset
from evaluate, print_perf
# 定義read_item_names()函數(shù),以獲取電影名到電影id和電影id到電影名的映射
def read_item_names():
file_name = (os.path.expanduser('~') + '/.surprise_data/ml-100k/ml-100k/u.item')
rid_to_name = {}
name_to_rid = {}
with io.open(file_name, 'r', encoding='ISO-8859-1') as f:
for line in f:
line = line.split('|')
rid_to_name[line[0]] = line[1]
name_to_rid[line[1]] = line[0]
return rid_to_name, name_to_rid
# 用KNNBaseline算法構建推薦系統(tǒng),計算相似度
data = Dataset.load_builtin('ml-100k')
trainset = data.build_full_trainset()
sim_options = {'name': 'pearson_baseline', 'user_based': False}
algo = KNNBaseline(sim_options=sim_options)
algo.train(trainset)
# 用RMSE、MAE和FCP測試推薦系統(tǒng)效果
perf = evaluate(algo, data, measures=['RMSE', 'MAE', 'FCP'])
# 輸出結果
print_perf(perf)
利用構建的電影推薦系統(tǒng)進行推薦
# 獲取電影名到電影id 和 電影id到電影名的映射
rid_to_name, name_to_rid = read_item_names()
# 根據(jù)Toy Story這部電影來進行推薦
# 找到Toy Story這部電影對應的item id
toy_story_raw_id = name_to_rid['Toy Story (1995)']
toy_story_raw_id
toy_story_inner_id = algo.trainset.to_inner_iid(toy_story_raw_id)
toy_story_inner_id
# 找到相似度最近的10個電影
toy_story_neighbors = algo.get_neighbors(toy_story_inner_id, k=10)
toy_story_neighbors
# 從近鄰的id映射回電影名稱
toy_story_neighbors = (algo.trainset.to_raw_iid(inner_id)
for inner_id in toy_story_neighbors)
toy_story_neighbors = (rid_to_name[rid]
for rid in toy_story_neighbors)
print()
print('The 10 nearest neighbors of Toy Story are:')
for movie in toy_story_neighbors:
print(movie)
參考鏈接:
總結
以上是生活随笔為你收集整理的python surprise库_Python推荐系统库:Surprise的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: python surprise
- 下一篇: python surprise库_sur
