1. 程式人生 > >使用surprise框架為Movieslen資料集中的每個user推薦Top-N個item

使用surprise框架為Movieslen資料集中的每個user推薦Top-N個item

#匯入相關的庫檔案
import os
from surprise import Dataset
from surprise import Reader
from surprise import SVD
from surprise import accuracy
from surprise.model_selection import train_test_split
from surprise import evaluate, print_perf
##讀取資料
#指定檔案的路徑
file_path = os.path.expanduser('ml-100k/u.data')
#告訴文字閱讀器,文字的格式是什麼樣子的
reader = Reader(line_format='user item rating timestamp', sep='\t') #載入資料 data = Dataset.load_from_file(file_path, reader=reader)
# testset佔比25%.
#trainset, testset = train_test_split(data, test_size=.25)
trainset = data.build_full_trainset()
#這裡使用SVD演算法,也可以使用其他的演算法
algo = SVD()
# 在trainset上進行模型的訓練, 在testset進行預測
algo.fit(trainset) #進行預測 testset = trainset.build_anti_testset() #這裡的testset是trainset中 rui為0的(user, item, 0) predictions = algo.test(testset) # Then compute RMSE accuracy.rmse(predictions)
RMSE: 0.6043
0.6042835704959628
from collections import defaultdict       #defaultdict是一個字典,當key不存在時,會返回預設值
#從一個prediction集合中返回每個 user Top-N推薦
def get_top_n(predictions, n = 10): '''從一個prediction集合中返回每個 user Top-N推薦 Args: predictions(list of Prediction objects): The list of predictions, as returned by the test method of an algorithm. n(int): The number of recommendation to output for each user. Default is 10. Returns: A dict where keys are user (raw) ids and values are lists of tuples: [(raw item id, rating estimation), ...] of size n. ''' #首先將prediction對映到每個user上 top_n = defaultdict(list) for uid, iid, true_r, est, _ in predictions: top_n[uid].append((iid, est)) #再對每個user的item按照評分進行排序 for uid, user_ratings in top_n.items(): user_ratings.sort(key = lambda x : x[1], reverse = True) top_n[uid] = user_ratings[:n] #取前n個 return top_n
get_top_n(predictions, n = 10)

#計算查準率 [email protected] and 和查全率 [email protected]
在這裡插入圖片描述

相關推薦

使用surprise框架Movieslen資料集中每個user推薦Top-Nitem

#匯入相關的庫檔案 import os from surprise import Dataset from surprise import Reader from surprise import SVD from surprise import accuracy

[譯]使用 Python 的 Pandas 和 Seaborn 框架從 Kaggle 資料集中提取資訊

原文地址:EXTRACTING INSIGHTS FROM A KAGGLE DATASET USING PYTHON’S PANDAS AND SEABORN 原文作者:Strikingloo 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m

BI報表分析和資料視覺化,推薦這三開源工具!

開源篇 一、Superset 1、技術架構:Python + Flask + React + Redux

以SpringMVC框架中心瘋狂擴充套件-08、ActiveMQ收發Json格式的資料

1、匯入Gson依賴包 <!-- Gson --> <dependency> <groupId>com.google.code.gson</groupId

引數表單下拉資料集中的空值新增中文描述

需求描述 潤乾的下拉資料集可以繫結資料庫資料,方便使用者選擇,避免手動輸入可能引起的誤差。 用下拉資料集來實現引數下拉表單,將查詢條件傳遞給結果報表進行計算。有時查詢條件可能不需要選擇或者保持為空值,這時可以使用下拉資料集中的允許空值選項,如下圖:   這時原有的下拉列表就變為   相比原來的選擇項多

自己動手寫javaEE框架-jqgrid換換皮膚然後加到我的框架

就會 cts 客戶 換膚 解析json 狀態 src demo 導航 軟件151 蘇垚  今天讓我倒騰半天的居然不是寫我的javaEE框架,而是更換jqgrid的皮膚。我是相當的討厭jqgrid的默認皮膚,它總讓我想起一直想學而都沒學過的EXTJS,看多了那種淡藍色

python_如何元組中每個元素命名

