張玉葉
摘? 要: 大數(shù)據時代的推薦系統(tǒng)可以幫助用戶從海量信息中高效地獲取自己的潛在需求,是大數(shù)據在互聯(lián)網領域的典型應用。文章介紹了利用Python語言實現(xiàn)的一個基于物品的協(xié)同過濾算法推薦系統(tǒng),給出了系統(tǒng)的基本架構、系統(tǒng)的具體實現(xiàn)過程及相應代碼。
關鍵詞: 大數(shù)據; 推薦系統(tǒng); 協(xié)同過濾; Python
中圖分類號:TP391.1? ? ? ? ? 文獻標志碼:A ? ?文章編號:1006-8228(2019)06-59-04
Abstract: The recommendation system in the big data era can help users to obtain their potential needs efficiently from the huge amount of information, which is a typical application of big data in the Internet field. A recommendation system based on object-based collaborative filtering algorithm and implemented with Python language is introduced in this paper, and the basic architecture of the system, the specific implementation process of the system, and the corresponding code are given.
Key words: big data; recommendation system; collaborative filtering; Python
0 引言
隨著網絡技術的飛速發(fā)展,網絡信息量也快速增長,為了更好地滿足用戶的個性化需求,各種推薦系統(tǒng)應運而生,它通過研究用戶的興趣偏好,自動建立起用戶和信息之間的聯(lián)系,從而幫助用戶從海量信息中去發(fā)掘自己潛在的需求。推薦系統(tǒng)的關鍵是推薦算法,常用的推薦算法主要有專家推薦、基于統(tǒng)計的推薦、基于內容的推薦和協(xié)同過濾推薦等。Python語言是一開源、免費、跨平臺的解釋型高級動態(tài)編程語言,其強大的功能及使用的簡潔方便使其成為互聯(lián)網應用系統(tǒng)開發(fā)的首選語言。本文利用Python語言實現(xiàn)了一個基于物品的協(xié)同過濾算法的推薦系統(tǒng)。
1 推薦系統(tǒng)
推薦系統(tǒng)是建立在海量數(shù)據挖掘基礎上的,通過分析用戶的歷史數(shù)據來了解用戶的需求和興趣,從而將用戶感興趣的信息、物品等主動推薦給用戶,其本質是建立用戶與物品之間的聯(lián)系。一個完整的推薦系統(tǒng)通常包含三個模塊:用戶建模模塊、推薦對象建模模塊和推薦算法模塊。推薦系統(tǒng)首先對用戶建模,根據用戶的行為數(shù)據和屬性數(shù)據來分析用戶的興趣和需求,同時也對推薦對象進行建模。接著,基于用戶特征和物品對象特征,采用推薦算法計算得到用戶可能感興趣的物品,然后根據推薦場景對推薦結果進行一定的推薦和調整,最終將推薦結果展示給用戶,其基本架構如圖1所示[1]。
2 協(xié)同過濾算法
協(xié)同過濾算法分為基于用戶的協(xié)同過濾算法和基于物品的協(xié)同過濾算法[1]。
基于用戶的協(xié)同過濾算法(簡稱UserCF),通過不同用戶對物品的評分來評測用戶之間的相似性,基于用戶之間的相似性做出推薦。簡單來講就是:給用戶推薦和他興趣相似的其他用戶喜歡的物品。
基于物品的協(xié)同過濾算法(簡稱ItemCF),通過用戶對不同物品的評分來評測物品之間的相似性,基于物品之間的相似性做出推薦。簡單來講就是:給用戶推薦和他之前喜歡的物品相似的物品。
UserCF算法和ItemCF算法思想類似,其實現(xiàn)過程也基本類似,唯一不同的是一個是計算用戶相似度,一個是計算物品相似度。
UserCF算法和ItemCF最主要的區(qū)別在于:UserCF推薦的是那些和目標用戶有共同興趣愛好的其他用戶所喜歡的物品,ItemCF算法則推薦那些和目標用戶之前喜歡的物品類似的其他物品。因此,UserCF算法的推薦更偏向社會化,適合應用于新聞推薦、微博話題推薦等應用場景;而ItemCF算法的推薦則更偏向于個性化,適合應用于電子商務、電影、圖書等應用場景。
3 推薦系統(tǒng)的設計與實現(xiàn)
3.1 推薦算法
本推薦系統(tǒng)以一電影推薦系統(tǒng)為例,因此采用基于物品的協(xié)同過濾算法(簡稱ItemCF)?;谖锲返膮f(xié)同過濾算法是給目標用戶推薦那些和他們之前喜歡的物品相似的物品。此算法并不利用物品的內容屬性計算物品之間的相似度,而主要通過分析用戶的行為記錄來計算物品之間的相似度。該算法基于的假設是:物品I1和物品I2具有很大的相似度,是因為喜歡物品I1的用戶大多也喜歡物品I2。ItemCF算法主要包括兩步。
step1:計算物品之間的相似度
計算相似度的算法有很多,如泊松相關系數(shù)、余弦相似度等,在此可直接利用同現(xiàn)矩陣[2,3]進行計算。
設有三個用戶u1、u2、u3和四件物品I1、I2、I3、I4,每個用戶喜歡的物品列表如圖2中的(a)所示。
對每個用戶u喜歡的物品列表都建立一個物品同現(xiàn)矩陣Mu,如用戶u1喜歡物品I1和I3,則其物品同現(xiàn)矩陣中Mu1[I1][I3]和Mu1[I3][I1]的值為1,依次類推,由用戶喜歡的物品列表可得到每個用戶的物品同現(xiàn)矩陣Mu,如圖2中的(b)所示。然后將所有用戶的物品同現(xiàn)矩陣相加得到最終的所有用戶物品同現(xiàn)矩陣M,如圖2中的(c)所示。
根據物品的同現(xiàn)矩陣和用戶的歷史行為,來求解推薦評分,然后根據推薦評分給用戶生成推薦列表。推薦評分=物品同現(xiàn)矩陣*用戶評分向量[4]。
3.2 數(shù)據準備
在此以MovieLens(http://grouplens.org/datasets/movielens)作為本推薦系統(tǒng)中的實驗數(shù)據。MovieLens是GroupLens Research實驗室的一個非商業(yè)性質、以研究為目的的實驗性項目,采集了一組從20世紀90年代末到21世紀初的電影評分數(shù)據,包含大小不同的數(shù)據集,每個數(shù)據集中包括電影信息數(shù)據及電影評分記錄等。
本系統(tǒng)采用MovieLens 1M數(shù)據集。該數(shù)據集中存放電影評分記錄的文件是“ratings.csv”,其數(shù)據格式如圖3所示,每一行用逗號分隔的四個數(shù)據分別表示用戶ID、電影ID、評分和評分時間戳,本推薦系統(tǒng)中只使用前三個數(shù)據元素。
數(shù)據集中存放電影信息數(shù)據的文件是“movies.csv”,其數(shù)據格式如圖4所示,系統(tǒng)中主要使用前兩個數(shù)據:電影ID和電影名稱(年份)。
基于此數(shù)據集,如何通過已知的用戶評分記錄來預測未知的用戶評分,通過此評分來預測用戶是否會喜歡某部電影,從而決定是否給用戶推薦該電影。實現(xiàn)時采用Top-N推薦,即為目標用戶提供一個長度為N的推薦列表。
3.3 數(shù)據處理
首先,將所需數(shù)據讀入并進行一定的預處理,將用戶評分記錄的前3項(用戶ID、電影ID、評分)和電影信息文件的前2項(電影ID和電影名稱)依次讀出并放到字典中。評分記錄信息用于求解電影相似度,電影信息用于推薦結果展示。其Python代碼[4-6]如下:
3.4 建立同現(xiàn)矩陣
同現(xiàn)矩陣是一稀疏矩陣,在此采用Python內置序列字典來存放,可有效提高算法空間和時間效率。其實現(xiàn)代碼如下:
3.5 計算推薦評分及推薦結果
當同現(xiàn)矩陣計算完成后,根據同現(xiàn)矩陣和用戶評分來計算用戶對未觀看過的相似電影的推薦評分(也即興趣度),根據推薦評分高低來針對用戶進行電影推薦。其實現(xiàn)代碼如下:
3.6 輸出推薦結果
根據需要來輸出某個用戶的Top-N推薦結果,其代碼如下:
調用主函數(shù)main("ratings.csv","movies.csv","2",10)對用戶2,為其推薦10部未曾看過的電影,得到的推薦結果如圖5所示。
4 結束語
推薦系統(tǒng)可幫助用戶從海量信息中高效地獲取自己潛在需求,是大數(shù)據在互聯(lián)網領域的典型應用,通過分析用戶的歷史記錄來了解用戶的喜好,從而主動為用戶推薦其感興趣的信息,滿足用戶的個性化需求。本文利用Python語言實現(xiàn)的基于物品的協(xié)同過濾算法的電影推薦系統(tǒng)具有普適性,在該系統(tǒng)基礎上稍加修改,就可應用于音樂推薦系統(tǒng)、圖書推薦系統(tǒng)、商品推薦系統(tǒng)等,具有廣闊的應用前景。
參考文獻(References):
[1] [美]查魯.C.阿加沃爾.推薦系統(tǒng):原理與實踐[M].機械工業(yè)出版社,2018.
[2] 項亮.推薦系統(tǒng)實踐[M].人民郵電出版社,2012.
[3] 林子雨.大數(shù)據技術原理與應用[M].人民郵電出版社,2017.
[4] 王建芳.機器學習算法實踐[M].清華大學出版社,2018.
[5] 黑馬程序員.Python實戰(zhàn)編程[M].中國鐵道出版社,2018.
[6] 董付國.Python程序設計開發(fā)寶典[M].清華大學出版社,2017.