
現(xiàn)今,推薦系統(tǒng)被用來個性化你在網(wǎng)上的體驗(yàn),告訴你買什么,去哪里吃,甚至是你應(yīng)該和誰做朋友。人們口味各異,但通常有跡可循。人們傾向于喜歡那些與他們所喜歡的東西類似的東西,并且他們傾向于與那些親近的人有相似的口味。推薦系統(tǒng)試圖捕捉這些模式,以助于預(yù)測你還會喜歡什么東西。電子商務(wù)、社交媒體、視頻和在線新聞平臺已經(jīng)積極的部署了它們自己的推薦系統(tǒng),以幫助它們的客戶更有效的選擇產(chǎn)品,從而實(shí)現(xiàn)雙贏。
兩種最普遍的推薦系統(tǒng)的類型是基于內(nèi)容和協(xié)同過濾(CF)。協(xié)同過濾基于用戶對產(chǎn)品的態(tài)度產(chǎn)生推薦,也就是說,它使用“人群的智慧”來推薦產(chǎn)品。與此相反,基于內(nèi)容的推薦系統(tǒng)集中于物品的屬性,并基于它們之間的相似性為你推薦。
一般情況下,協(xié)作過濾(CF)是推薦引擎的主力。該算法具有能夠自身進(jìn)行特征學(xué)習(xí)的一個非常有趣的特性,這意味著它可以開始學(xué)習(xí)使用哪些特性。CF可以分為基于內(nèi)存的協(xié)同過濾和基于模型的協(xié)同過濾。在本教程中,你將使用奇異值分解(SVD)實(shí)現(xiàn)基于模型的CF和通過計算余弦相似實(shí)現(xiàn)基于內(nèi)存的CF。
我們將使用MovieLens數(shù)據(jù)集,它是在實(shí)現(xiàn)和測試推薦引擎時所使用的最常見的數(shù)據(jù)集之一。它包含來自于943個用戶以及精選的1682部電影的100K個電影打分。你應(yīng)該添加解壓縮的movielens數(shù)據(jù)文件夾你的notebook目錄下。你也可以在這里(http://files.grouplens.org/datasets/movielens/ml-100k.zip)下載數(shù)據(jù)集。
讀入u.data文件,它包含完整的數(shù)據(jù)集。你可以 file, which contains the full dataset. You can(http://files.grouplens.org/datasets/movielens/ml-100k-README.txt)在這里閱讀該數(shù)據(jù)集的簡要說明。
先看看數(shù)據(jù)集中的前兩行。接下來,讓我們計算唯一用戶和電影的數(shù)量。
你可以使用scikit-learn庫將數(shù)據(jù)集分割成測試和訓(xùn)練。Cross_validation.train_test_split根據(jù)測試樣本的比例(test_size),本例中是0.25,來將數(shù)據(jù)混洗并分割成兩個數(shù)據(jù)集。
丨基于內(nèi)存的協(xié)同過濾
基于內(nèi)存的協(xié)同過濾方法可以分為兩個主要部分:用戶-產(chǎn)品協(xié)同過濾和產(chǎn)品-產(chǎn)品協(xié)同過濾。一個用戶-產(chǎn)品協(xié)同過濾將選取一個特定的用戶,基于打分的相似性發(fā)現(xiàn)類似于該用戶的用戶,并推薦那些相似用戶喜歡的產(chǎn)品。相比之下,產(chǎn)品-產(chǎn)品協(xié)同過濾會選取一個產(chǎn)品,發(fā)現(xiàn)喜歡該產(chǎn)品的用戶,并找到這些用戶或相似的用戶還喜歡的其他的產(chǎn)品。輸入一個產(chǎn)品,然后輸出其他產(chǎn)品作為推薦。
· 用戶-產(chǎn)品協(xié)同過濾: “喜歡這個東西的人也喜歡……”
· 產(chǎn)品-產(chǎn)品協(xié)同過濾: “像你一樣的人也喜歡……”
在這兩種情況下,從整個數(shù)據(jù)集構(gòu)建一個用戶-產(chǎn)品矩陣。由于你已經(jīng)將數(shù)據(jù)拆分到測試集和訓(xùn)練集,那么你將需要創(chuàng)建兩個[943 x 1682]矩陣。訓(xùn)練矩陣包含75%的打分,而測試矩陣包含25%的打分。
用戶-產(chǎn)品矩陣的例子: blog8
在構(gòu)建了用戶-產(chǎn)品矩陣后,計算相似性并創(chuàng)建一個相似性矩陣。
在產(chǎn)品-產(chǎn)品協(xié)同過濾中的產(chǎn)品之間的相似性值是通過觀察所有對兩個產(chǎn)品之間的打分的用戶來度量的。
對于用戶-產(chǎn)品協(xié)同過濾,用戶之間的相似性值是通過觀察所有同時被兩個用戶打分的產(chǎn)品來度量的。
通常用于推薦系統(tǒng)中的距離矩陣是余弦相似性,其中,打分被看成n維空間中的向量,而相似性是基于這些向量之間的角度進(jìn)行計算的。用戶a和m的余弦相似性可以使用下面的公式進(jìn)行計算,其中,獲取用戶向量的點(diǎn)積和,然后用向量的歐幾里得長度的乘積來除以它。
要計算產(chǎn)品m和b之間的相似性,使用公式:
第一步是創(chuàng)建用戶-產(chǎn)品矩陣。由于你既有測試數(shù)據(jù),又有訓(xùn)練數(shù)據(jù),那么你需要創(chuàng)建兩個矩陣。
你可以使用sklearn的pairwise_distances函數(shù)來計算余弦相似性。注意,輸出范圍從0到1,因?yàn)榇蚍侄际钦摹?/span>
下一步是做出預(yù)測。你已經(jīng)創(chuàng)建了相似性矩陣:user_similarity和item_similarity,因此,你可以通過為基于用戶的CF應(yīng)用下面的公式做出預(yù)測:
你可以將用戶k和a之間的相似性看成權(quán)重,它乘以相似用戶a (校正的平均評分用戶)的評分。你需要規(guī)范化該值,使打分位于1到5之間,最后,對你嘗試預(yù)測的用戶的平均評分求和。
這里的想法是,某些用戶可能會傾向于對所有的電影,總是給予高或低評分。這些用戶提供的評分的相對差比絕對評分值更重要。舉個例子:假設(shè),用戶k對他最喜歡的電影打4星,而對所有其他的好電影打3星?,F(xiàn)在假設(shè)另一個用戶t對他/她喜歡的電影打5星,而對他/她感到無聊的電影打3星。那么這兩個用戶可能品味非常相似,但對打分系統(tǒng)區(qū)別對待。
當(dāng)為基于產(chǎn)品的CF進(jìn)行預(yù)測時,你無須糾正用戶的平均打分,因?yàn)椴樵冇脩舯臼戮褪怯脕碜鲱A(yù)測的。
丨評估
有許多評價指標(biāo),但其中最受歡迎的用來度量預(yù)測評分的準(zhǔn)確性的指標(biāo)是均方根誤差 (RMSE)。
你可以使用sklearn的mean_square_error (MSE)函數(shù),其中,RMSE僅僅是MSE的平方根。要了解更多不同的評價指標(biāo),你可以看看這篇文章。
由于你只是想要考慮測試數(shù)據(jù)集中的預(yù)測評分,因此,使用prediction[ground_truth.nonzero()]篩選出預(yù)測矩陣中的所有其他元素。
基于內(nèi)存的算法事很容易實(shí)現(xiàn)并產(chǎn)生合理的預(yù)測質(zhì)量的。
基于內(nèi)存的CF的缺點(diǎn)是,它不能擴(kuò)展到真實(shí)世界的場景,并且沒有解決眾所周知的冷啟動問題,也就是當(dāng)新用戶或新產(chǎn)品進(jìn)入系統(tǒng)時。基于模型的CF方法是可擴(kuò)展的,并且可以比基于內(nèi)存的模型處理更高的稀疏度,但當(dāng)沒有任何評分的用戶或產(chǎn)品進(jìn)入系統(tǒng)時,也是苦不堪言的。
丨基于模型的協(xié)同過濾
基于模型的協(xié)同過濾是基于矩陣分解(MF),它已獲得更大的曝光,它主要是作為潛變量分解和降維的一個無監(jiān)督學(xué)習(xí)方法。矩陣分解廣泛用于推薦系統(tǒng),其中,它比基于內(nèi)存的CF可以更好地處理與擴(kuò)展性和稀疏性. MF的目標(biāo)是從已知的評分中學(xué)習(xí)用戶的潛在喜好和產(chǎn)品的潛在屬性(學(xué)習(xí)描述評分特征的特征),隨后通過用戶和產(chǎn)品的潛在特征的點(diǎn)積預(yù)測未知的評分。
當(dāng)你有一個非常稀疏的多維矩陣時,通過進(jìn)行矩陣分解可以調(diào)整用戶-產(chǎn)品矩陣為低等級的結(jié)構(gòu),然后你可以通過兩個低秩矩陣(其中,每行包含該本征矢量)的乘積來代表該矩陣。你通過將低秩矩陣相乘,在原始矩陣填補(bǔ)缺少項,以調(diào)整這個矩陣,從而盡可能的近似原始矩陣。
讓我們計算MovieLens數(shù)據(jù)集的稀疏度:
舉例說明用戶和產(chǎn)品的學(xué)習(xí)隱藏偏好:假設(shè)MovieLens數(shù)據(jù)集中有以下信息:(user id, age, location, gender, movie id, director, actor, language, year, rating)。通過應(yīng)用矩陣分解,模型學(xué)習(xí)到重要的用戶特征是年齡組(10歲以下,10-18歲,18-30歲,30-90歲),位置和性別,而對于電影特性,它學(xué)習(xí)到年份,導(dǎo)演和演員是最重要的。現(xiàn)在,如果你看看你所存儲的信息,其中并沒有年份這樣的特性,但該模型可以自己學(xué)習(xí)。重要方面是,CF模型僅使用數(shù)據(jù)(user_id, movie_id, rating)來學(xué)習(xí)潛在特征。如果只有少數(shù)可用的數(shù)據(jù),那么基于模型的CF模式將預(yù)測不良,因?yàn)檫@將更難以學(xué)習(xí)潛在特征。
同時使用評分和內(nèi)容特性的模型稱為混合推薦系統(tǒng),其中,協(xié)同過濾和基于內(nèi)容的模型相結(jié)合?;旌?a href='/map/tuijianxitong/' style='color:#000;font-size:inherit;'>推薦系統(tǒng)通常比協(xié)同過濾或基于內(nèi)容的模型自身表現(xiàn)出更高的精度:它們有能力更好的解決冷啟動問題,因?yàn)槿绻銢]有一個用戶或者一個產(chǎn)品的評分,那么你可以使用該用戶或產(chǎn)品的元數(shù)據(jù)進(jìn)行預(yù)測?;旌?a href='/map/tuijianxitong/' style='color:#000;font-size:inherit;'>推薦系統(tǒng)將在未來的教程中介紹。
丨SVD
一個眾所周知的矩陣分解方法是奇異值分解(SVD)。通過使用奇異值分解,協(xié)同過濾可以被近似一個矩陣X所制定。Netflix Prize比賽中的獲勝隊伍使用SVD矩陣分解模型來生成產(chǎn)品建議,更多的信息,推薦閱讀文章:Netflix推薦:5星之外和Netflix Prize和SVD。
一般的方程可以表示為:
給定m x n矩陣X:
· U是一個(m x r)正交矩陣
· S是一個對角線上為非負(fù)實(shí)數(shù)的(r x r)對角矩陣
· V^T是一個(r x n)正交矩陣
S的對角線上的元素被稱為X的奇異值。
矩陣X可以被分解成U,S和V。U矩陣表示對應(yīng)于隱藏特性空間中的用戶的特性矩陣,而V矩陣表示對應(yīng)于隱藏特性空間中的產(chǎn)品的特性矩陣。
現(xiàn)在,你可以通過U, S和V^T的點(diǎn)積進(jìn)行預(yù)測了。
草草解決只有相對較少為人所知的問題是非常容易出現(xiàn)的過度擬合。SVD可能會非常緩慢,并且計算成本比較高。更近期的工作通過應(yīng)用交替最小二乘或隨機(jī)梯度下降最小化平方誤差,并使用正則項以防止過 ??度擬合。你可以看到我們之前的一個關(guān)于隨機(jī)梯度下降的教程,以獲取更多詳細(xì)信息。用于CF的交替最小二乘和隨機(jī)梯度下降的方法將在未來的教程中介紹。
總結(jié)一下:
· 在這篇文章中,我們講了如何實(shí)現(xiàn)簡單的協(xié)同過濾方法,包括基于內(nèi)存的CF和基于模型的CF。
· 基于內(nèi)存的模型是基于產(chǎn)品或用戶之間的相似性,其中,我們使用余弦相似性。
· 基于模型的CF是基于矩陣分解,其中,我們使用SVD來分解矩陣。
· 構(gòu)建在冷啟動的情況下(其中,對于新用戶和新產(chǎn)品來說,數(shù)據(jù)不可用)表現(xiàn)良好的推薦系統(tǒng)仍然是一個挑戰(zhàn)。標(biāo)準(zhǔn)的協(xié)同過濾方法在這樣的設(shè)置下表現(xiàn)不佳。在接下來的教程中,你將深入研究這一問題。
原文鏈接:
http://online.cambridgecoding.com/notebooks/eWReNYcAfB/implementing-your-own-recommender-systems-in-python-2
譯文鏈接:https://github.com/ictar/pythondocument/blob/master/Science%20and%20Data%20Analysis/在Python中實(shí)現(xiàn)你自己的推薦系統(tǒng).md
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10