吳恩達機器學習——第17章 推薦系統

1、概述

推薦系統是現實生活中應用最廣泛的積極學習問題,通過對歷史數據的分析,把用戶感興趣的商品、服務推薦給用戶。

2、基於內容的推薦算法

基於內容的推薦算法,其實就是已知商品的特徵,根據特徵建立模型,實現推薦系統的方式。
我們以一個案例來介紹推薦算法,這個案例講貫穿整章內容。

2.1 電影推薦案例

在這裏插入圖片描述
介紹一下上述表格的組成部分:

  • 第一列:代表電影的名稱,一共有5個電影。
  • 第二列:分成4個小列,代表每個人對各個電影的評分。問號代表用戶沒有進行評分。
  • 第三列:電影的特徵值,x1x_1代表電影是愛情電影的概率;x2x_2代表是動作電影的概率。

2.2 符號說明

爲了描述方便,我們把本章使用到的符號做個定義:

  • nnn_n:用戶數量。
  • nmn_m:電影數量。
  • r(i,j)=1:代表用戶j對電影i進行了評價。
  • y(i,j):代表用戶j對電影i的評分。
  • m(j)m^{(j)}:代表用戶j評價的電影數量。
  • θ(j)\theta^{(j)}:用戶j的向量參數。
  • x(i)x^{(i)}:電影i的特徵向量。
  • nun_u:代表θ\theta的數量。
  • nmn_m:代表特徵x的數量。

2.3 基本原理

我們假設用戶j對電影i的評分爲:(θ(j))TX(i)(\theta^{(j)})^T*X^{(i)}。具體原因,恕我無可奉告。

在已知θ\theta和X的前提下,就能計算每個用戶對每個電影的評分了。
這就是基於內容的推薦算法。

θ\theta如何計算呢,請看下節。

2.4 θ\theta的計算

θ\theta 是擬合參數,需要保證預測值與真實值最接近的情況下,求最小值,公式爲:

minθj12m(j)i:r(i,j)=1((θj)TX(i)y(i,j))2+λ2m(j)k=1n(θk(j))2min_{\theta_j} :\frac{1}{2m^{(j)}}\sum_{i:r(i,j)=1}((\theta^j)^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2m^{(j)}}\sum_{k=1}^n(\theta_k^{(j)})^2

m(j)m^{(j)}代表用戶評價的電影的數量,是一個常量,可以從商戶公式中去掉:
minθj12i:r(i,j)=1((θj)TX(i)y(i,j))2+λ2k=1n(θk(j))2min_{\theta_j} :\frac{1}{2}\sum_{i:r(i,j)=1}((\theta^j)^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^n(\theta_k^{(j)})^2

求所有的θ\theta值:
J(θ(1),θ(2),θ(3)......θ(nu))=12j=1nui:r(i,j)=1((θj)TX(i)y(i,j))2+λ2j=1nuk=1n(θk(j))2J(\theta^{(1)},\theta^{(2)},\theta^{(3)}......\theta^{(n_u)})=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i: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

通過梯度下降的方式來計算θ\theta
θk(j):=θk(j)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))xk(i))(for 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)}) (for \ k=0)
θk(j):=θk(j)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))xk(i)+λθk(j))(for 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)} )(for \ k!=0)

3、協同過濾

上面介紹的是已知特徵的情況下,可以推導出θ\theta,從而構建推薦模型。
本節講的是另外一種情況,假設θ\theta是已知的,特徵是未知的,通過θ\theta來自動構建特徵的過程,這種方式稱爲協同過濾。

3.1 前提

前提:每個用戶都對數個電影進行了評分,通過觀察大量的數據,得到每個電影的特徵值,相當於每個用戶都在協助改進算法。

3.2 原理

根據之前的定義我們知道用戶j對電影i的評分爲(θ(j))TX(i)(\theta^{(j)})^TX^{(i)},現在已知θ\theta、評分求解X,則公式爲:

minx(i)min_x^{(i)}:12j:r(i,j)=1((θ(j))TX(i)y(i,j))2+λ2k=1n(xk(i))2\frac{1}{2}\sum_{j:r(i,j)=1}((\theta^{(j)})^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^n(x_k^{(i)})^2

求解所有的X:
minx(1),x(2)...x(nm)min_{x^{(1)},x^{(2)}...x^{(n_m)}}12i=1nmj:r(i,j)=1((θ(j))TX(i)y(i,j))2+λ2i=1nmk=1n(xk(i))2\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((\theta^{(j)})^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^n(x_k^{(i)})^2

3.3 計算步驟

  1. 先取一個隨機的θ\theta
  2. 根據上述公式計算出X。
  3. θ\theta進行優化。
  4. 重新計算x

3.4 同時計算θX\theta、 X

有一種同時計算θX\theta X的方式,公式爲:
J(x(1),x(2),x(3)...,x(nm),θ(1),θ(2),θ(3)......θ(nu))=12(i,j):r(i,j)=1((θj)TX(i)y(i,j))2+λ2j=1nuk=1n(θk(j))2+λ2i=1nmk=1n(xk(i))2J(x^{(1)},x^{(2)},x^{(3)}...,x^{(n_m)},\theta^{(1)},\theta^{(2)},\theta^{(3)}......\theta^{(n_u)})=\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_k^{(i)})^2

注意:該算法中,不包含x0θ0x_0 \theta_0的值。

計算步驟爲:

  1. 隨機初始化θ x\theta \ x爲較小的值。
  2. 使用梯度下降算法優化θ x\theta \ x

θk(j):=θk(j)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))xk(i)+λθk(j))\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)} )

xk(i):=xk(i)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))θk(j)+λX(i))x_k^{(i)}:=x_k^{(i)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^TX^{(i)}-y^{(i,j)})\theta_k^{(j)}+\lambda{X^{(i)}})

4、矢量化實現

矢量化是一種表示方式的變化。
在這裏插入圖片描述
我們來看一下上面的這張圖:

  1. Y:每行代表每個用戶對一個電影的評分結果。
  2. Predicted ratings:預測的公式,(θ(j))2x(i)(\theta^{(j)})^2x^{(i)}。用這個來預測Y的值。
  3. 假設X Θ\Theta 爲兩個矩陣,則Y=XΘTY=X\Theta^T
    這就是矢量化表示方式,也稱爲“低秩矩陣分解算法”。

5、均值歸一化

有些用戶從來不對電影進行評分,針對於這種用戶,如何進行推送呢?

通過上面的方式,因爲r(i,j)!=1,所以該用戶對所有電影的評分結果計算出來都是0,這對於推薦系統沒有任何意義,而均值歸一化是一種解決思路。

均值歸一化:就是計算所有用戶對電影的評分的平均值,作爲該用戶的評分返回。
在這裏插入圖片描述

介紹一下上圖的元素:

  1. Y:代表用戶對電影的評分,可以看出最後一個用戶,沒有進行任何評分。
  2. μ\mu代表每個電影評分的平均值。
  3. 使用Y減去平均值得到新的Y。
  4. 預測評分的公式爲:(θ(j))Tx(i)(\theta^{(j)})^T{x^{(i)}},由於每個y值都減去了平均值,所以公式需要加上平均值:(θ(j))Tx(i)+μi(\theta^{(j)})^T{x^{(i)}} +\mu_i
  5. 所以沒有評分的用戶的評分:(θ(j))Tx(i)+μi=0+μi=μi(\theta^{(j)})^T{x^{(i)}} +\mu_i=0+\mu_i=\mu_i
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章