
現(xiàn)今,推薦系統(tǒng)被用來個(gè)性化你在網(wǎng)上的體驗(yàn),告訴你買什么,去哪里吃,甚至是你應(yīng)該和誰做朋友。人們口味各異,但通常有跡可循。人們傾向于喜歡那些與他們所喜歡的東西類似的東西,并且他們傾向于與那些親近的人有相似的口味。推薦系統(tǒng)試圖捕捉這些模式,以助于預(yù)測(cè)你還會(huì)喜歡什么東西。電子商務(wù)、社交媒體、視頻和在線新聞平臺(tái)已經(jīng)積極的部署了它們自己的推薦系統(tǒng),以幫助它們的客戶更有效的選擇產(chǎn)品,從而實(shí)現(xiàn)雙贏。
兩種最普遍的推薦系統(tǒng)的類型是基于內(nèi)容和協(xié)同過濾(CF)。協(xié)同過濾基于用戶對(duì)產(chǎn)品的態(tài)度產(chǎn)生推薦,也就是說,它使用“人群的智慧”來推薦產(chǎn)品。與此相反,基于內(nèi)容的推薦系統(tǒng)集中于物品的屬性,并基于它們之間的相似性為你推薦。
一般情況下,協(xié)作過濾(CF)是推薦引擎的主力。該算法具有能夠自身進(jìn)行特征學(xué)習(xí)的一個(gè)非常有趣的特性,這意味著它可以開始學(xué)習(xí)使用哪些特性。CF可以分為基于內(nèi)存的協(xié)同過濾和基于模型的協(xié)同過濾。在本教程中,你將使用奇異值分解(SVD)實(shí)現(xiàn)基于模型的CF和通過計(jì)算余弦相似實(shí)現(xiàn)基于內(nèi)存的CF。
我們將使用MovieLens數(shù)據(jù)集,它是在實(shí)現(xiàn)和測(cè)試推薦引擎時(shí)所使用的最常見的數(shù)據(jù)集之一。它包含來自于943個(gè)用戶以及精選的1682部電影的100K個(gè)電影打分。你應(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ù)集的簡(jiǎn)要說明。
先看看數(shù)據(jù)集中的前兩行。接下來,讓我們計(jì)算唯一用戶和電影的數(shù)量。
你可以使用scikit-learn庫將數(shù)據(jù)集分割成測(cè)試和訓(xùn)練。Cross_validation.train_test_split根據(jù)測(cè)試樣本的比例(test_size),本例中是0.25,來將數(shù)據(jù)混洗并分割成兩個(gè)數(shù)據(jù)集。
丨基于內(nèi)存的協(xié)同過濾
基于內(nèi)存的協(xié)同過濾方法可以分為兩個(gè)主要部分:用戶-產(chǎn)品協(xié)同過濾和產(chǎn)品-產(chǎn)品協(xié)同過濾。一個(gè)用戶-產(chǎn)品協(xié)同過濾將選取一個(gè)特定的用戶,基于打分的相似性發(fā)現(xiàn)類似于該用戶的用戶,并推薦那些相似用戶喜歡的產(chǎn)品。相比之下,產(chǎn)品-產(chǎn)品協(xié)同過濾會(huì)選取一個(gè)產(chǎn)品,發(fā)現(xiàn)喜歡該產(chǎn)品的用戶,并找到這些用戶或相似的用戶還喜歡的其他的產(chǎn)品。輸入一個(gè)產(chǎn)品,然后輸出其他產(chǎn)品作為推薦。
· 用戶-產(chǎn)品協(xié)同過濾: “喜歡這個(gè)東西的人也喜歡……”
· 產(chǎn)品-產(chǎn)品協(xié)同過濾: “像你一樣的人也喜歡……”
在這兩種情況下,從整個(gè)數(shù)據(jù)集構(gòu)建一個(gè)用戶-產(chǎn)品矩陣。由于你已經(jīng)將數(shù)據(jù)拆分到測(cè)試集和訓(xùn)練集,那么你將需要?jiǎng)?chuàng)建兩個(gè)[943 x 1682]矩陣。訓(xùn)練矩陣包含75%的打分,而測(cè)試矩陣包含25%的打分。
用戶-產(chǎn)品矩陣的例子: blog8
在構(gòu)建了用戶-產(chǎn)品矩陣后,計(jì)算相似性并創(chuàng)建一個(gè)相似性矩陣。
在產(chǎn)品-產(chǎn)品協(xié)同過濾中的產(chǎn)品之間的相似性值是通過觀察所有對(duì)兩個(gè)產(chǎn)品之間的打分的用戶來度量的。
對(duì)于用戶-產(chǎn)品協(xié)同過濾,用戶之間的相似性值是通過觀察所有同時(shí)被兩個(gè)用戶打分的產(chǎn)品來度量的。
通常用于推薦系統(tǒng)中的距離矩陣是余弦相似性,其中,打分被看成n維空間中的向量,而相似性是基于這些向量之間的角度進(jìn)行計(jì)算的。用戶a和m的余弦相似性可以使用下面的公式進(jìn)行計(jì)算,其中,獲取用戶向量的點(diǎn)積和,然后用向量的歐幾里得長(zhǎng)度的乘積來除以它。
要計(jì)算產(chǎn)品m和b之間的相似性,使用公式:
第一步是創(chuàng)建用戶-產(chǎn)品矩陣。由于你既有測(cè)試數(shù)據(jù),又有訓(xùn)練數(shù)據(jù),那么你需要?jiǎng)?chuàng)建兩個(gè)矩陣。
你可以使用sklearn的pairwise_distances函數(shù)來計(jì)算余弦相似性。注意,輸出范圍從0到1,因?yàn)榇蚍侄际钦摹?/span>
下一步是做出預(yù)測(cè)。你已經(jīng)創(chuàng)建了相似性矩陣:user_similarity和item_similarity,因此,你可以通過為基于用戶的CF應(yīng)用下面的公式做出預(yù)測(cè):
你可以將用戶k和a之間的相似性看成權(quán)重,它乘以相似用戶a (校正的平均評(píng)分用戶)的評(píng)分。你需要規(guī)范化該值,使打分位于1到5之間,最后,對(duì)你嘗試預(yù)測(cè)的用戶的平均評(píng)分求和。
這里的想法是,某些用戶可能會(huì)傾向于對(duì)所有的電影,總是給予高或低評(píng)分。這些用戶提供的評(píng)分的相對(duì)差比絕對(duì)評(píng)分值更重要。舉個(gè)例子:假設(shè),用戶k對(duì)他最喜歡的電影打4星,而對(duì)所有其他的好電影打3星?,F(xiàn)在假設(shè)另一個(gè)用戶t對(duì)他/她喜歡的電影打5星,而對(duì)他/她感到無聊的電影打3星。那么這兩個(gè)用戶可能品味非常相似,但對(duì)打分系統(tǒng)區(qū)別對(duì)待。
當(dāng)為基于產(chǎn)品的CF進(jìn)行預(yù)測(cè)時(shí),你無須糾正用戶的平均打分,因?yàn)椴樵冇脩舯臼戮褪怯脕碜鲱A(yù)測(cè)的。
丨評(píng)估
有許多評(píng)價(jià)指標(biāo),但其中最受歡迎的用來度量預(yù)測(cè)評(píng)分的準(zhǔn)確性的指標(biāo)是均方根誤差 (RMSE)。
你可以使用sklearn的mean_square_error (MSE)函數(shù),其中,RMSE僅僅是MSE的平方根。要了解更多不同的評(píng)價(jià)指標(biāo),你可以看看這篇文章。
由于你只是想要考慮測(cè)試數(shù)據(jù)集中的預(yù)測(cè)評(píng)分,因此,使用prediction[ground_truth.nonzero()]篩選出預(yù)測(cè)矩陣中的所有其他元素。
基于內(nèi)存的算法事很容易實(shí)現(xiàn)并產(chǎn)生合理的預(yù)測(cè)質(zhì)量的。
基于內(nèi)存的CF的缺點(diǎn)是,它不能擴(kuò)展到真實(shí)世界的場(chǎng)景,并且沒有解決眾所周知的冷啟動(dòng)問題,也就是當(dāng)新用戶或新產(chǎn)品進(jìn)入系統(tǒng)時(shí)?;谀P偷腃F方法是可擴(kuò)展的,并且可以比基于內(nèi)存的模型處理更高的稀疏度,但當(dāng)沒有任何評(píng)分的用戶或產(chǎn)品進(jìn)入系統(tǒng)時(shí),也是苦不堪言的。
丨基于模型的協(xié)同過濾
基于模型的協(xié)同過濾是基于矩陣分解(MF),它已獲得更大的曝光,它主要是作為潛變量分解和降維的一個(gè)無監(jiān)督學(xué)習(xí)方法。矩陣分解廣泛用于推薦系統(tǒng),其中,它比基于內(nèi)存的CF可以更好地處理與擴(kuò)展性和稀疏性. MF的目標(biāo)是從已知的評(píng)分中學(xué)習(xí)用戶的潛在喜好和產(chǎn)品的潛在屬性(學(xué)習(xí)描述評(píng)分特征的特征),隨后通過用戶和產(chǎn)品的潛在特征的點(diǎn)積預(yù)測(cè)未知的評(píng)分。
當(dāng)你有一個(gè)非常稀疏的多維矩陣時(shí),通過進(jìn)行矩陣分解可以調(diào)整用戶-產(chǎn)品矩陣為低等級(jí)的結(jié)構(gòu),然后你可以通過兩個(gè)低秩矩陣(其中,每行包含該本征矢量)的乘積來代表該矩陣。你通過將低秩矩陣相乘,在原始矩陣填補(bǔ)缺少項(xiàng),以調(diào)整這個(gè)矩陣,從而盡可能的近似原始矩陣。
讓我們計(jì)算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歲),位置和性別,而對(duì)于電影特性,它學(xué)習(xí)到年份,導(dǎo)演和演員是最重要的?,F(xiàn)在,如果你看看你所存儲(chǔ)的信息,其中并沒有年份這樣的特性,但該模型可以自己學(xué)習(xí)。重要方面是,CF模型僅使用數(shù)據(jù)(user_id, movie_id, rating)來學(xué)習(xí)潛在特征。如果只有少數(shù)可用的數(shù)據(jù),那么基于模型的CF模式將預(yù)測(cè)不良,因?yàn)檫@將更難以學(xué)習(xí)潛在特征。
同時(shí)使用評(píng)分和內(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)出更高的精度:它們有能力更好的解決冷啟動(dòng)問題,因?yàn)槿绻銢]有一個(gè)用戶或者一個(gè)產(chǎn)品的評(píng)分,那么你可以使用該用戶或產(chǎn)品的元數(shù)據(jù)進(jìn)行預(yù)測(cè)。混合推薦系統(tǒng)將在未來的教程中介紹。
丨SVD
一個(gè)眾所周知的矩陣分解方法是奇異值分解(SVD)。通過使用奇異值分解,協(xié)同過濾可以被近似一個(gè)矩陣X所制定。Netflix Prize比賽中的獲勝隊(duì)伍使用SVD矩陣分解模型來生成產(chǎn)品建議,更多的信息,推薦閱讀文章:Netflix推薦:5星之外和Netflix Prize和SVD。
一般的方程可以表示為:
給定m x n矩陣X:
· U是一個(gè)(m x r)正交矩陣
· S是一個(gè)對(duì)角線上為非負(fù)實(shí)數(shù)的(r x r)對(duì)角矩陣
· V^T是一個(gè)(r x n)正交矩陣
S的對(duì)角線上的元素被稱為X的奇異值。
矩陣X可以被分解成U,S和V。U矩陣表示對(duì)應(yīng)于隱藏特性空間中的用戶的特性矩陣,而V矩陣表示對(duì)應(yīng)于隱藏特性空間中的產(chǎn)品的特性矩陣。
現(xiàn)在,你可以通過U, S和V^T的點(diǎn)積進(jìn)行預(yù)測(cè)了。
草草解決只有相對(duì)較少為人所知的問題是非常容易出現(xiàn)的過度擬合。SVD可能會(huì)非常緩慢,并且計(jì)算成本比較高。更近期的工作通過應(yīng)用交替最小二乘或隨機(jī)梯度下降最小化平方誤差,并使用正則項(xiàng)以防止過 ??度擬合。你可以看到我們之前的一個(gè)關(guān)于隨機(jī)梯度下降的教程,以獲取更多詳細(xì)信息。用于CF的交替最小二乘和隨機(jī)梯度下降的方法將在未來的教程中介紹。
總結(jié)一下:
· 在這篇文章中,我們講了如何實(shí)現(xiàn)簡(jiǎn)單的協(xié)同過濾方法,包括基于內(nèi)存的CF和基于模型的CF。
· 基于內(nèi)存的模型是基于產(chǎn)品或用戶之間的相似性,其中,我們使用余弦相似性。
· 基于模型的CF是基于矩陣分解,其中,我們使用SVD來分解矩陣。
· 構(gòu)建在冷啟動(dòng)的情況下(其中,對(duì)于新用戶和新產(chǎn)品來說,數(shù)據(jù)不可用)表現(xiàn)良好的推薦系統(tǒng)仍然是一個(gè)挑戰(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ù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03