1、問(wèn)題的提出
假如我們擁有多個(gè)用戶對(duì)一系列不同電影的打分(其中存在某用戶對(duì)某電影打分缺失的情況)。如何基于這些歷史數(shù)據(jù),利用某種算法來(lái)預(yù)測(cè)用戶對(duì)特定電影的打分情況?
參數(shù)表示如下:
nu—— 用戶數(shù)量
nm—— 電影數(shù)量
r(i,j)——第j個(gè)用戶是否對(duì)第i個(gè)電影打分(1表示打過(guò)分,0表示沒(méi)打過(guò)分)
y(i,j)——第j個(gè)用戶對(duì)第i個(gè)電影的打分分?jǐn)?shù)
mj—— 第j個(gè)用戶評(píng)過(guò)分的電影數(shù)量
比如,以下表示4個(gè)用戶對(duì)5給電影的評(píng)分情況,我們需要預(yù)測(cè)?處的分?jǐn)?shù)。

2、基于內(nèi)容的推薦系統(tǒng)
假設(shè)電影有n個(gè)特征,且各個(gè)特征是已知的,用戶對(duì)電影不同特征的打分權(quán)重是未知的。利用用戶對(duì)不同電影的打分,可以針對(duì)每一個(gè)用戶訓(xùn)練出一個(gè)線性回歸模型。
如果,參數(shù)θ(j)=(θ(j)1,θ(j)2...θ(j)n)T表示用戶j的打分權(quán)重向量,x(i)=(x(i)1,x(i)2...x(i)n)T表示電影的特征向量。那么,訓(xùn)練單個(gè)用戶的評(píng)分模型的損失函數(shù)為:

其中,i:r(i,j)=1表示統(tǒng)計(jì)用戶j對(duì)電影i有打分的樣本。
如果訓(xùn)練所有用戶,需要將所有用戶損失函數(shù)求和,即:


3、協(xié)同過(guò)濾算法
在基于內(nèi)容的推薦系統(tǒng)中,我們是在已知電影特征的情況下進(jìn)行的。同樣,如果我們?cè)谝阎脩粼u(píng)分參數(shù)θ的情況下,可以估算電影的特征,損失函數(shù)如下:

利用梯度下降法,同時(shí)求解參數(shù)θ和x
算法步驟如下:
1)隨機(jī)初始化x(1),x(2)...x(nm),θ(1),θ(2)...θ(nu)
2)梯度下降法最小化損失函數(shù)
3)訓(xùn)練完算法后,計(jì)算用戶j對(duì)電影i的評(píng)分
協(xié)同過(guò)濾算法中,我們不包含偏執(zhí)項(xiàng)θ0,x0
這個(gè)算法習(xí)得的特征包含了電影的重要特性,可能不容易被理解,但是可以利用這些自動(dòng)習(xí)得的特征對(duì)用戶的打分進(jìn)行預(yù)測(cè)。
4、均值歸一化
如果某個(gè)用戶k對(duì)所有電影均沒(méi)有評(píng)分,那么,使協(xié)同過(guò)濾損失函數(shù)最小的參數(shù)θ(k)為0。那么該用戶預(yù)測(cè)的所有電影評(píng)分均為0,這顯然不合理。這時(shí),需要均值歸一化。
首先對(duì)Y矩陣進(jìn)行均值歸一化處理,將每一個(gè)用戶對(duì)每一個(gè)電影的評(píng)分減去所有用戶對(duì)該電影的評(píng)分平均值,得到新的矩陣Y,然后對(duì)新矩陣Y應(yīng)用協(xié)同過(guò)濾算法訓(xùn)練參數(shù)來(lái)預(yù)測(cè)評(píng)分,然后將平均值加回去。即將(θ(j))Tx(i)+μi作為最終的預(yù)測(cè)評(píng)分。對(duì)于沒(méi)有任何評(píng)分的用戶,他對(duì)每個(gè)電影的評(píng)分為各用戶評(píng)分的平均值。