進行 port 數據 大量 程序 問題 什麽 log python 學生信息系統: (名字,年齡,性別,郵箱地址) 為了減少存儲開支,每個學生的信息都以一個元組形式存放 如: (‘tom‘, 18,‘male‘,[em

python學習--元組中每個元素命名

設置 imp 編寫代碼 python學習 位置 spa python () 返回 官方文檔:namedtuple():命名元組函數賦予元組中每個位置的含義,並允許更具可讀性的自編寫代碼。它們可以在任何使用常規元組的地方使用,並且可以通過名稱而不是位置索引來添加字段。 實例:

快速開發框架什麽得到越來越多企業的認同?

快速開發 快速開發平臺 快速開發框架 隨著企業信息化要求的不斷增加,快速開發框架以其迅速性,便捷性,以及良好的可拓展性得到了越來越多企業的認可。 在傳統的開發模式下,完成一個完整的項目一般需要高級架構員+專業美工人員+數據調優人員+軟件工程師;而采用快速開發框架便只需要少量的軟件

影像資料去除無效值

在使用柵格資料時,黑邊和白邊問題比較困擾我們,╮(╯-╰)╭ ,醜醜地如下所示: 那如何處理這些問題呢?方法不是唯一的,我把 ArcMap 中最常用的幾種方式列舉一下,幫你給資料“化妝”,或者更確切的說是“整容”: Option 1 柵格計算器 在去黑邊之前

python 將dataframe的某一列離散資料轉換數值資料

from sklearn import preprocessing def bianma(a, name): type = a.ix[:, name] a[name].fillna('0', inplace=True) le = preprocessing.LabelE

Jupyter notebook執行出錯,瀏覽器頁面資料

用conda裝了好多遍jupyter notebook都不好使,每次下到一大半網路出錯。 改用pip安裝後,還是出現一個問題。命令列顯示對比正常執行情況主要多了兩行問題: 1.forbidden403    2.'_xsrf' argument missing fro

python判斷子資料夾是否資料

python判斷子資料夾是否為空資料夾,主要是os.listdir()和os.path.isdir()的運用程式碼如下 import os def search(path): files=os.listdir(path) #查詢路徑下的所有的資料夾及檔案 for filee in

小型網站不使用vue框架如何實現資料渲染到前端頁面

1,先寫ajax請求 eg: <script src="jquery.min.js"></script> <script> $(function(){ var xhrul='http://192.168.31.133:3000/jdap

基於前端框架react或者vue或者其他其他框架到出資料生成csv檔案,以及匯入csv檔案讀取資料的簡單例子

1.用npm在專案中安裝以下外掛: npm install file-saver --save npm install papaparse --save npm install jschardet --save npm install iconv-lite --save npm install

CF E. Vasya and a Tree】 dfs+樹狀陣列(給你一棵n個節點的樹,每個點有一個權值,初始全0,m次操作,每次三個數(v, d, x)表示只考慮以v根的子樹,將所有與v點距離小於等於d的點權值全部加上x,求所有操作完畢後,所有節點的值)

題意: 給你一棵n個節點的樹,每個點有一個權值,初始全為0,m次操作,每次三個數(v, d, x)表示只考慮以v為根的子樹,將所有與v點距離小於等於d的點權值全部加上x,求所有操作完畢後,所有節點的值   首先要明確兩件事情性質1.每個人的操作只會影響到他的子孫(包括自己) 性質1.每個人的操

Beego框架:flash資料

這個 flash 與 Adobe/Macromedia Flash 沒有任何關係。它主要用於在兩個邏輯間傳遞臨時資料,flash 中存放的所有資料會在緊接著的下一個邏輯中呼叫後清除。一般用於傳遞提示和錯誤訊息。它適合 Post/Redirect/Get 模式。下面看使用的例子: //

Beego框架:請求資料處理

#獲取引數 我們經常需要獲取使用者傳遞的資料,包括 Get、POST 等方式的請求,beego 裡面會自動解析這些資料,你可以通過如下方式獲取資料: GetString(key string) string GetStrings(key string) []string GetInt

HTTP介面自動化經驗總結(三)Okhttp3 介面測試框架搭建之資料處理

上篇文章寫了怎麼新建POST,GET方法。這篇文章介紹下該如何校驗。 因為我們在方法裡面都返回了String型別結果,String型別校驗起來比較麻煩。多數http介面返回的都是json形式。我們可以寫一個通用方法將String型別轉換為Map物件這樣校驗就比較方便準確了。廢話不多說直接上方法。