Andrew Ng ML 第十七章 推薦系統

2022-05-09 05:42:10 字數 3018 閱讀 7516

圖1.推薦系統在研究什麼?

例子:**電影的評分。

當知道n_u使用者數,n_m電影數;r(i,j)使用者j評價了電影i,那麼就是1;y(i,j)如果r(i,j)為1,那麼就給出評分。

問題就是根據現有資料訓練學習演算法,**未評分的電影。

圖2.基於內容的推薦系統

對5部電影進行型別分析,有兩個指標x_1,x_2,分別是愛情、動作,加上x_0之後形成指標。

從線性回歸的角度來說,對每乙個使用者訓練乙個回歸模型,每個使用者都對應係數,對使用者1alice的引數[0,5,0]t,即對愛情片評分高,那麼x電影引數輸入後就得出大分為4.95.

圖3.問題公式

這裡引入了代價函式公式,介紹了引數的含義,r(i,j)即是否已經評分,y(i,j)是如果評分的分數。

θ(j)是對使用者j的引數,x(i)是電影i的特徵向量,m(j)是評分電影的數量,並且公式加入了正則項。

在優化時,由於m(i)是常數,所以可以將其去掉,優化時仍能得到最優的theta_j。

圖4.最優化演算法

第乙個公式是對所有的引數進行求和並最小化,記作j(θ1,θ2,,,,θm)。

梯度下降更新,當k=0,也就是常數項;當k≠0,即需要正則化非常數項。

基於內容的推薦演算法是有乙個前提的,就是電影的所有特徵指標型別都是已知的,但是這通常不會很符合正常情況,下節介紹不是基於內容的推薦演算法。

圖5.問題動機

由於電影的成分向量通常是不可得的,所以通過另一種方法來獲取電影的成分向量。

假設使用者給出了對愛情電影和動作電影的喜愛程度,即係數矩陣,那麼根據評分,就可以得出對應的電影的成分向量特徵。

圖6.最優化演算法

對乙個電影求成分向量,通過最優化式1。

對n_m個電影求最優化,需要加上乙個求和項,對n_m個電影的引數求和並最小化。

圖7.協同過濾

上節講的是給定電影的成分向量和評分,可以**出使用者偏好向量。

本節講的是給出使用者偏好向量,可以估測出x_(1),,,,,電影的成分向量。

那麼就得出,首先通過隨機初始化偏好向量,就可以根據對電影的已有評分**出成分向量,那麼再根據方法1,**出偏好向量,以此類推,得到最終的優化結果。

圖8.協同過濾最優化目標

對式1中,前一項的求和是如果使用者j評分了,那麼就將某一使用者對電影評分的分數求和。

對式2中,正好相反,是對乙個電影來說,將所有使用者評分求和。

式3是將其合併,作為乙個最小化公式。

並且最後提到x和θ中不存在常數項,即1項,那麼就是n維的,不是n+1維的。

圖9.協同過濾演算法

1.首先初始化成分向量和使用者偏好向量為較小的隨機值。

2.使用梯度下降法最小化代價函式,對i電影的第k個屬性的更新公式,與對j使用者對第k個電影的評分更新公式。

3.對每個使用者得出了引數θ,並且對乙個電影學習到了特徵向量x,那麼就是已通過θtx來得到評分。

如使用者j對電影i沒有評分,那麼就可以通過這個θtx來進行**。

圖10.低秩矩陣分解

將電影的評分作為矩陣y,那麼**的評分就如右邊大矩陣,其中列向量是乙個使用者對所有電影的評分,行向量是乙個電影所有的評分。

那麼如何進行簡化呢?

首先將x矩陣表示為左下,θ矩陣表示為右下,那麼整個大矩陣就可表示為 xθt。

圖11.尋找相似電影

那麼如何向使用者推薦相似電影呢?

根據電影的特徵向量,找到5個與當前電影特徵向量最小距離的,即為相似電影。也不只是電影,可以拓展到任何其他物品。

圖12.加入有使用者從未評分

假設偏好向量中特徵數為2,若eve未對任一電影評分;

此時由於加入了正則化項,且式子前半部分沒有對θ有所限制,所以會得到,θ_(5)=0向量的結果。

那麼此時就這個使用者的評分**就會產生誤差。

需要使用均值歸一化來解決問題。

圖13.均值歸一化

將電影評分形成矩陣,並按行求出沒個電影的評分均值得到均值向量μ, y-μ之後,得到新的均值矩陣。

在使用協同過濾演算法訓練出theta_j與x_i之後,在進行**電影評分時,仍要+均值。

對於之前出現的問題,使用者5得到的偏好向量仍然為0,但是現在加上了均值,就避免了評分全為0的現象,即根據電影的均值評分進行推送了。

第十七章 Size Classes

通常,您希望應用程式的介面根據螢幕的尺寸和方向而顯示不同的布局。在本章中,您將修改homepwner中的detailviewcontroller的介面,以便當它出現在具有相對較小高度的螢幕上時,文字字段集合和影象檢視併排而不是堆疊在一起 圖17.1 圖17.1 homepwner 的 detailv...

第十七章 部署

總的來說,部署遇到了許多坑,而且還有好多坑還沒有踩。去cocode找了許多教程,才踩了一些坑,但是關於資料庫的坑,先留著。所有的db.session.add 後面都加上db.session.commit 才行。記得,這是狗書的問題!部署教程 每次修改後需要一下命令重新部署下 git add git ...

第十七章 包

1 如果a資料夾所在目錄在環境變數,a資料夾中的 ma 模組可以被以下方式匯入 import a.ma form a import ma 2 如果 a 資料夾所在目錄在環境變數,a 資料夾中的 b 資料夾的 mb 模組可以被以下方式匯入 import a b mb from a.b import m...