協同過濾推薦演算法-----向量之間的相似度
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當兩個變數的線性關係增強時,相關係數趨於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)=∑i∈Ixy(rx,i−rx¯)(ry,i−ry¯)∑則
ru,i=ru¯+z∑u′∈Usim(u,u′)(ru′,i−ru′¯)(4)其中U是使用者u的近鄰,z是歸一化因子,z=1∑u′∈Usim(u,u′)
這各預測方法充分考慮了使用者一向的評分習慣是偏高還是偏低,因為使用者u的近鄰對u產生影響時已經減去了各自的平均值。
計算使用者U1和U2的相似度時並不是去拿原始的評分向量去計算,而是隻關注他們的評交集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,1−r1¯,r2,1−r2¯...rm,1−rm¯)
I2=(r1,2−r1¯,r2,2−r2¯...rm,2−rm¯)
商品i和j之間的相似度採用餘弦計算:
sim(i,j)=∑x(rx,i−rx¯)(rx,j−rx¯)∑x(rx,i−rx¯)2∑x(rx,j−rx¯)2−−−−−−−−−−−−−−−−−−−−−−−√(5)預測使用者u對商品i的評分:
ru,i=∑i′∈Nsim(i,i′)ru,i′∑i′∈Nsim(i,i′)(6)其中N是商品i的近鄰。
由於物品之間的相似度比較穩定,可以離線先算好,定期更新即可。在電商行業這種演算法用的比較多。
混合協同過濾
所謂的混合演算法,主體思路還是基於使用者的協同過濾,只是在計算兩個使用者的相似度時又嵌套了item-based CF思想。
度量使用者i和使用者j相似度更好的方法是:
1.使用者i參與評分的專案集合為Ii