surprise 推薦系統簡單入門

2021-09-29 18:51:07 字數 3035 閱讀 4617

直接pip安裝:

pip install scikit-surprise

1、使用小例子(『print_perf』 ,evaluate都不能使,查原**換成predictionimpossible)

from surprise import dataset,prediction_algorithms

from surprise.model_selection import cross_validate

data = dataset.load_builtin('ml-100k')

### 使用normalpredictor

from surprise import knnbasic

from surprise import predictionimpossible

algo = knnbasic()

perf = cross_validate(algo, data, measures=['rmse', 'mae'])

predictionimpossible(perf)

輸出:urprise.prediction_algorithms.predictions.predictionimpossible()

2、推薦電影top10案例(維護兩個字典,index,電影,另乙個電影,index 相反)

import os

from surprise import knnbaseline

import io

from surprise import dataset

# step 1 : train model

def trainmodel():

data = dataset.load_builtin('ml-100k')

trainset = data.build_full_trainset()

# use pearson_baseline to compute similarity

sim_options =

algo = knnbaseline(sim_options=sim_options)

# train

algo.fit(trainset)

return algo

# step 2 : get id_name and name_id

def get_dict():

file_name = os.path.expanduser(r'c:\users\lonng\.surprise_data\ml-100k\ml-100k\u.item')

id_name = {}

name_id = {}

with open(file_name, 'r', encoding='iso-8859-1') as f:

for line in f:

line = line.split('|')

id_name[line[0]] = line[1]

name_id[line[1]] = line[0]

# print(id_name,name_id)

return id_name, name_id

# step 3 : recommend movies based on the model

def recommendmovie(moviename, algo, id_name, name_id, recommendnum):

# get movie's raw id

raw_id = name_id[moviename]

print("%%%%%%%%%%%",raw_id)

# translate raw_id to inner_id

inner_id = algo.trainset.to_inner_iid(raw_id)

print("%%%%%%%%%%%",inner_id)

print("%%%%%%%%%%%",algo.trainset.to_raw_iid(inner_id))

# recommend movies

recommendations = algo.get_neighbors(inner_id, recommendnum)

print("%%%%%%%%%%%",recommendations)

# translate inner_id to raw_id

raw_ids = [algo.trainset.to_raw_iid(inner_id) for inner_id in recommendations]

print("%%%%%%%%%%%",raw_ids)

# get movie name

movies = [id_name[raw_id] for raw_id in raw_ids]

for movie in movies:

print(movie)

if __name__ == '__main__':

id_name, name_id = get_dict()

algo = trainmodel()

showmovies = recommendmovie('craft, the (1996)', algo, id_name, name_id, 10)

3、讀取自己檔案格式

import os

from surprise import reader, dataset

# 指定檔案路徑

file_path = os.path.expanduser('./popular_music_suprise_format.txt')

# 指定檔案格式

reader = reader(line_format='user item rating timestamp', sep=',')

# 從檔案讀取資料

music_data = dataset.load_from_file(file_path, reader=reader)

# 分成5折

music_data.split(n_folds=5)

推薦系統演算法簡單總結

1 協同過濾和基於內容推薦有什麼區別?使用者u1喜歡的電影是a,b,c 使用者u2喜歡的電影是a,c,e,f 使用者u3喜歡的電影是b,d 協同過濾的辦法 那麼你完全可以忽略item的建模,因為這種辦法的決策是依賴user和item之間的關係,也就是這裡的使用者和電影之間的關係。我們不再需要知道ab...

推薦系統架構 推薦系統(1) 業界推薦系統架構

1.1業界主流推薦系統架構 業界推薦系統通用架構 1.2使用者本身資料 1.3物品本身資料 1.4使用者行為資料 2.1基於離線訓練的推薦系統架構設計 常用演算法 邏輯回歸 logistics regression 梯度提公升決策樹 gbdt 和因式分解 fm 架構設計 2.2面向深度學習的推薦系統...

推薦系統(1) 推薦系統概述

推薦系統是主動從大量資訊中找到使用者可能感興趣的資訊的工具。推薦系統的核心問題是如何實現推薦個性化 如何向使用者推薦匹配度高的產品 商品 或專案,本質是通過一定的方式將使用者和專案聯絡起來。自從xerox palo alto研究中心於1992年研發出了基於協同過濾的實驗系統tapestry以來 主要...