推薦系統

本欄目(Machine learning)包括單參數的線性迴歸、多參數的線性迴歸、Octave Tutorial、Logistic Regression、Regularization、神經網絡、機器學習系統設計、SVM(Support Vector Machines 支持向量機)、聚類、降維、異常檢測、大規模機器學習等章節。內容大多來自Standford公開課machine learning中Andrew老師的講解和其餘書籍的借鑑。php

第十二講. 推薦系統——Recommender Systems
算法

 

===============================編程

(一)、Problem Formulation網絡

(二)、基於內容的推薦算法數據結構

(三)、協同濾波推薦算法機器學習

 

(四)、算法的矩陣實現函數

 

=====================================學習

 (一)、Problem Formulation優化

 

什麼狀況下須要設計一個所謂的推薦系統?
舉例說明,以下圖,用戶給電影打分的例子。
假如咱們有4個用戶,5部電影。分數等級劃分爲5個,1~5顆星,分別對應打分1~5,分數越高代表用戶越喜歡,問號表示當前用戶沒有給當前電影打分。
r(i, j)=1 表示用戶j已經給電影i打過度了,不然表示未打分;
y(i, j) 表示用戶j給電影i打的分數,固然是當r(i, j)=1時纔有效。

按照下圖的例子,咱們來簡單說明下推薦系統是用來幹嗎的。經過圖中表格中的數據咱們能夠獲得如下判斷:
一、Alice和Bob給前三部影片打分較高,後兩部較低;Carol和Dave則相反
二、前三部影片或許屬浪漫愛情片,後三部屬動做冒險片。(固然主要是經過影片名稱猜想的)
三、根據表格中的數據,咱們不難推斷,Alice和Bob更喜歡浪漫愛情片,而Carol和Dave則更喜歡動做冒險片
四、由此,咱們能夠大膽猜想,Alice給第三部影片的打分多是5,Bob給第二部影片的打分多是4.5,Carol給第二部影片的打分多是0,Dave對第三部影片的打分也多是0,而給第五部影片的打分則接近4.

以上是人根據數據進行的推斷,那麼咱們但願計算機也能夠作這件事情,也就是經過分析表格中的數據給用戶推薦他可能會喜歡的電影、猜想用戶的喜愛等等。可讓計算機完成這個任務的系統,就起名叫作推薦系統。spa

 

(二)、基於內容的推薦算法

所謂基於內容,是指咱們假設已知每部電影的特徵描述。好比,第i部電影  的特徵有兩維,分別描述其浪漫愛情的成份和動做冒險的成份。若是加上偏置項1,令=1,則以下圖所示,描述第一部電影《Love at last》的特徵向量應寫做,同理描述第四部電影《Nonstop car chases》的特徵爲。已知電影內容的描述向量,咱們即可以設計一個基於內容的推薦算法了。
算法的目標是:學習每一個用戶的喜愛,即爲每位用戶學習一個特徵向量,來描述該用戶對不一樣內容電影的喜歡程度,固然用戶的特徵向量維度是和電影的一致的。正以下圖中的 formulation,咱們能夠用 來描述用戶j的喜愛,那麼天然對應 的第2項應接近爲5,而第3項接近爲0(此處暫不考慮尺度問題,並忽略第1項偏置項),由於從表格數據中看用戶Alice更喜歡浪漫愛情片而非動做冒險片。

有了以上分析之後,咱們就能夠對上述問題建模了。咱們但願  接近用戶j對電影i的真實打分 y(i, j) ,就有了下面的目標函數:

當有多個用戶時,就是對每一個用戶分別學習  向量了。能夠看到,基於內容的推薦算法的目標函數長得有點像線性迴歸的目標函數,其實當只考慮一個用戶時,咱們確實是在嘗試學習一個線性迴歸模型,爲每一個用戶擬合一條「評分-電影特徵「的曲線。

 

