協同過濾——曼哈頓距離、歐式距離、皮爾遜相關系數
假設你要在亞馬遜上買書,系統要給你推薦一些書,利用協同過濾的話,原理是找出與你愛好相近的用戶的購書清單,把他買了而你還沒買的書推薦給你。
1. 如何尋找相似用戶
假設用戶可以對書采取5星評級方式表達自己的喜好,0 表示很差,5 表示很好。如下圖:
要找到與你喜好相近的用戶,可以通過計算你與每個用戶之間的打分的距離判斷。距離越近,意味著喜好越相近。
2. 曼哈頓距離
圖示計算過程長這樣
Python實現:
def manhattan(rating1, rating2):
distance = 0
for key in rating1:
if key in rating2:
distance += abs(rating1[key] - rating2[key])
return distance
## rating1, rating2 結構如下:
rating1: {"Blues Traveler": 3.5, "Broken Bells": 2.0,
"Norah Jones": 4.5, "Phoenix": 5.0,
"The Strokes": 2.5, "Vampire Weekend": 2.0}
rating2 : {"Blues Traveler": 2.0, "Broken Bells": 3.5,
"Slightly Stoopid": 3.5, "Vampire Weekend": 3.0}
## users 結構,可能會多次用到
users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0,
"Norah Jones": 4.5, "Phoenix": 5.0,
"Slightly Stoopid": 1.5,
"The Strokes": 2.5, "Vampire Weekend": 2.0},
"Bill": {"Blues Traveler": 2.0, "Broken Bells": 3.5,
"Deadmau5": 4.0, "Phoenix": 2.0,
"Slightly Stoopid": 3.5, "Vampire Weekend": 3.0},
"Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0,
"Deadmau5": 1.0, "Norah Jones": 3.0,
"Phoenix": 5, "Slightly Stoopid": 1.0},
"Dan": {"Blues Traveler": 3.0, "Broken Bells": 4.0,
"Deadmau5": 4.5, "Phoenix": 3.0,
"Slightly Stoopid": 4.5, "The Strokes": 4.0,
"Vampire Weekend": 2.0},
"Hailey": {"Broken Bells": 4.0, "Deadmau5": 1.0,
"Norah Jones": 4.0, "The Strokes": 4.0,
"Vampire Weekend": 1.0},
"Jordyn": {"Broken Bells": 4.5, "Deadmau5": 4.0, "Norah Jones": 5.0,
"Phoenix": 5.0, "Slightly Stoopid": 4.5,
"The Strokes": 4.0, "Vampire Weekend": 4.0},
利用曼哈頓函數尋找最近鄰
利用最近鄰喜歡的而你沒有購買的書進行推薦
3. 畢達哥拉斯定理(勾股定理)
二維下的兩點之間的距離
n 維下的綜合公式
3.1 計算明式距離
3.2 找出最近鄰
3.3 根據最近鄰的喜好進行推薦
4. 皮爾遜相關系數
因為用戶的評分標準不一致,在A眼里,5分代表好,3分代表差,可能B的標準是3分代表好,0分代表差。皮爾遜相關系數就是平衡“分數貶值”這一問題。
皮爾遜相關系數計算公式
化簡后的即平時用的皮爾遜相關系數計算公式
假如有一組數據:
X 代表 Clara 這一列的五個數字, Y 代表 Robert 這一列的數字。
代入公式計算即得到皮爾遜相關系數。
程序實現
得出的皮爾遜相關系數值在0-1之間,越接近1,表示相似度越高。
5. 余弦相似度
亞馬遜上有成千上萬本書,找到與你喜好相同的用戶,你們共同的評分項可能很少,有大量的項是空白,數據稀疏。如果把所有數據拿來計算,因為大量0值會影響最后的計算結果,可能會導致本來有很多共同評分項的用戶,由于0值過多,分擔計算結果,反而不是你的最近鄰。余弦相似度會忽略0-0匹配:
||x|| 表示向量x 的長度,點乘表示內積。
余弦相似度取值范圍1到-1,其中1表示完全相似,-1 表示完全不相似。
6. 總結
無論利用哪種公式,計算出的首先都是最近鄰,然后根據最近鄰的書單進行推薦。