1. 程式人生 > >協同過濾推薦演算法-----向量之間的相似度

協同過濾推薦演算法-----向量之間的相似度

Collaborative Filtering Recommendation

度量向量之間的相似度方法很多了,你可以用距離(各種距離)的倒數,向量夾角,Pearson相關係數等。

皮爾森相關係數計算公式如下:

ρX,Y=cov(X,Y)σxσy=E((Xμx)(Yμy))σxσy(1)

分子是協方差,分子是兩個變數標準差的乘積。顯然要求X和Y的標準差都不能為0。

因為μX=E(X),σ2X=E(XμX)2=E(X2)E2(X)所以皮爾森相關係數計算公式還可以寫成:

ρX,Y=E(XY)E(X)E(Y)E(X2)E2(X)E(Y2)E
2
(Y)
(2)

當兩個變數的線性關係增強時,相關係數趨於1或-1。

Pearson相關係數有個特點,它在計算兩個數列的相似度時忽略其平均值的差異。比如說有的使用者對商品評分普遍偏低,有的使用者評分普遍偏高,而實際上他們具有相同的愛好,他們的Pearson相關係數會比較高。使用者1對某一個商品的評分是X=(1,2,3),使用者2對這三個商品的評分是Y=(4,5,6),則X和Y的Pearson相關係數是0.865,相關性還是挺高的。

iterm1 ………… itemn
user1 R11 R1n
…… Rij
userm Rm1 Rmn

使用者評分資料矩陣

基於使用者的協同過濾

step1.如果使用者i對專案j沒有評過分,就找到與使用者i最相似的K個鄰居(採用Pearson相關係數)

step2.然後用這K個鄰居對專案j的評分的加權平均來預測使用者i對專案j的評分。

U1=(r1,1,r1,2...r1,n)

U2=(r2,1,r2,2...r2,n)

要預測使用者u對商品i的評分ru,i

使用者u對所有商品的平均得分為ru¯

使用者x評分的商品集合為Ix,使用者y評分的商品集合為Iy,其並集為Ixy

採用Pearson相關係數使用者x和y的相似度:

sim(x,y)=iIxy(rx,irx¯)(ry,iry¯)
iIxy
(rx,irx¯)2iIxy(ry,iry¯)2
(3)

ru,i=ru¯+zuUsim(u,u)(ru,iru¯)(4)

其中U是使用者u的近鄰,z是歸一化因子,z=1uUsim(u,u)

 這各預測方法充分考慮了使用者一向的評分習慣是偏高還是偏低,因為使用者u的近鄰對u產生影響時已經減去了各自的平均值。

計算使用者U1U2的相似度時並不是去拿原始的評分向量去計算,而是隻關注他們的評交集Ix,y,這是因為一個使用者只對很少的物品有過評分,這樣使用者評分向量是個高度稀疏的向量,採用Pearson相關係數計算兩個使用者的相似度時很不準。

基於物品的協同過濾

step1.如果使用者i對專案j沒有評過分,就把ri,j置為0。找到與物品j最相似的k個近鄰(採用餘弦距離)

step2.然後用這K個鄰居對專案j的評分的加權平均來預測使用者i對專案j的評分。

I1=(r1,1,r2,1...rm,1)

I2=(r1,2,r2,2...rm,2)

每一項減去各個使用者評分的均值:

I1=(r1,1r1¯,r2,1r2¯...rm,1rm¯)

I2=(r1,2r1¯,r2,2r2¯...rm,2rm¯)

商品i和j之間的相似度採用餘弦計算:

sim(i,j)=x(rx,irx¯)(rx,jrx¯)x(rx,irx¯)2x(rx,jrx¯)2(5)

預測使用者u對商品i的評分:

ru,i=iNsim(i,i)ru,iiNsim(i,i)(6)

其中N是商品i的近鄰。

由於物品之間的相似度比較穩定,可以離線先算好,定期更新即可。在電商行業這種演算法用的比較多。

混合協同過濾

所謂的混合演算法,主體思路還是基於使用者的協同過濾,只是在計算兩個使用者的相似度時又嵌套了item-based CF思想。

度量使用者i和使用者j相似度更好的方法是:

1.使用者i參與評分的專案集合為Ii