目標函數的解法:
通常採用梯度降低法。迭代公式也相似線性迴歸目標函數的求解,以下:

 

(三)、協同濾波推薦算法

上一節中的基於內容的推薦算法,咱們假設電影的特徵描述是已知的,可是每每咱們獲得這個已知量是比較難的,或者是不許確的。而咱們這節要介紹的協同濾波推薦算法,能夠自動獲取電影的特徵描述,而不需人工標註。

 

1、未知電影的特徵描述,但已知用戶的喜愛特徵
下圖描述了已知  未知 x 的狀況:

這種狀況下,咱們能夠像上一節的基於內容的模型同樣,目標函數是同樣的,只是求解的變量變了,以下:

 

2、當兩者都未知時,便採用協同濾波算法
若是電影的特徵描述和用戶的喜愛描述都沒有,咱們即可採用協同濾波的推薦算法。該算法的思想以下:
既然 x 和 ,已知其中一個均可以估計出另外一個,那麼當兩個都未知時,咱們只需給兩者中的任意變量賦一個初值,而後求解另外一個,而後再更新這個變量,再求解另外一個變量,這樣循環往復(以下圖所示),直到目標函數收斂。

3、協同濾波算法
瞭解了協同濾波推薦算法的原理之後,咱們就能夠有簡單的算法設計思路了。

 

一、目標函數

 

二、算法流程

 

 

(四)、算法的矩陣實現

本節簡單介紹一下上述算法的矩陣表示方法,知道這個能夠幫助咱們理解該算法線性代數層面上的矩陣或向量表達,從而在實際應用中快速編程實現算法。

 

1、算法的矩陣表示
以下圖,咱們能夠把用戶的評分,即訓練數據的ground truth,放在一個大的Y矩陣裏保存下來

而預測結果用矩陣表示則以下:



將右側矩陣轉化成矩陣乘積的形式,以下:


寫成這種矩陣乘積的形式之後,就便於用程序語言實現算法了

 

2、電影相關性
對模型以及數據矩陣化或者向量化表達之後,咱們再探討計算電影相關性的問題,就方便多了。
思想很簡單:
咱們上面已經介紹過用向量 x 來描述電影的內容、屬性等,那麼 x 就能夠做爲電影的特徵向量。兩個向量差的模值、範數等,均可以用來描述兩部電影的類似度、相關性。so easy~

 

 

3、均值向量規範化
這是一個實現算法的小的技術細節問題,下面咱們來簡單闡述一下。

一、Problem Motivation
先來講說提出「均值向量規範化」這個技術細節的動機。以下圖所示:


當第5個用戶 Eve 對全部電影都沒有評價時,r(i, 5) 所有是0。因此當j=5時目標函數的第一項不存在,即爲0。優化問題就變成了使上圖公式的最後一項最小,獲得的解即是  的全部項均爲0,則與任意 x 向量相乘的結果也均爲0。這不是咱們想要的,這樣的學習和預測結果都是毫無心義的。

二、用均值向量規範化來解決上述問題
具體以下圖:


(1)計算均值向量:計算每部電影的平均得分(沒打分的問號處不計算在內),獲得五部電影的平均得分向量。
(2)均值向量規範化:而後用分數矩陣Y減去該向量,獲得上圖右側的新矩陣Y。
(3)訓練:將新的Y矩陣做爲訓練數據,學習 x 和 theta。
(4)預測:與以前不一樣的是,這時預測須要從新加上均值向量:
例如,學習獲得的用戶 Eve 的特徵向量,元素仍然所有爲0,可是由於要加上均值向量計算評分,因此預測結果天然不會是0了。

分析說明:這樣作的實際結果是,預測出來的用戶Eve對電影的評分,就等於其餘用戶對電影的平均打分。可想而知,這是合乎常理的,由於當你什麼都不知道的時候,假設數據是呈均勻分佈的,或許是個不錯的先驗。

相關文章
相關標籤/搜索