1. 程式人生 > >【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 16—Recommender Systems 推薦系統

【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 16—Recommender Systems 推薦系統

Lecture 16 Recommender Systems 推薦系統

16.1 問題形式化 Problem Formulation

在機器學習領域,對於一些問題存在一些演算法, 能試圖自動地替你學習到一組優良的特徵。通過推薦系統(recommender systems),將領略一小部分特徵學習的思想。

假使有 5 部電影,3部愛情片、2部動作片。  4 個使用者為其中的部分電影打了分。現在希望構建一個演算法,預測每個人可能給沒看過的電影打多少分,以此作為推薦的依據。


下面引入一些標記:
nu       代表使用者的數量
nm

      代表電影的數量
r(i, j)   如果使用者 j 給電影 i 評過分則 r(i, j) = 1
y(i,j)    代表使用者 j 給電影 i 的評分 (注:這裡 i 和 j 不要搞反
mj       代表使用者 j 評過分的電影的總數

16.2 基於內容的推薦系統 Content Based Recommendations

1 定義

在一個基於內容的推薦系統演算法中,假設對於我們希望推薦的東西有一些資料,是這些東西的特徵。
現在假設每部電影都有兩個特徵, x1

代表電影的浪漫程度,x2 代表電影的動作程度。


則每部電影都有一個特徵向量,如 x(1)是第一部電影的特徵向量,為[0.9 0]。
下面我們採用線性迴歸模型,針對每一個使用者都訓練一個線性迴歸模型,如θ(1) 是第一個使用者的模型的引數。 於是有:
θ(j)   使用者 j 的引數向量
x(i)   電影 i 的特徵向量
對於使用者 j 和電影 i,我們預測其評分為:(θ(j))Tx(i)

2 代價函式

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

其中 i: r(i, j) 表示我們只計算那些使用者 j 評過分的電影。在一般的線性迴歸模型中,誤差項和正則項應該都是乘以1/2m,在這裡我們將m去掉,且不對方差項θ0

進行正則化處理。
上面的代價函式只是針對一個使用者的,為了學習所有使用者,我們將所有使用者的代價函式求和:

如果我們要用梯度下降法來求解最優解,我們計算代價函式的偏導數後得到梯度下降的更新公式為:

16.3 協同過濾 Collaborative Filtering

在之前的基於內容的推薦系統中,使用電影的特徵,訓練出了每一個使用者的引數。相反地,如果擁有使用者的引數,可以學習得出電影的特徵。


但是如果既沒有使用者的引數,也沒有電影的特徵,這兩種方法都不可行了。可以使用協同過濾演算法,同時學習這兩者。

優化目標便改為同時針對x和θ進行。是一個:預測 θ,再反過來預測 x, 再預測 θ,再預測 x 的迭代過程。

16.4 協同過濾演算法 Collaborative Filtering Algorithm

協同過濾的代價函式定義為:

對代價函式求偏導數:


(注:在協同過濾從演算法中,通常不使用方差項,如果需要的話,演算法會自動學得。)
協同過濾演算法使用步驟如下:


1. 初始 x 和 θ 為一些隨機小值
2. 使用梯度下降演算法最小化代價函式 J
3. 在訓練完演算法後,通過計算 θTx 預測使用者 j 給電影 i 的評分
通過這個學習過程獲得的特徵矩陣包含了有關電影的重要資料,這些資料不總是人能讀懂的,但是可以用這些資料作為給使用者推薦電影的依據。

總結:

16.5 向量化:低秩矩陣分解 Vectorization_ Low Rank Matrix Factorization

協同過濾演算法的向量化實現
舉例:
1)給出一件產品,能否找到與之相關的其它產品。
2)一位使用者最近看上一件產品,有沒有其它相關的產品可以推薦給他。

現在有5部電影,4位使用者,矩陣 Y 就是一個 5 行 4 列的矩陣,儲存每個使用者對每個電影的評分資料:

通過使用 θ 和 x 計算,可以預測出每個使用者對每個電影打的分數:

現在將所有 x 都集中在一個大的矩陣X中,每一部電影是一行;

將所有 θ 集中在一個大的Θ中,每個使用者是一行。

 則有:

因為矩陣X乘Θ的轉置,在數學上具有低秩屬性。因此這個演算法也被稱為低秩矩陣分解 low rank matrix factorization。

現在已經學習到了特徵引數向量,那麼可以使用這些向量做一些別的事情,比如度量兩部電影之間的相似性。例如,如果一位使用者正在觀看電影 x(i) ,可以根據兩部電影的特徵向量之間的距離 ∥x(i) − x(j)∥,尋找另一部相似電影 x(j)

16.6 推行工作上的細節:均值歸一化  Mean Normalization

現在新增一個使用者 Eve,她沒有為任何電影評分,那麼我們以什麼為依據為 Eve 推薦電影呢?

如果根據之前的模型,因為她沒有打分,代價函式第一項為0。演算法目標變為最小化最後一項,最後得到 θ(5) 中的元素都是0。現在拿著 θ(5) 預測出的瓶分都是0。這沒有什麼意義,因此需要做一些處理。


首先需要對結果 Y 矩陣進行均值歸一化處理,將每一個使用者對某一部電影的評分減去所有使用者對該電影評分的平均值:


然後利用這個新的 Y 矩陣來訓練演算法。 最後在預測評分時,需要在預測值的基礎上加回平均值,即預測值等於 (θ(j))Tx(i) + μi 。因此對於 Eve,新模型預測出的她的打分都是該電影的平均分。