相似度分析

2021-09-14 07:04:02 字數 2183 閱讀 5132

最近了解了幾個相似度分析相關的演算法,整理一下。

曼哈頓距離又叫城市街區距離,形象的理解一下就是你要從城市的乙個地方到另乙個地方,怎麼計算你行駛的距離。如下圖,想象一下,兩個點之間是無數的高樓大廈。。。

那麼怎麼計算這兩個點的距離呢?

放在座標系裡,我們很快就能算出這兩個點的曼哈頓距離:(以下**均為 haskell 風格的偽**)

-- 假設:a (x1, y1), b (x2, y2)

d = abs(x1 - x2) + abs(y1 - y2)

這是二維平面上兩個點的計算方式,我們再擴充套件一下到 n 維世界:

-- 假設:a (x1, x2, ..., xn), b (y1, y2, ..., yn), a/b 的座標集用列表表示

d = sum $ zipwith (\x y -> abs(x - y)) a b

這個距離如果放在二維世界來看的話,說的就是兩點之間的直線距離:

至於這個距離的計算,都已經算是常識了:

-- a (x1, y1), b (x2, y2)

d = sqrt ((x1 - x2)^2 + (y1 - y2)^2)

脫離二維到 n 維:

-- a (x1, x2, ..., xn), b (y1, y2, ..., yn), a/b 的座標集用列表表示

d = sqrt $ sum $ zipwith (\x y -> (x - y)^2) a b

余弦相似度,是指通過夾角的余弦大小來判斷兩個資料集的差異程度

(41, 43), b (82, 86) -> 向量 l (x1, y1)

(43, 41), d (86, 82) -> 向量 m (x2, y2)

-- l 和 m 的夾角余弦計算

coslm = (x1 * x2 + y1 * y2) / (sqrt (x1^2 + y1^2) * sqrt (x2^2 + y2^2))

公升級到 n 維空間後:

-- l (x1, x2, ..., xn), m (y1, y2, ..., yn), l/m 用列表表示

coslm = (sum $ zipwith (*) l m) / ((sqrt $ sum $ zipwith (*) l l) *

(sqrt $ sum $ zipwith (*) m m))

余弦值的取值範圍是 [-1, 1],該值越大,表示兩個向量的夾角越小,資料越相似。兩個向量方向重合時,值為1,相反時值為 -1。

很多人用余弦相似度來比較文字是否相似,比如:

與上面的余弦相似度的計算對比一下,發現分子分母都多剪了乙個平均值。

為什麼要減這個平均值呢?

當我們在大量資料中挖掘資訊時,很多資料可能在不同維度上會有不同情況的缺失,那我們在計算相似度時怎麼處理這些缺失呢?皮爾遜相關係數的方式是,把這些缺失都當做 0 ,然後讓所有其他維度減去該向量個維度的平均值

pearson xs ys = (n * sumxy - sumx * sumy) /

sqrt ( (n * sumx2 - sumx * sumx) *

(n * sumy2 - sumy * sumy) )

where n = fromintegral (length xs)

sumx = sum xs

sumy = sum ys

sumx2 = sum $ zipwith (*) xs xs

sumy2 = sum $ zipwith (*) ys ys

sumxy = sum $ zipwith (*) xs ys

相似度演算法太多了,先簡單介紹一下這幾個。現在有了這幾個錘子,我要去專案裡找找有沒有合適的釘子了 ? ? ?

相似度演算法之余弦相似度

余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。余弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,這就叫 余弦相似性 上圖兩個向量a,b的夾角很小可以說a向量和b向量有很高的的相似性,極端情況下,a和b向量完全重合。如下圖 如上圖二 可以認...

相似度計算之余弦相似度

一 定義及概念 余弦取值範圍為 1,1 求得兩個向量的夾角,並得出夾角對應的余弦值,此余弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,余弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角余弦取最小值 1。當余弦值為0時,兩向量正交,夾角為90度。因此可以看出,余...

計算向量相似度 余弦相似度

1.余弦相似度可用來計算兩個向量的相似程度 對於如何計算兩個向量的相似程度問題,可以把這它們想象成空間中的兩條線段,都是從原點 0,0,出發,指向不同的方向。兩條線段之間形成乙個夾角,如果夾角為0度,意味著方向相同 線段重合 如果夾角為90度,意味著形成直角,方向完全不相似 如果夾角為180度,意味...