當前位置:
首頁 > 最新 > 基於深度學習的協同過濾電影推薦系統

基於深度學習的協同過濾電影推薦系統

設計思路

整個系統分為前端以及後端兩部分。

1. 前端主要使用的是基於 PythonWeb 中的 Flask 框架,用 html + css 來開發,頁面最終用於展示推薦結果。

2. 後端通過接受前端推薦發送過來的數據用 Python 進行處理,利用 autoencoder 模型通過大數據訓練來預測用戶對電影的 missing 評分值,同時利用輸入與輸出的損失來優化模型,最後進行推薦。

3. 重新用基於皮爾遜演算法以及餘弦相似度演算法預測用戶對未曾看過的電影的評分來進行混合推薦。

4. 將2,3中的結果進行對比分析。

基於聚類和協同過濾推薦

整體流程圖如下

(其中涉及到的協同過濾介紹網上相關內容很多,此處不贅述,也可進去地址詳細查看)

深度學習

在數學中,一個常見的數學任務是擬合,即用合適的曲線來揭示樣本點隨著自變數的變化關係。深度學習的目的也是如此,但這時的樣本點是由向量,矩陣等組成的廣義點對(A,B),同時(A,B)之間的關係十分複雜,很難用一個簡單的函數去表示。此時便可以使用多層神經網路來表示這樣的關係,它的本質是一個多層複合的函數。其複合關係圖示如下:

Autoencoder是一個無監督學習模型,它用反向傳播演算法使模型的輸出儘可能逼近輸入,利用 Autoencoder 可以預測用戶對物品所 missing 的評分值,再通過計算輸入與輸出之間的損失值來優化模型,最後 user-item 矩陣的所 missing 的評分值通過模型的輸出來預測進而來為目標用戶作出推薦。Autoencoder 網路結構如下圖:

Autoencoder 學習模型

網路中最左側的節點是輸入層,最右側的一列神經元是輸出層。輸出層的神經元數和輸入層神經元的數是相同的。隱藏層的神經元數少於輸入和輸出層。 Autoencoder 的作用是,將輸入樣本壓縮到隱藏層,再在輸出端重建樣本。最後它的輸出層儘可能接近輸入層。

Autoencoder 正是為了儘可能構造一個恆等函數使得它的輸出儘可能等於輸入,為了使這個它有可行性,我們引入了稀疏性的限制,即如果神經元的輸出接近於1的時候認為它是激活的,接近0的時候認為它是被抑制的,則使得神經元大部分時間都是處於被抑制的限制則稱作稀疏性限制。

以上是深度學習中應用於此系統比較關鍵的基礎知識點,其餘可在博客中查看。

系統實現

簡單製作一個 web 端,從 MovieLens 下載10萬條數據用於測試。

協同過濾推薦結果

第一次輸入對前 50 部電影的評分值,得到推薦結果。第二次輸入預設其中一項來進行驗證即可。

深度學習推薦結果

當g(·)為 Sigmoid 函數,f(·)為 Identity 函數,Adam 優化演算法時:

( g 為激勵函數, f 為解碼函數)

顯然,學習傳播次數到一定一次後, Cost 值和 RMSE 值趨於較為穩定的最小值,此時將得到較為準確的推薦結果。不同的激勵函數以及解碼函數對結果有一定的影響,且部分函數得不到推薦結果,這是由函數模型決定的,至於原因此處不詳細張開,可學習對應函數來分析原因比較來得出最優函數。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 塵封舊夢 的精彩文章:

TAG:塵封舊夢 |