這就是 amazon 發明的「喜歡這個商品的人,也喜歡某某」演算法。
其核心是數學中的「多維空間中兩個向量夾角的余弦公式」,當初我的確是被這演算法驚豔到了。
「商品推薦」系統的演算法 ( collaborative filtering ) 分兩大類:
第一類,以人為本,先找到與你相似的人,然後看看他們買了什麼你沒有買的東西。這類演算法最經典的實現就是「多維空間中兩個向量夾角的余弦公式」;
第二類,以物為本,直接建立各商品之間的相似度關係矩陣。這類演算法中最經典的是'斜率=1' (slope one)。amazon 發明了暴力簡化的第二類演算法,「買了這個商品的人,也買了 ***」。
我們先來看看第一類,最大的問題是如何判斷並量化兩人的相似性,思路是這樣的——
例子:有 3 首歌放在那裡,《最炫民族風》,《晴天》,《hero》。
a 君,收藏了《最炫民族風》,而遇到《晴天》,《hero》則總是跳過;
c 君,拉黑了《最炫民族風》,而《晴天》《hero》都收藏了。
我們都看出來了,a,b 二位品味接近,c 和他們很不一樣。
那麼問題來了,說 a,b 相似,到底有多相似,如何量化?
我們把三首歌想象成三維空間的三個維度,《最炫民族風》是 x 軸,《晴天》是 y 軸,《hero》是 z 軸,對每首歌的喜歡程度即該維度上的座標。
那麼每個人的總體口味就是乙個向量,a 君是 (3,-1,-1),b 君是 (5,1,-5),c 君是 (-5,3,3)。(抱歉我不會畫立體圖)
我們可以用向量夾角的余弦值來表示兩個向量的相似程度, 0 度角(表示兩人完全一致)的余弦是 1, 180 度角(表示兩人截然相反)的余弦是 -1。
根據余弦公式,夾角余弦 = 向量點積 /(向量長度的叉積)=( x1x2 + y1y2+ z1z2) / (√(x1
2 +y1
2+z1
2) ×√(x2
2+y2
2 +z2
2) )
可見 a 君 b 君的夾角余弦是 0.81 , a 君 c 君夾角的余弦是 -0.97 ,公式誠不欺我也。
以上是三維(三首歌)的情況,如法炮製 n 維 n 首歌的情況都是一樣的。
假設我們選取一百首種子歌曲,算出了各君之間的相似值,那麼當我們發現 a 君還喜歡聽的《小蘋果》b 君居然沒聽過,相信大家都知道該怎麼和 b 君推薦了吧。
第一類以人為本推薦演算法的好處我想已經很清楚了,那就是精準!
代價是運算量很大,而且對於新來的人(聽得少,動作少),也不太好使。
所以人們又發明了第二類演算法。
假設我們對新來的 d 君,只知道她喜歡最炫民族風,那麼問題來了,給她推薦啥好咯?
如圖,推薦《晴天》!
呵呵,第二類演算法的好處大家也看出來了,簡單粗暴好操作(也適合 map-reduce),可精度差了點。
所以,各家**真正的推薦演算法,是他們在綜合上述兩類演算法的基礎上,各自研製並且不斷地改進調節的,外人不得而知! ^_^
django 推薦商品演算法
1.基於使用者的協同過濾演算法 usercf 該演算法利用使用者之間的相似性來推薦使用者感興趣的資訊,個人通過合作的機制給予資訊相當程度的回應 如評分 並記錄下來以達到過濾的目的進而幫助別人篩選資訊,回應不一定侷限於特別感興趣的,特別不感興趣資訊的紀錄也相當重要。但有很難解決的兩個問題,乙個是稀疏性...
JAVA 協同過濾演算法商品推薦
public double getnumbycustomer customer customer return vectore public double countsimilarity double a,double b return result public list getmaxsimila...
大家都來推薦 MJ 的歌曲以緬懷流行天王吧
流行 歷史上的經典合唱 we are the world url 拯救地球,不用說了,這首作品可以說是 we are the world 的個人延續吧。url you are not alone,這是我最喜歡的 mj 歌曲 url 跟別人不一樣,他們的第一首英文歌曲可能是 yesterday onc...