计算距离的五种方法
距离计算方法
在机器学习中,我们常常需要计算不同点之间的距离。下面是几种常见的距离计算方法:
欧几里得距离
欧几里得距离是两点之间的直线距离,即勾股定理中的斜边长度。假设有两个点A(x1, y1)和B(x2, y2),则它们之间的欧几里得距离为:
d(A,B) = sqrt((x2-x1)^2 + (y2-y1)^2)
曼哈顿距离
曼哈顿距离是两点在网格上行走的距离,即两点在横纵坐标上的距离之和。假设有两个点A(x1, y1)和B(x2, y2),则它们之间的曼哈顿距离为:
d(A,B) = |x2-x1| + |y2-y1|
Euclidean-欧几里得
manhatten-曼哈顿
minowsk-闵可夫斯基
chebyshew-切比雪夫
cosine distance-余弦距离
闵可夫斯基距离
闵可夫斯基距离是欧几里得距离和曼哈顿距离的一般化。假设有两个点A(x1, y1)和B(x2, y2),则它们之间的闵可夫斯基距离为:
d(A,B) = (|x2-x1|^p + |y2-y1|^p)^(1/p)
当p=1时,变成曼哈顿距离;当p=2时,变成欧几里得距离。
切比雪夫距离
切比雪夫距离是两点在网格上行走的最大距离,即横纵坐标之差的最大值。假设有两个点A(x1, y1)和B(x2, y2),则它们之间的切比雪夫距离为:
余弦距离
在讲余弦距离之前,我们必须弄清楚什么是向量的点乘。
余弦距离是两个向量之间的夹角余弦值,它衡量的是两个向量方向上的差异。假设有两个向量A和B,则它们之间的余弦距离为:
d(A,B) = cos(theta) = (A*B) / (|A| * |B|)
其中,A*B表示A和B的点积,|A|和|B|分别表示A和B的模长。
为什么我老师给的公式是1-cos(theta)
因为余弦相似度的取值范围是[-1, 1],越接近1表示两个向量越相似,越接近-1表示两个向量越不相似。而距离度量一般是越小表示越相似,因此一般会使用1减去余弦相似度来作为余弦距离。这样,余弦距离的取值范围就是[0, 2],越接近0表示两个向量越相似,越接近2表示两个向量越不相似。
余弦距离的应用
余弦距离广泛应用于文本分类、信息检索、图像处理等领域。在文本分类中,我们可以将文档表示为词袋模型,然后计算文档之间的余弦相似度,从而进行分类。在信息检索中,我们可以将用户查询表示为向量,然后计算查询向量和文档向量之间的余弦相似度,从而实现搜索结果的排序。在图像处理中,我们可以将图像表示为向量,然后计算图像之间的余弦距离,从而实现图像的相似性比较和检索。
余弦距离的优点在于它不受向量长度的影响,而只取决于它们的夹角。这使得余弦距离在高维空间中非常有效,因为在高维空间中,向量之间的夹角往往更能反映它们之间的关系。另外,余弦距离不需要对向量进行归一化,因为在计算中除了向量的模长,其它部分都相同,所以可以省略这个步骤。