第十六章 推薦系統(Recommender Systems)

看到推薦系統的時候,我是很興奮的,由於我不少同窗都是走這個方向的,然而,我卻對這個方向一點都不瞭解 。。。。。。git

16.1 問題形式化

在不少企業中,推薦系統是一個很重要的營銷手段。咱們直接進入主題吧!!github

咱們從一個例子開始定義推薦系統的問題。算法

假使咱們是一個電影供應商,咱們有5部電影和 4 個用戶,咱們要求用戶爲電影打分。函數

前三部電影是愛情片,後兩部則是動做片,咱們能夠看出AliceBob彷佛更傾向與愛情片,而CarolDave彷佛更傾向與動做片。而且沒有一個用戶給全部的電影都打過度。咱們但願構建一個算法來預測他們每一個人可能會給他們沒看過的電影打多少分,並以此做爲推薦的依據。學習

下面引入一些標記:優化

n_u表明用戶的數量url

n_m表明電影的數量.net

r(i,j) 若是用戶j給電影i評過度則r(i,j)=1get

y^{(i,j)} 若是用戶j給電影i的評分產品

m_j 表明用戶j評過度的電影的總數



16.2 基於內容的推薦系統

在一個基於內容的推薦系統算法中,咱們假設對於咱們但願推薦的東西有一些數據,這些數據是有關這些東西的特徵。

在咱們的例子中,咱們能夠假設每部電影都有兩個特徵,如x_1表明電影的浪漫程度,x_2表明電影的動做程度。

則每部電影都有一個特徵向量,如x^{(1)}是第一部電影的特徵向量爲[0.9,0]下面咱們要基於這些特徵來構建一個推薦系統算法。假設咱們採用線性迴歸模型,咱們能夠針對每個用戶都訓練一個線性迴歸模型,如\theta ^{(1)}是第一個用戶的模型的參數。因而,咱們有:

\theta ^{(j)}用戶j的參數向量

x ^{(j)}電影i的特徵向量

對於用戶j和電影i,咱們預測評分爲:(\theta ^{(j)})^Tx^{(i)}

代價函數:

針對用戶j,該線性迴歸模型的代價爲預測偏差的平方和,加上正則化項:

若是咱們要用梯度降低法來求解最優解,咱們計算代價函數的偏導數後獲得梯度降低的更新公式爲:


16.3 協同過濾

在講公式以前,我查了一下百度百科,百度百科對於協同過濾的解釋以下:

接下來,咱們繼續跟着吳恩達老師學習協同過濾。

在以前的基於內容的推薦系統中,對於每一部電影,咱們都掌握了可用的特徵,使用這些特徵訓練出了每個用戶的參數。相反地,若是咱們擁有用戶的參數,咱們能夠學習得出電影的特徵。

可是若是咱們既沒有用戶的參數,也沒有電影的特徵,這兩種方法都不可行了。協同過濾算法能夠同時學習這二者。

咱們的優化目標便改成同時針對x\theta 進行。

對代價函數求偏導數的結果以下:

注:在協同過濾從算法中,咱們一般不使用方差項,若是須要的話,算法會自動學得。

協同過濾算法使用步驟以下:

一、初始x^{(1)},x^{(2)},...,x^{(n_m)},\theta ^{(1)},\theta ^{(2)},...,\theta ^{(n_u)}爲一些隨機小值

二、使用梯度降低算法最小化代價函數

三、在訓練完算法後,咱們預測(\theta ^{(j)})^Tx^{(i)}爲用戶j給電影i的評分。

最後得到特徵矩陣。

經過這個學習過程得到的特徵矩陣包含了有關電影的重要數據,這些數據不老是人能讀懂的,可是咱們能夠用這些數據做爲給用戶推薦電影的依據。

例如,若是一位用戶正在觀看電影x^{(i)},,咱們能夠尋找另外一部電影x^{(j)},依據兩部電影的特徵向量之間的距離||x^{(i)}-x^{(j)}||的大小。


16.4 協同過濾算法

協同過濾優化目標:

用語言來總結一下,若是你有特徵x,你能夠用來最小化問題來估計\theta ,若是你有\theta ,你能夠用來估計x,,咱們如今就是要不停得重複計算,先用x解出\theta 再用\theta 解出x。

如今咱們有一種方法,協同過濾,能夠不斷地計算x和\theta ,同時獲得二者,咱們要作的是將這兩個優化目標函數結合爲一個優化目標函數J(上圖),就能夠協同計算二者了。


16.5 向量化:低秩矩陣分解

舉個例子:

1.當給出一件產品時,你可否找到與之相關的其它產品。

2.一位用戶最近看上一件產品,有沒有其它相關的產品,你能夠推薦給他。

我將要作的是:實現一種選擇的方法,寫出協同過濾算法的預測狀況。

咱們有關於五部電影的數據集,我將要作的是,將這些用戶的電影評分,進行分組並存到一個矩陣中。

咱們有五部電影,以及四位用戶,那麼這個矩陣Y就是一個5行4列的矩陣,它將這些電影的用戶評分數據都存在矩陣裏:

推出評分:

找到相關影片:

如今既然你已經對特徵參數向量進行了學習,那麼咱們就會有一個很方便的方法來度量兩部電影之間的類似性。例如說:電影i有一個特徵向量x^{(i)},你是否能找到一部不一樣的電影j,保證兩部電影的特徵向量之間的距離x^{(i)}x^{(j)}很小,那就能頗有力地代表電影i和電影j在某種程度上有類似,至少在某種意義上,某些人喜歡電影i,或許更有可能也對電影j感興趣。總結一下,當用戶在看某部電影i的時候,若是你想找5部與電影很是類似的電影,爲了能給用戶推薦5部新電影,你須要作的是找出電影j,在這些不一樣的電影中與咱們要找的電影i的距離最小,這樣你就能給你的用戶推薦幾部不一樣的電影了。

經過這個方法,但願你能知道,如何進行一個向量化的計算來對全部的用戶和全部的電影進行評分計算。同時但願你也能掌握,經過學習特徵參數,來找到相關電影和產品的方法。


參考:https://baike.baidu.com/item/%E5%8D%8F%E5%90%8C%E8%BF%87%E6%BB%A4/4732213?fr=aladdin

https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

相關文章
相關標籤/搜索