各种距离和相似性

距离

Euclidean Distance

欧几里得距离是在三维世界中最为常用的距离.

Kendall tau Distance

计算两个排序的距离. 两个排序的每一对可能的搭配, 计算其中不相符的排序的比例.

如(wikipedia 例子):

Person A B C D E
Rank by Height 1 2 3 4 5
Rank by Weight 3 4 1 2 5

其可能的配对排序为:

Pair Height Weight Count
(A,B) 1 < 2 3 < 4
(A,C) 1 < 3 3 > 1 X
(A,D) 1 < 4 3 > 2 X
(A,E) 1 < 5 3 < 5
(B,C) 2 < 3 4 > 1 X
(B,D) 2 < 4 4 > 2 X
(B,E) 2 < 5 4 < 5
(C,D) 3 < 4 1 < 2
(C,E) 3 < 5 1 < 5
(D,E) 4 < 5 2 < 5

其中有四个配对的排序是不相同的, 所占的比例为所有的配对的 0.4, 其 Kendall tau 距离为 0.4.

Python 中有计算函数:

from scipy import stats
stats.kendalltau(x, y, initial_lexsort=True)

Hamming Distance

计算两个相同长度的序列的距离. 其计算方法是把所有不同的位置的个数比上整个序列的长度, 完全相同的时候距离为 0, 完全不同的时候距离为 1.

例如:

import scipy.spatial.distance as dist
dist.hamming([1, 2, 3, 4], [1, 2, 3, 4])
# 0.0
dist.hamming([1, 2, 3, 4], [1, 2, 2, 4])
# 0.25
dist.hamming([1, 2, 3, 4], [1, 3, 2, 4])
# 0.5
dist.hamming([1, 2, 3, 4], [4, 3, 2, 1])
# 1.0

相似性

cosine similarity

cosine similarity

cosine.similarity.numeric <- function(a, b, ...) {
    return(sum(a*b)/sqrt(sum(a^2)*sum(b^2)))
}
cosine.similarity.numeric(c(0,4), c(3,4))
# 0.8
By @Wolfson Liu in
Tags : #data,