1. 程式人生 > 其它 >機器學習筆記14

機器學習筆記14

推薦系統

1.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 評過分的電影的總數

1.2 基於內容的推薦系統 Content-based recommendations

在一個基於內容的推薦系統演算法中,假設對於我們希望推薦的東西,裡面都有相應的特徵
舉個例子:每部電影都有兩個特徵, x1 代表電影的浪漫程度,x2 代表電影的動作程度,比如:x(1)是第一部電影的特徵向量,為[0.9 0]

θ(j) 使用者 j 的引數向量,x(i) 電影 i 的特徵向量,對於使用者 j 和電影 i,我們預測其評分為:(θ(j))Tx(i)

加入正則化後的代價函式(均方誤差)如下:

根據代價函式的偏導數後得到梯度下降的更新公式為:

1.3 協同過濾 Collaborative filtering

之前我們是根據電影的特徵來計算出每一個使用者的評價,反過來如果我們擁有使用者的評價可以計算出電影的特徵

代價函式也是類似:

那如果既沒有使用者的引數,也沒有電影的特徵,那該怎麼辦?

可以採用協同過濾演算法,同時學習這兩者,演算法是通過隨機初始化一個使用者的引數,然後去計算電影的特徵,再用電影的特徵去優化使用者的引數,不斷迭代,直到得到兩者都最優

1.4 協同過濾演算法 Collaborative filtering algorithm

結合之前說的兩者計算方式可以將兩個式子結合起來一起優化:

總結一下協同過濾演算法的步驟:

1. 初始 x 和 θ 為一些隨機小值
2. 使用梯度下降演算法最小化代價函式 J


3. 在訓練完演算法後,通過計算 θTx 預測使用者 j 給電影 i 的評分

1.5 向量化:低秩矩陣分解 Vectorization:Low rank matrix factorization

在之前的例子中可以採取向量化的方式來表示對電影的評分Y,一行表示每個使用者對一個電影的評分

對於這個大的評分矩陣,我們就可以將 θ 和 X 分開來表示,最後再以 X * θT 的方式來表示這個評分大矩陣

除此之外,如果我們想要尋找一個與電影 x(i) 相關的電影,可以通過計算兩部電影的特徵向量之間的距離 ∥x(i) − x(j)的方式來尋找相關電影

例如,想要找到與電影 x(i) 相關的5部電影,就可以根據 ∥x(i) − x(j)∥ 計算出距離最小的5部電影,即為5部與電影 x(i) 相關的電影

1.6 實施細節:均值歸一化 Mean normalization

如果新增一個使用者 Eve,她沒有為任何電影評分,那麼我們應該怎麼為 Eve 推薦電影

如果繼續按照之前的模型,因為她沒有打分,代價函式第一項為0,那目標函式就變為最後一項(正則化項),優化目標函式後 θ(5)中的元素就都是0,再拿著 θ(5) 去預測評分,最後得到得評分都是0,那這麼做就沒什麼意義了

所以我們就提出了歸一化

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

然後利用這個新的 Y 矩陣來訓練演算法, 最後在預測評分時,需要在預測值的基礎上加回平均值,即預測值等於 (θ(j))Tx(i) + μi

那麼對於像 Eve 這樣沒對任何電影評價過的使用者,預測值等於 μi ((j))Tx(i) = 0),即新模型按照電影的平均分來向他推薦電影