machine learning 之 Recommender Systems

整理自Andrew Ng的machine learning 課程 week 9.算法

 

目錄:網絡

  • Problem Formulation(問題的形式)
  • Content Based Recommendations(基於內容的推薦)
  • Collaborative Filtering(協同過濾)
  • Collaborative Filtering Algorithm(協同過濾算法)
  • Vectorization: Low Rank Matrix Factorization(向量化:矩陣低秩分解)
  • Implementation Detail: Mean Normalization(具體實施:均值正則化)

 

一、Problem Formulation

推薦系統在機器學習領域是一個很流行的應用。機器學習

好比說,咱們嘗試向用戶推薦電影。咱們可使用如下定義:函數

  • $n_u$:the number of users,用戶數
  • $n_m$:the number of movies,電影數
  • $r(i,j)=1$ if user j has rated movie i,用戶j是否對電影i進行了評分
  • $y(i,j)$:rating given by user j to movie i(只有在r(i,j)=1時纔有值),用戶j對電影i的評分

 

二、Content Based Recommendations

咱們能夠定義兩個特徵$x_1$和$x_2$,分別表明電影的浪漫程度和動做程度(值在0-1之間);學習

一個預測電影評分的作法能夠是,對每個用戶作linear regression,獲得每一個用戶的$\theta^{(j)} \in R^3$(這裏自動加入了$x_0=1$),這樣對用戶j對電影i的評分的預測值就是$(\theta^{(j)})^Tx^{(i)}$;優化

  • $\theta^{(j)}$:用戶j的參數向量
  • $x^{(i)}$:電影i的特徵向量

對於用戶j,電影i,預測的評分即爲$(\theta^{(j)})^Tx^{(i)}$spa

  • $m^{(j)}$:用戶j打分的電影數目

爲了學習參數向量$\theta^{(j)}$(用戶j的參數向量),咱們做以下操做:orm

$min_{\theta^{(j)}} \quad \frac{1}{2} \sum_{i:r(i,j)=1}{(\theta^{(j)}x^{(i)}-y^{(i,j)})}^2+\frac{\lambda}{2}\sum_{k=1}^{n}{(\theta_k^{(j)})}^2$blog

這實際上是和線性迴歸的相似的損失函數同步

爲了學習全部用戶的參數向量:

$min_{\theta^{(1)},...,\theta^{(n_u)}} \quad \frac{1}{2} \sum_{j=1}^{n_u} \sum_{i:r(i,j)=1}{(\theta^{(j)}x^{(i)}-y^{(i,j)})}^2+\frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n}{(\theta_k^{(j)})}^2$

以上的損失函數和線性迴歸中的損失函數同樣,因此咱們也能夠用線性迴歸的梯度降低法去更新參數:

$\theta_k^{(j)} = \theta_k^{(j)} - \alpha \sum_{i:r(i,j)=1}  ((\theta^(j))^Tx^{(i)} - y^{(i,j)}) x_k^{(i)} \quad k=0$

$\theta_k^{(j)} = \theta_k^{(j)} - \alpha (\sum_{i:r(i,j)=1} ((\theta^(j))^Tx^{(i)} - y^{(i,j)}) x_k^{(i)} + \lambda \theta_k^{(j)}) \quad k \neq 0$

這裏惟一與線性迴歸中的不一樣就是省略掉的常數m是不同的。

 

三、Collaborative Filtering

實際中很難去定義和計算一部電影的浪漫度和動做度,爲了解決這個問題,可使用feature finder;

能夠在以前詢問用戶對不一樣種類的電影的喜好程度,直接提供$\theta$參數;

而後就能夠經過參數推算特徵了:

$min_{x^{(1)},...,x^{(n_m)}}  \quad \frac{1}{2} \sum_{i=1}^{n_m} \sum_{j:r(i,j)=1}{(\theta^{(j)}x^{(i)}-y^{(i,j)})}^2+\frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^{n}{(x_k^{(i)})}^2$

 

你也能夠隨機的猜想一些$\theta$的值,而後用這些$\theta$的值去計算特徵的值,這樣重複的計算,最後也能夠收斂到比較好的特徵的值

 依據上述:

  • 知道了參數$\theta$,咱們能夠估計特徵x;
  • 知道了特徵x,咱們能夠估計參數$\theta$;

這就是協同過濾(Collaborative Filtering)。

 

四、Collaborative Filtering Algorithm

爲了加快計算的速度,咱們其實能夠在最小化時同步的計算參數和特徵:

$J(x,\theta) = \frac{1}{2} \sum_{(i,j):r(i,j)=1} {((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})}^2 + \frac{lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n}{(\theta_k^{(j)})}^2 + \frac{lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^n {(x^{(i)})}^2$

這個式子看起來比較複雜,其實只是結合了參數$\theta$和特徵x的損失函數,因爲算法能夠學習,因此不須要設定一個$x_0=1$,所以$x \in R^n, \theta \in R^n$;

完整算法以下:

  1. 將$x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}$初始化爲一些隨機的很小的值;(不能把它們初始化爲0,由於和神經網絡中同樣,要break symmetry,不然計算出來的特徵的值都是同樣的)
  2. 使用梯度降低(或者其餘的優化算法)最小化$J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})$,參數的更新以下:
    • $x_k^{(i)} = x_k^{(i)} - \alpha{(\sum_{j:r(i,j)=1} {({(\theta^{(j)})}^Tx^{(i)}- y^{(i,j)})\theta_k^{(j)}} + \lambdax_k^{(i)})}$
    • $\theta_k^{(j)} = \theta_k^{(j)} - \alpha{(\sum_{i:r(i,j)=1} {({(\theta^{(j)})}^Tx^{(i)}- y^{(i,j)})x_k^{(i)}} + \lambda\theta_k^{(j)})}$

   3. 對於一個參數爲$\theta$的用戶和特徵爲x的電影,那麼預測的評分爲$(\theta)^Tx$

 

五、Vectorization: Low Rank Matrix Factorization

爲了實現向量化的計算,公式以下:$Y=X\Theta^T$

一個m*n的矩陣的秩r若是很低,那麼這個矩陣能夠分解爲一個m*r和一個r*n的矩陣相乘(有點相似SVD分解),因此Y能夠直接分解獲得X和$\Theta$

如何定義電影i和電影j的相關度?

$||x_i-x_j||$,這個值越小,說明電影i和電影j的類似度越大。

 

六、Implementation Detail: Mean Normalization

考慮一個問題,若是一個用戶沒有給任何一部電影評分,那麼經過以前的方法計算出來的此用戶對任何一部電影的評分都會是0,這顯然是不對的,那麼如何解決這個問題呢?

實際上,咱們能夠經過Mean Normalization去處理評分矩陣,獲得一個新的評分矩陣$Y’=Y-\mu$,對這個新的矩陣利用協同過濾算法,計算出用戶參數矩陣和特徵矩陣,再進行預測評分,此時預測時須要在結果上再加上一個均值,由於咱們的評分矩陣是通過處理的,因此求預測時,也須要再把這個以前減去的均值再加回來。

相關文章
相關標籤/搜索