提到檢索的方法,比如KNN算法,這些都需要用到“距離”這個尺度去度量兩者的近似程度。但是,距離也有很多種,除了我們熟悉的歐氏距離之外,其實還有很多。。。
余弦距離:
是一種衡量兩個向量相關程度的尺度。利用兩個向量的余弦值,由于在0到90度之間,的值為減函數,所以當cos(theta)值越大,theta值越小。體現的是兩個向量方向上的差異。對數值絕對值不敏感。
對于向量x=(x1,x2,x3,...,xn)和向量y=(y1,y2,y3,...yn)之間的夾角:
其更注重兩個向量方向的夾角之間的距離,而不是歐氏距離里的直接距離。
歐氏距離與余弦距離:
歐氏距離能夠體現個體數值特征的絕對差異,所以更多的用于需要從維度的數值大小中體現差異的分析,如使用用戶行為指標分析用戶價值的相似度或差異;而余弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用于使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因為余弦相似度對絕對數值不敏感)。
明可夫斯基距離(Minkowski Distance)
明氏距離是歐氏距離的推廣,是對多個距離度量公式的概括性的表述。公式如下:
p可以取任意正整數。
皮爾森相關系數(Pearson Correlation Coefficient):
即相關分析中的相關系數r,分別對X和Y基于自身總體標準化后計算空間向量的余弦夾角。公式如下:
Jaccard相似系數(Jaccard Coefficient):
Jaccard系數主要用于計算符號度量或布爾值度量的個體間的相似度,因為個體的特征屬性都是由符號度量或者布爾值標識,因此無法衡量差異具體值的大小,只能獲得“是否相同”這個結果,所以Jaccard系數只關心個體間共同具有的特征是否一致這個問題。如果比較X與Y的Jaccard相似系數,只比較xn和yn中相同的個數,公式如下:
針對余弦相似度對數值大小的不敏感,出現了修正余弦相似度(Adjusted cosine similaarity):每個數值都減去一個自己的均值,這樣歸一化后,可以使得向量夾角的距離變得符合現實。
雖然余弦相似度對個體間存在的偏見可以進行一定的修正,但是因為只能分辨個體在維之間的差異,沒法衡量每個維數值的差異,會導致這樣一個情況:比如用戶對內容評分,5分制,X和Y兩個用戶對兩個內容的評分分別為(1,2)和(4,5),使用余弦相似度得出的結果是0.98,兩者極為相似,但從評分上看X似乎不喜歡這2個內容,而Y比較喜歡,余弦相似度對數值的不敏感導致了結果的誤差,需要修正這種不合理性,就出現了調整余弦相似度,即所有維度上的數值都減去一個均值,比如X和Y的評分均值都是3,那么調整后為(-2,-1)和(1,2),再用余弦相似度計算,得到-0.8,相似度為負值并且差異不小,但顯然更加符合現實。
哈明距離(漢明距離)
漢明距離是使用在數據傳輸差錯控制編碼里面的,漢明距離是一個概念,它表示兩個(相同長度)字對應位不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字符串進行異或運算,并統計結果為1的個數,那么這個數就是漢明距離。
比如:
1011101 與 1001001 之間的漢明距離是 2。
2143896 與 2233796 之間的漢明距離是 3。
"toned" 與 "roses" 之間的漢明距離是 3。
這種方法往往可以進行一定的模板匹配,計算與模板的接近程度。