推薦系統:
舉例(預測電影評分)
用戶使用0∼5 星給電影打分,如下圖所示:
一些定義如下:
nu :表示用戶數量;
nm :表示電影數量;
r(i,j) :如果用戶j 給電影i 打過分,則r(i,j)=1 ;
y(i,j) :當用戶j 給電影i 打過分,即r(i,j)=1 時,用來表示用戶j 給電影i 的評分分值。
推薦系統問題就是給定r(i,j) 和y(i,j) ,關注所有沒有評分的地方並試圖預測;
推薦系統的主要工作是想出一種學習算法,能夠幫助我們自動填充缺失值,試圖預測用戶可能感興趣的電影,進行推薦。
第一種構建推薦系統的方法—-“基於內容的推薦”
假設每部電影有兩種特徵,用x1 和x2 表示,x1 表示這部電影屬於愛情電影的程度,x2 表示這部電影屬於動作電影的程度,如下圖所示:
對於第一部電影來說,兩個特徵值分別是0.9 和0 ,加上一個特徵變量x0=1 ,則x(1)=⎡⎣⎢10.90⎤⎦⎥ ,n 表示特徵變量數(不包括x0 ),故n=2 ;
我們可以把每個用戶的打分預測當成一個獨立的線性迴歸問題,對於每個用戶j ,學習參數θ(j)∈Rn+1 ,根據(θ(j))Tx(i) 來預測用戶j 對電影i 的打分。
更正式的表達:
r(i,j) :如果用戶j 給電影i 打過分,則爲1,否則爲0;
y(i,j) :當r(i,j)=1 時,表示用戶j 給電影i 的評分分值;
θ(j) :表示用戶j 的參數向量;
x(i) :表示電影i 的特徵向量。
對於用戶j 和電影i ,預測評分爲:(θ(j))Tx(i) ;
m(j) :表示用戶j 評分的電影數量;
爲了學習θ(j) ,則:
minθ(j)12m(j)∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2m(j)∑k=1n(θ(j)k)2
去掉
1m(j) 不影響
θ(j) 的最優化結果,所以,爲了學習
θ(j) ,則:
J(θ(j))=minθ(j)12∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑k=1n(θ(j)k)2
爲了學習
θ(1),θ(2),⋯,θ(nu) ,則:
J(θ(1),⋯,θ(nu))=minθ(1),⋯,θ(nu)12∑j=1nu∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑j=1nu∑k=1n(θ(j)k)2
梯度下降法:
θ(j)k:=θ(j)k−α∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))x(i)k(for k=0)
θ(j)k:=θ(j)k−α(∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))x(i)k+λθ(j)k)(for k≠0)
注:∂∂θ(j)kJ(θ(1),⋯,θ(nu))=∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))x(i)k+λθ(j)k
第二種構建推薦系統的方法—-“協同過濾”
這種算法能自行學習所要使用的特徵。
假設我們並不知道每部電影的愛情成分和動作成分,如下圖:
我們採訪每位用戶,得到每個用戶是否喜歡愛情電影和動作電影:
如:θ(1)=⎡⎣⎢050⎤⎦⎥θ(2)=⎡⎣⎢050⎤⎦⎥θ(3)=⎡⎣⎢005⎤⎦⎥θ(4)=⎡⎣⎢005⎤⎦⎥
θ(j) 可以明確告訴我們每個用戶對不同題材電影的喜歡程度。
通過θ(j) 及y(i,j) 可以推算出每部電影的特徵值。
將問題標準化:
已知θ(1),⋯,θ(nu) ,學習x(i) ,使得
minx(i)12∑j:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑k=1n(x(i)k)2
已知
θ(1),⋯,θ(nu) ,學習
x(1),⋯,x(nm) ,使得
minx(1),⋯,x(nm)12∑i=1nm∑j:r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑i=1nm∑k=1n(x(i)k)2
結合前兩種方法,得到協同過濾算法的代價函數:
J(x(1),⋯,x(nm),θ(1),⋯,θ(nu))=12∑(i,j):r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑i=1nm∑k=1n(x(i)k)2+λ2∑j=1nu∑k=1n(θ(j)k)2
算法目標爲:minx(1),⋯,x(nm)θ(1),⋯,θ(nu)J(x(1),⋯,x(nm),θ(1),⋯,θ(nu))
注:當用這種形式去學習特徵量時,應摒棄x0=1 和θ0 ,x∈Rn ,θ∈Rn 。
協同過濾算法步驟:
- 初始化x(1),⋯,x(nm),θ(1),⋯,θ(nu) 爲小的隨機值;
- 用梯度下降法或其他高級優化算法,最小化代價函數(for every j=1,⋯,nu,i=1,⋯,nm )
x(i)k:=x(i)k−α(∑j:r(i,j)=1((θ(j))Tx(i)−y(i,j))θ(j)k+λx(i)k)
θ(j)k:=θ(j)k−α(∑i:r(i,j)=1((θ(j))Tx(i)−y(i,j))x(i)k+λθ(j)k)
- 對一個用戶(參數θ )和一個電影(特徵值x ),預測評分θTx (即(θ(j))Tx(i) )
協同過濾算法的向量化方法:
有五部電影的數據集如下圖:
將用戶評分存儲到矩陣中:
Y=⎡⎣⎢⎢⎢⎢⎢⎢55?005?4000?05500?4?⎤⎦⎥⎥⎥⎥⎥⎥
預測評分矩陣爲:
⎡⎣⎢⎢⎢⎢⎢(θ(1))Tx(1)(θ(1))Tx(2)⋮(θ(1))Tx(nm)(θ(2))Tx(1)(θ(2))Tx(2)⋮(θ(2))Tx(nm)⋯⋯⋯(θ(nu))Tx(1)(θ(nu))Tx(2)⋮(θ(nu))Tx(nm)⎤⎦⎥⎥⎥⎥⎥
若電影特徵矩陣爲X=⎡⎣⎢⎢⎢⎢⎢(x(1))T(x(2))T⋮(x(nm))T⎤⎦⎥⎥⎥⎥⎥ 用戶參數矩陣爲Θ=⎡⎣⎢⎢⎢⎢⎢(θ(1))T(θ(2))T⋮(θ(nu))T⎤⎦⎥⎥⎥⎥⎥
則預測評分矩陣爲XΘT ,這種方法叫作低秩矩陣分解。
尋找相關電影
對於每個電影i ,存在特徵向量x(i)∈Rn
尋找電影i 的關聯電影j :
若∥x(i)−x(j)∥ 很小→ 電影i 和電影j 相似。
協同過濾算法實現細節:均值歸一化
如下圖,有一個用戶沒有給任何電影評分
在協同過濾算法中,目標爲:
minx(1),⋯,x(nm)θ(1),⋯,θ(nu)12∑(i,j):r(i,j)=1((θ(j))Tx(i)−y(i,j))2+λ2∑i=1nm∑k=1n(x(i)k)2+λ2∑j=1nu∑k=1n(θ(j)k)2
假設
n=2 ,
θ(5)∈R2 ,由於用戶
5 沒有對任何電影評分,所以影響
θ(5) 的唯一項爲
λ2∑k=1n(θ(5)k)2 ,爲了讓代價函數最小化,最終
θ(5)=[00] ,所以預測用戶5對電影的評分時
(θ(5))Tx(i)=0 ,其對所有電影的評分均爲
0 ,無法推薦。
均值歸一化可以解決這一情況。
Y=⎡⎣⎢⎢⎢⎢⎢⎢55?005?4000?05500?40?????⎤⎦⎥⎥⎥⎥⎥⎥ 計算每個電影評分均值μ=⎡⎣⎢⎢⎢⎢⎢⎢2.52.522.251.25⎤⎦⎥⎥⎥⎥⎥⎥
令Y=Y.−μ=⎡⎣⎢⎢⎢⎢⎢⎢2.52.5?−2.25−1.252.5?2−2.25−1.25−2.5?−22.753.75−2.5−2.5?1.75−1.25?????⎤⎦⎥⎥⎥⎥⎥⎥ 用該矩陣學習θ(j) 和x(i)
用戶j 對電影i 的評分預測爲:(θ(j))Tx(i)+μi
本例中,因爲θ(5)=[00] ,所以其對電影的評分爲μ=⎡⎣⎢⎢⎢⎢⎢⎢2.52.522.251.25⎤⎦⎥⎥⎥⎥⎥⎥