1 專案背景及意義
當前互聯網資訊越來越多,呈現指數增長的趨勢,視頻服務網站是互聯網的重要組成部分,往往都存著數以萬計的電影資源[1],用戶打開電影網站時也許沒有明確的目標,使得查找時所涉及的電影資源數量仍然巨大,并且很難輕松獲得符合自己興趣的新資源,在這種情況下,通過對用戶行為資訊和電影資源資訊進行關聯性分析來預測并推薦與用戶喜好相符的電影,會很大程度上增加用戶的觀看興趣,視頻服務已經成為用戶瀏覽互聯網時最關注的服務之一,因而,提升在線視頻服務的用戶體驗具有重要的研究價值[2],而視頻服務中的電影推薦系統可以通過提高推薦演算法的準確度來增加用戶的點擊率、購買率或觀看時間等,從而也給視頻服務商帶來更多的經濟收益,一個好的推薦系統,能自動挖掘用戶的興趣點,引導用戶發現自己的資訊需求,同時,通過為用戶提供個性化的推薦服務從而與用戶建立聯系,使得用戶對推薦系統產生依賴,
基于上述意義,本文基于傳統的協調過濾演算法結合設計了一款電影推薦系統,
2 相關技術介紹
2.1協同過濾演算法
協同過濾( CF)演算法是推薦系統中最為經典的演算法,包括基于用戶的協同過濾演算法( User-CF)和基于物品的協同過濾演算法( Item- CF) [3],協同過濾演算法可以通過獲得用戶的觀看行為資料作為隱性反饋或者評分記錄的資料作為顯性反饋,利用一定的演算法預測出用戶沒有觀看過但可能喜歡的電影并達到推薦給用戶觀看的目的[4],
本文所寫的推薦系統為基于物品的協調過濾演算法的電影推薦系統,基于物品的協調過濾演算法的主要步驟如下 :
(1)構建物品-用戶操作行為矩陣;
(2)計算物品之間相似度;
(3)獲取推薦結果,
2.2 爬蟲技術
爬蟲是一種能自動運行的程式,其功能是從網路上爬取到特定的資料,Scrapy 是一個基于 Python 的開源爬蟲框架,包含多種中間件介面,目前 Scrapy 已廣泛應用于資料挖掘、檢測和自動化測驗等專案上,采用 Scrapy 爬取豆瓣網上的電影資訊作為本系統個性化推薦的基礎資料,
Scrapy原理圖如下:

2.3 MapReduce框架
MapReduce 是對大資料進行并行處理的計算平臺和框架,即使用戶并不十分了解分布式系統的底層細節,也能比較容易地開發出并行的應用程式,并將其應用在各類廉價的計算機機群上,用于大規模資料的并行計算,完成海量資料的處理任務,在進行資料處理時,一些較復雜或者是在大規模集群上運行的并行計算,MapReduce 會將它們抽象到 Map和 Reduce 兩個函式上,其中,Map 完成指定資料集上獨立元素的操作,生成中間結果“鍵值”對;Reduce 則完成“規約”中間結果中相同“鍵”的所有“值”的操作,最終生成運算結果,
MapReduce 作業流程:

2.4 SpringMVC
SpringMVC是一種基于Java,實作了Web MVC設計模式,請求驅動型別的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦,基于請求驅動指的就是使用請求-回應模型,框架的目的就是幫助我們簡化開發,SpringMVC也是要簡化我們日常Web開發,
MVC設計模式的任務是將包含業務資料的模塊與顯示模塊的視圖解耦,這是怎樣發生的?在模型和視圖之間引入重定向層可以解決問題,此重定向層是控制器,控制器將接收請求,執行更新模型的操作,然后通知視圖關于模型更改的訊息,
3 推薦系統實作
3.1 系統開發環境
本系統是基于 Liunx 系統平臺實作的電影推薦,系統使用基于物品的協同推薦演算法和Map Reduce框架,
Liunx 作業系統是一種免費使用和自由傳播的類 UNIX 作業系統,其內核由林納斯·托瓦茲于 1991 年 10 月 5 日首次發布,是一個基于 POSIX 的多用戶、多任務、支持多執行緒和多 CPU 的作業系統,它能運行主要的 Unix 工具軟體、應用程式和網路協議,是一個性能穩定的多用戶網路作業系統,
3.2 推薦系統整體架構
本系統主要由三個模塊組成:資料采集、資料處理、結果展示,

3.3 資料采集
該系統所用原始資料為python爬蟲爬取豆瓣網上用戶ID、對電影的評分、電影型別等資料,共三千多條,

為減輕作業量,本系統選取用戶ID、電影以及評分三個引數來完成對推薦系統的設計,從以上三千多條原始資料中選取了204條資料,并僅保留用戶ID、電影和評分三個屬性,選取的資料中共包含48部電影和52個用戶,為了后續編程模型實作的方便,我們對電影編號1-48,處理后的資料如下:

對選取的資料做散點圖以觀察其分布特征:

由圖可知選擇的資料分布的比較均勻,
3.4 資料處理
將圖所示資料通程序式從本地上傳至hdfs,然后使用基于物品的協同過濾演算法對資料進行處理,
實作步驟:
(1)得到用戶評分向量:map函式以用戶ID作為key,電影ID和評分拼接形成的字串作為value,將該鍵值對傳遞給reduce函式,reduce函式將具有相同鍵值的value通過逗號拼接,
(2)由用戶評分向量得到共現矩陣:map函式對(1)得到的一行資料進行處理,將任意兩個電影的拼接作為key,以1作為value將鍵值對傳遞給reduce函式,reduce函式將k值相同的value相加即得到共現矩陣,
(3)對用戶評分向量處理,(1)的輸出即為(3)的輸入,僅使用map函式以電影ID為key,以用戶ID和評分的拼接作為key,
(4)共現矩陣與用戶評分向量矩陣相乘,
(5)對(4)得到的結果進行過濾和排序:過濾掉用戶已經打過分的;按推薦權重倒序排列,得到最終結果,
Hadoop集群上運行程序展示:

查看程式運行結果:
產生結果1424條資料,

3.5 結果展示
網頁端我們在idea使用SpringMVC框架撰寫,共展示了三個頁面:原始資料特征頁面、原始資料集頁面、推薦結果頁面,在推薦結果頁面我們對程式執行結果進行篩選顯示了對每個用戶最推薦的三部電影,
網頁端展示

網頁端查看原始資料

網頁端查看推薦結果

4 總結
本系統實作了簡單的基于協同過濾演算法的電影推薦系統,并利用python爬取了豆瓣的真實資料進行分析,最后通過創建springMVC專案對結果進行了展示,但是該系統仍存在很多不足,撰寫的協同過濾演算法僅結合了用戶對電影的評分進行分析,比較簡單,不足以滿足用戶的需求,因此后續我將繼續研究協同過濾演算法,將用戶對電影的評價等其他因素也納入演算法中,完成推薦效果更好的電影推薦系統,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404092.html
標籤:其他
上一篇:RabbitMQ安裝及配置
下一篇:Hadoop2.7.2集群搭建
