目录
距离对应的结构体
44 enum MetricType {
45 METRIC_INNER_PRODUCT = 0, ///< maximum inner product search 向量内积
46 METRIC_L2 = 1, ///< squared L2 search 定义了2种衡量相似度的方式,欧式距离
47 METRIC_L1, ///< L1 (aka cityblock) 欧氏距离(L2)或曼哈顿距离(L1)
48 METRIC_Linf, ///< infinity distance
49 METRIC_Lp, ///< L_p distance, p is given by metric_arg
50
51 /// some additional metrics defined in scipy.spatial.distance
52 METRIC_Canberra = 20,
53 METRIC_BrayCurtis,
54 METRIC_JensenShannon,
55
56 };
范数
理解L1,L2 范数
L1,L2 范数即 L1-norm 和 L2-norm,自然,有L1、L2便也有L0、L3等等。因为在机器学习领域,L1 和 L2 范数应用比较多,比如作为正则项在回归中的使用 Lasso Regression(L1) 和 Ridge Regression(L2)。
因此,此两者的辨析也总被提及,或是考到。不过在说明两者定义和区别前,先来谈谈什么是范数(Norm)吧。
什么是范数?
在线性代数以及一些数学领域中,norm 的定义是
a function that assigns a strictly positive length or size to each vector in a vector space, except for the zero vector. ——Wikipedia
简单点说,一个向量的 norm 就是将该向量投影到 [0, ) 范围内的值,其中 0 值只有零向量的 norm 取到。看到这样的一个范围,相信大家就能想到其与现实中距离的类比,于是在机器学习中 norm 也就总被拿来表示距离关系:根据怎样怎样的范数,这两个向量有多远。
上面这个怎样怎样也就是范数种类,通常我们称为p-norm,严格定义是:
其中当 p 取 1 时被称为 1-norm,也就是提到的 L1-norm,同理 L2-norm 可得。
L1 和 L2 范数的定义
根据上述公式 L1-norm 和 L2-norm 的定义也就自然而然得到了。
先将 p=1 代入公式,就有了 L1-norm 的定义:
然后代入 p=2,L2-norm 也有了:
L2 展开就是熟悉的欧几里得范数:
题外话,其中 L1-norm 又叫做 taxicab-norm 或者 Manhattan-norm(曼哈顿距离),可能最早提出的大神直接用在曼哈顿区坐出租车来做比喻吧。下图中绿线是两个黑点的 L2 距离,而其他几根就是 taxicab 也就是 L1 距离,确实很像我们平时用地图时走的路线了。
cosine similarity
cosine distance = 1 - cosine similarity
Hammi汉明距离
汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量
比如:1011101 与 1001001 之间的汉明距离是 2
切比雪夫距离
各坐标数值差的最大值,在2维空间中的计算公式为:
这两种计算欧氏距离平方的方式在性能
计算距离平方,有 “fast" 与 "accurate" 两种方法,其中,"fast" 使用 ,而 ”accurate" 采用 , 为何后者更慢而更精确?因为直觉上,后者只用了一次相减、一次平方啊。
faiss 距离 faiss 使用的距离 faiss余弦 faiss余弦距离
参考:
https://www.jianshu.com/p/6cf5d60db634
https://blog.csdn.net/weixin_41770169/article/details/80659236