協(xié)同過(guò)濾——曼哈頓距離由蘑、歐式距離、皮爾遜相關(guān)系數(shù)
假設(shè)你要在亞馬遜上買(mǎi)書(shū)吠冤,系統(tǒng)要給你推薦一些書(shū),利用協(xié)同過(guò)濾的話恭理,原理是找出與你愛(ài)好相近的用戶的購(gòu)書(shū)清單咨演,把他買(mǎi)了而你還沒(méi)買(mǎi)的書(shū)推薦給你。
1. 如何尋找相似用戶
假設(shè)用戶可以對(duì)書(shū)采取5星評(píng)級(jí)方式表達(dá)自己的喜好蚯斯,0 表示很差薄风,5 表示很好。如下圖:
要找到與你喜好相近的用戶拍嵌,可以通過(guò)計(jì)算你與每個(gè)用戶之間的打分的距離判斷遭赂。距離越近,意味著喜好越相近横辆。
2. 曼哈頓距離
Python實(shí)現(xiàn):
def manhattan(rating1, rating2):
distance = 0
for key in rating1:
if key in rating2:
distance += abs(rating1[key] - rating2[key])
return distance
## rating1, rating2 結(jié)構(gòu)如下:
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 結(jié)構(gòu)撇他,可能會(huì)多次用到
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. 畢達(dá)哥拉斯定理(勾股定理)
3.1 計(jì)算明式距離
3.2 找出最近鄰
3.3 根據(jù)最近鄰的喜好進(jìn)行推薦
4. 皮爾遜相關(guān)系數(shù)
因?yàn)橛脩舻脑u(píng)分標(biāo)準(zhǔn)不一致,在A眼里狈蚤,5分代表好困肩,3分代表差,可能B的標(biāo)準(zhǔn)是3分代表好脆侮,0分代表差锌畸。皮爾遜相關(guān)系數(shù)就是平衡“分?jǐn)?shù)貶值”這一問(wèn)題。
假如有一組數(shù)據(jù):
X 代表 Clara 這一列的五個(gè)數(shù)字靖避, Y 代表 Robert 這一列的數(shù)字潭枣。
代入公式計(jì)算即得到皮爾遜相關(guān)系數(shù)。
得出的皮爾遜相關(guān)系數(shù)值在0-1之間幻捏,越接近1盆犁,表示相似度越高。
5. 余弦相似度
亞馬遜上有成千上萬(wàn)本書(shū)篡九,找到與你喜好相同的用戶谐岁,你們共同的評(píng)分項(xiàng)可能很少,有大量的項(xiàng)是空白榛臼,數(shù)據(jù)稀疏伊佃。如果把所有數(shù)據(jù)拿來(lái)計(jì)算,因?yàn)榇罅?值會(huì)影響最后的計(jì)算結(jié)果讽坏,可能會(huì)導(dǎo)致本來(lái)有很多共同評(píng)分項(xiàng)的用戶锭魔,由于0值過(guò)多,分擔(dān)計(jì)算結(jié)果路呜,反而不是你的最近鄰迷捧。余弦相似度會(huì)忽略0-0匹配:
||x|| 表示向量x 的長(zhǎng)度织咧,點(diǎn)乘表示內(nèi)積。
余弦相似度取值范圍1到-1漠秋,其中1表示完全相似笙蒙,-1 表示完全不相似。
6. 總結(jié)
無(wú)論利用哪種公式庆锦,計(jì)算出的首先都是最近鄰捅位,然后根據(jù)最近鄰的書(shū)單進(jìn)行推薦。