距离
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