摘要:在近鄰推薦中,最常用的相似度是余弦相似度。這就是由于余弦相似度被向量長度歸一化后的結果。用余弦相似度計算出來,兩個用戶的相似度達到。余弦相似度適用于評分數據,杰卡德相似度適合用于隱式反饋數據。
今天,我們來聊聊協同過濾中的相似度計算方法有哪些。相似度的本質
推薦系統中,推薦算法分為兩個門派,一個是機器學習派,另一個就是相似度門派。機器學習派是后起之秀,而相似度派則是泰山北斗,以致撐起來推薦系統的半壁江山。近鄰推薦顧名思義就是在地理位置上住得近。如果用戶有個鄰居,那么社交軟件上把鄰居推薦給他在直觀上就很合理,當然,如果鄰居姓王的話,就不要推薦了。
這里說的近鄰,并不一定只是在三維空間下的地理位置的近鄰,在任意高維空間都可以找到近鄰,尤其是當用戶和物品的特征維度都很高時,要找到用戶隔壁的鄰居,就不是那么直觀,需要選擇好用適合的相似度度量辦法。
近鄰推薦的核心就是相似度計算方法的選擇,由于近鄰推薦并沒有采用最優化思路,所以效果通常取決于矩陣的量化方式和相似度的選擇。
相似度,與之配套的還有另一個概念就是距離,兩者都是用來量化兩個物體在高維空間中的親疏程度的,它們是硬幣的兩面。
推薦算法中的相似度門派,實際上有這么一個潛在假設:如果兩個物體很相似,也就是距離很近,那么這兩個物體就很容易產生一樣的動作。
如果兩篇新聞很相似,那么他們很容易被同一個人先后點擊閱讀,如果兩個用戶很相似,那么他們就很容易點擊同一個新聞。這種符合直覺的假設,大部分時候很奏效。
其實屬于另一門派的推薦算法——機器學習中,也有很多算法在某種角度看做是相似度度量。
例如,邏輯回歸或者線性回歸中,一邊是特征向量,另一邊是模型參數向量,兩者的點積運算,就可以看做是相似度計算,只不過其中的模型參數向量值并不是人肉指定的,而是從數據中由優化算法自動總結出來的。
在近鄰推薦中,最常用的相似度是余弦相似度。然而可以選用的相似度并不只是余弦相似度,還有歐氏距離、皮爾遜相關度、自適應的余弦相似度、局部敏感哈希等。使用場景各不相同,今天,我會分別一一介紹如下。
相似度的計算方法 數據分類
在真正開始巡視相似度計算方法前,我先給你把度量對象做個簡單分類。相似度計算對象是向量,或者叫做高維空間下的坐標,一個意思。那表示這個向量的數值就有兩種:實數值; 布爾值,也就是 0 或者 1。 下面介紹的不同計算方法適用于不同的數據種類。
1 歐氏距離 歐氏距離,如名字所料,是一個歐式空間下度量距離的方法。兩個物體,都在同一個空間下表示為兩個點,假如叫做 p 和 q,分別都是
n 個坐標。那么歐式距離就是衡量這兩個點之間的距離,從 p 到 q 移動要經過的距離。歐式距離不適合布爾向量之間。這個公式就是,每一個坐標上的取值相減,求平方和,最后輸出方根。
顯然,歐式距離得到的值是一個非負數,最大值是正無窮。通常相似度計算度量結果希望是 [-1,1] 或者 [0,1]
之間,所以歐式距離要么無法直接使用到這個場景中,要么需要經過二次轉化得到,我在文稿中放了一個最常用的轉化公式,你可以點擊
距離加一后取倒數。這個公式能夠把范圍為 0 到正無窮的歐式距離轉換為 0 到 1 的相似度。歐式距離度量的是空間中兩個點的絕對差異,適用于分析用戶能力模型之間的差異,比如消費能力、貢獻內容的能力等。
當然,雖然歐式距離計算兩個點的距離,實際上,點的坐標表示和我們常說的向量表示是同一回事,希望這句話是廢話,你早已懂得。
2 余弦相似度 大名鼎鼎的余弦相似度,度量的是兩個向量之間的夾角,其實就是用夾角的余弦值來度量,所以名字叫余弦相似度。當兩個向量的夾角為 0
度時,余弦值為 1,當夾角為 90 度時,余弦值為 0,為 180 度時,余弦值則為 -1。余弦相似度在度量文本相似度、用戶相似度、物品相似度的時候都較為常用;但是在這里需要提醒你一點,余弦相似度的特點:它與向量的長度無關。因為余弦相似度計算需要對向量長度做歸一化:
經過向量長度歸一化后的相似度量方式,背后潛藏著這樣一種思想:兩個向量,只要方向一致,無論程度強弱,都可以視為“相似”。
這簡直就是:招聘人才時只看價值觀,不考核代碼能力,只要肯干,搬磚嘛,誰搬不是搬。這樣做錯不錯呢?很顯然,有非常大的合理性。
比如,我用 140 字的微博摘要了一篇 5000
字的博客內容,兩者得到的文本向量可以認為方向一致,詞頻等程度不同,但是余弦相似度仍然認為他們是相似的。在協同過濾中,如果選擇余弦相似度,某種程度上更加依賴兩個物品的共同評價用戶數,而不是用戶給予的評分多少。這就是由于余弦相似度被向量長度歸一化后的結果。
余弦相似度對絕對值大小不敏感這件事,在某些應用上仍然有些問題。
舉個小例子,用戶 A 對兩部電影評分分別是 1 分和 2 分,用戶 B 對同樣這兩部電影評分是 4 分和 5
分。用余弦相似度計算出來,兩個用戶的相似度達到 0.98。這和實際直覺不符,用戶 A 明顯不喜歡這兩部電影。針對這個問題,對余弦相似度有個改進,改進的算法叫做調整的余弦相似度(Adjusted Cosine
Similarity)。調整的方法很簡單,就是先計算向量每個維度上的均值,然后每個向量在各個維度上都減去均值后,再計算余弦相似度。前面這個小例子,用調整的余弦相似度計算得到的相似度是 -0.1,呈現出兩個用戶口味相反,和直覺相符。
3 皮爾遜相關度 皮爾遜相關度,實際上也是一種余弦相似度,不過先對向量做了中心化,向量 p 和 q 各自減去向量的均值后,再計算余弦相似度。
皮爾遜相關度計算結果范圍在 -1 到 1。-1 表示負相關,1 比表示正相關。皮爾遜相關度其實度量的是兩個隨機變量是不是在同增同減。
如果同時對兩個隨機變量采樣,當其中一個得到較大的值另一也較大,其中一個較小時另一個也較小時,這就是正相關,計算出來的相關度就接近
1,這種情況屬于沆瀣一氣,反之就接近 -1。由于皮爾遜相關度度量的時兩個變量的變化趨勢是否一致,所以不適合用作計算布爾值向量之間相關度,因為兩個布爾向量也就是對應兩個 0-1
分布的隨機變量,這樣的隨機變量變化只有有限的兩個取值,根本沒有“變化趨勢,高低起伏”這一說。4 杰卡德(Jaccard)相似度
杰卡德相似度,是兩個集合的交集元素個數在并集中所占的比例。由于集合非常適用于布爾向量表示,所以杰卡德相似度簡直就是為布爾值向量私人定做的。對應的計算方式是:分子是兩個布爾向量做點積計算,得到的就是交集元素個數; 分母是兩個布爾向量做或運算,再求元素和。
余弦相似度適用于評分數據,杰卡德相似度適合用于隱式反饋數據。例如,使用用戶的收藏行為,計算用戶之間的相似度,杰卡德相似度就適合來承擔這個任務。總結 今天,我介紹了常用的幾種相似度計算方法,以及其各自的使用場景。
這里的場景是按照數據形式劃分的,按照向量維度取值是否是布爾值來看,杰卡德相似度就只適合布爾值向量,余弦相似度彈性略大,適合兩種向量。歐式距離度量的是絕對差異,余弦相似度度量的是方向差異,但是調整的余弦相似度則可以避免這個弱點。
現在留給你一個問題:如果在一個社交網絡中,要計算好友的相似度,你會選擇哪種相似度來做?歡迎留言討論。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44685.html
摘要:最近寫搜索引擎文章寫多了,來一篇之前寫的老文,給那些對推薦算法感興趣想入門的人吧,最近也在做推薦廣告系統,又翻出來看了看。 最近寫搜索引擎文章寫多了,來一篇之前寫的老文,給那些對推薦算法感興趣想入門的人吧,最近也在做推薦廣告系統,又翻出來看了看。 什么是推薦算法 推薦算法最早在1992年就提出來了,但是火起來實際上是最近這些年的事情,因為互聯網的爆發,有了更大的數據量可以供我們使用,推...
摘要:機器學習派是后起之秀,而相似度派則是泰山北斗,以致撐起來推薦系統的半壁江山。純來做推薦基本不靠譜,所以我們來試一下基于和相似度來實現一個推薦系統。 對于內容類網站或者APP,搜索和推薦已經是標配。搜索相對容易,使用Elasticsearch簡單配置一下就可以做出一個性能還不錯效果也還可以的搜索引擎,然而,推薦系統的話,沒有專門的團隊實踐起來還挺困難的。 網上推薦系統相關的理論非常多,但...
摘要:機器學習派是后起之秀,而相似度派則是泰山北斗,以致撐起來推薦系統的半壁江山。純來做推薦基本不靠譜,所以我們來試一下基于和相似度來實現一個推薦系統。 對于內容類網站或者APP,搜索和推薦已經是標配。搜索相對容易,使用Elasticsearch簡單配置一下就可以做出一個性能還不錯效果也還可以的搜索引擎,然而,推薦系統的話,沒有專門的團隊實踐起來還挺困難的。 網上推薦系統相關的理論非常多,但...
摘要:如果做推薦系統不知道基于物品的協同過濾,那等同于做程序員不懂得冒泡排序。基于物品的八卦基于物品的協同過濾算法誕生于年,是由亞馬遜首先提出的,并在年由其發明者發表了相應的論文。 不管你有沒有剁過手,你對看了這個商品的還看了這樣的推薦形式一定不陌生。無論是貓還是狗,或者是其他電商網站,這樣的推薦產品可以說是推薦系統的標配了。 類似的還有,如點評標記類網站的喜歡了這部電影的還喜歡了,社交媒...
閱讀 553·2023-04-26 02:59
閱讀 691·2023-04-25 16:02
閱讀 2153·2021-08-05 09:55
閱讀 3542·2019-08-30 15:55
閱讀 4639·2019-08-30 15:44
閱讀 1796·2019-08-30 13:02
閱讀 2192·2019-08-29 16:57
閱讀 2287·2019-08-26 13:35