1. 程式人生 > >吳恩達機器學習(十四)推薦系統(基於梯度下降的協同過濾演算法)

吳恩達機器學習(十四)推薦系統(基於梯度下降的協同過濾演算法)

目錄

0. 前言

學習完吳恩達老師機器學習課程的推薦系統,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。

如果這篇文章對你有一點小小的幫助,請給個關注喔~我會非常開心的~

0. 前言

在推薦系統中,主要有兩種方法,基於內容的推薦演算法協同過濾演算法,此文章採用電影推薦作為例子,初始作如下定義:

  • n_{u} --- 使用者數量
  • n_{m} --- 電影數量
  • r(i,j)=1 --- 使用者 j 對電影 i 進行了評價
  • y(i,j) --- 使用者 j 對電影 i 的評分
  • m^{(j)} --- 使用者 j 評價了的電影數量
  • \theta^{(j)} --- 擬合用戶 j 評價電影的曲線引數
  • n --- 電影的特徵數量

推薦系統的目標,就是通過使用者已經評價的電影和電影的特徵,預測使用者未評價的電影的評分,由此進行推薦。

1. 基於內容的推薦演算法(Content-based recommendations)

給出如下例子(圖源:吳恩達機器學習),基於內容的推薦演算法已知每部電影的特徵值

對於使用者 j ,每一部的電影的特徵為 x ,使用者的評分為 y ,用資料集 \{x^{(1)},y^{(1)}\},...,\{x^{(n_{m})},y^{(n_{m})}\} ,進行擬合,得到引數 \theta^{(j)} ,對於需要預測的電影 x_{pred} ,由 \theta^{T}x_{pred} 得到評分,可根據預測的評分進行推薦。

單個使用者的代價函式為:

\large J(\theta^{(j)})=\frac{1}{2m^{(j)}}\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2m^{(j)}}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2

消去 m^{(j)} 後,多個使用者的代價函式為:

\large J(\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2

梯度下降為:

\large \begin{align*} \theta_{k}^{(j)} &:= \theta_{k}^{(j)}-\alpha\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}\ (if\ k=0) \\ \theta_{k}^{(j)} &:= \theta_{k}^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}+\lambda\theta_{k}^{(j)})\ (if\ k\neq 0) \end{align*}

注:此時的 \theta 和 x 都增加了偏置 \theta_{0} 和 x_{0} 。

2. 計算電影特徵

要求已知使用者的引數 \theta^{(j)} ,根據每個使用者對電影的評價 (\theta^{(j)})^{T}x ,擬合出電影 x 的特徵值。

單部電影的代價函式表示為:

\large J(x^{(i)})=\frac{1}{2}\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^{n}(x_{k}^{(i)})^2

多部電影的代價函式表示為:

\large J(x^{(1)},...,x^{(n_m)})=\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_{k}^{(i)})^2

所以,結合基於內容的推薦演算法,我們可首先假設 \theta ,然後擬合 x ,再優化 \theta\rightarrow x\rightarrow \theta\rightarrow ...

3. 基於梯度下降的協同過濾演算法(Collaborative filtering)

基於內容的推薦演算法通過 x 求解 \theta ,計算電影特徵通過 \theta 求解 x ,如此往復計算複雜度大,可將兩個代價函式合併:

\large \begin{align*} J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})&=\frac{1}{2}\sum_{(i,j):r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2 \\ &+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_{k}^{(i)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2 \end{align*}

通過初始化 x 和 \theta 為較小的值,通過梯度下降降低代價函式:

\large \begin{align*} \theta_{k}^{(j)} &:= \theta_{k}^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}+\lambda\theta_{k}^{(j)}) \\ x_{k}^{(i)} &:= x_{k}^{(i)}-\alpha(\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})\theta_{k}^{(j)}+\lambda x_{k}^{(i)}) \end{align*}

注:此時的 \theta 和 x 都不需要偏置 \theta_{0} 和 x_{0} 。

4. 低秩矩陣分解(Low rank matrix factorization)

如果對預測評分過程向量化,將評分表示為矩陣 Y

 ,每一行為電影,每一列為使用者,則 Y=\begin{bmatrix} \theta^{(1)}x^{(1)} &... &\theta^{(n_u)}x^{(1)} \\ ... & &... \\ \theta^{(1)}x^{(n_m)} & ... & \theta^{(n_u)}x^{(n_m)} \end{bmatrix} ,X=\begin{bmatrix} (x^{(1)})^T\\ ...\\ (x^{(n_m)})^T \end{bmatrix} , \Theta =\begin{bmatrix} (\theta^{(1)})^T\\ ...\\ (\theta^{(n_u)})^T \end{bmatrix}, 則有 X \cdot \Theta^T=Y

5. 應用到推薦

根據電影 i 推薦相似的電影 j 給使用者,可取使得 \left\|x^{(i)}-x^{(j)}\right\|^{2} 距離最小的 j

若一個使用者對任何一部電影都未評分,則根據各個電影均值,進行推薦。

如果這篇文章對你有一點小小的幫助,請給個關注喔~我會非常開心的~