人工智能中文网
  • 主页
  • 线代考研视频
  • 线性代数
  • Python机器学习与算法
  • 大数据与机器学习
  • Python基础入门教程
  • 人工智能中文网
    教程目录
    阅读:

    欧氏距离算法详解(含公式)

    < 上一篇:众数 下一篇:曼哈顿距离 >
    回想一下计算标准差的过程,“把每个学生每门课的成绩减去平均分,再把这些差值分别平方,将这些平方的结果再加和,之后除以学生数量,最后开平方”。

    注意中间这个过程:“每门课程的成绩减去平均分,再把差值平方”,这其实就是在求“欧氏距离”的过程。

    所谓欧氏距离中的“欧”指的是被称作几何之父的古希腊数学家欧几里得。欧氏距离是在其巨著《几何原本》中提到的一个非常重要的概念。欧氏距离的定义大概是这样的:在一个N维度的空间里,求两个点的距离,这个距离肯定是一个大于等于0的数字(也就是说没有负距离,最小也就是两个点重合的零距离),那么这个距离需要用两个点在各自维度上的坐标相减,平方后加和再开平方。

    欧氏距离使用的范围实在是太广泛了,我们几乎每天都在使用。

    一维的应用就相当多,如在地图上有一条笔直的东西向或者南北向的路,在上面有两个点,怎么量取它们在地图上的距离?数轴标识如图4-12所示,可以用尺子的刻度贯穿两个点,大值减小值就能直接得出结果,最多再乘以一个比例尺就能得到实际的大小。或者用其中一个点的读数减去另外一个点的读数,不管结果正负,将它平方后再开方,还是一个非负数的值,这两种办法本质上没有什么区别。地图明明是一个二维平面的概念,为什么非要说是一维的呢?只是因为量取的手段和一维一样,只参考一个维度的读数就可以了。


    图 1 欧氏距离一维的应用

    二维的应用也是很多的,其中最典型的莫过于人们熟知的“勾股定理”。公式如下:


    即:


    在一个直角三角形里,斜边长度等于两个直角边平方之和再开方。这其实就是求斜边两个端点的欧氏距离,别忘了这里有一个隐含条件,就是斜边距离是不能用尺子直接去量的,只能用两个已知的直角边的长度做条件。至于斜边长度等于两个直角边之和的定理在不同的阶段用三角函数作为工具证明过,用面积作为工具证明过,用相似三角形的方法证明过,方法实在是太多了,在百度网页搜索中我们至少可以找到 16 种完全不同而且都是正确的方法。图 2 所示为一种二维空间中的向量计算方式示意图,在知道向量分别在 x 轴和 y 轴的投影之后就能用勾股定理求出欧氏距离。


    图 2 二维空间中的向量计算

    推广到三维的应用,还是可以使用勾股定理的思路进行计算。每个点都向3个平面各做一条垂线段,可以看出,两个点的距离其实就是一个长方体的对角线长度。最后得到距离为 3 个维度的坐标差值分别平方加和再开平方:


    这只是在两个平面空间中用了两次勾股定理而已。

    例如,在忽略地球自身弧度的情况下,求两个距离较近的不同高度的楼宇顶部距离,完全可以使用这种欧氏距离的定义直接求解。如图 3 所示,在三维空间中,实际需要使用两次二维空间上的勾股定理就能计算出三维空间中的两点之间的欧氏距离。


    图 3 三维空间中的欧氏距离应用

    根据上述一维、二维、三维的欧氏距离计算方法:

    可以推断四维、五维一直到N维空间上的欧氏距离的计算公式,一定是 N 个维度的“读数”差的平方再开方。

    欧氏距离除了刚刚举的例子,在后面数据挖掘部分会有很多应用场景。它主要用来描述两个多维点之间的“距离”,遗憾的是,三维以下的点和点的距离通过刚刚的讲解很容易出现画面感,四维和四维以上的距离就只能凭想象了,只是在计算中确实存在且有对应的含义解释。这种解释通常也用来直接判断两个点在多维关系上谁与谁更“近”,虽然超过三维的情况下这个“近”已经没有办法用手边的工具量出来。例如,在一个五维空间里,A 点和 B 点的距离为 6,A 点和 C 点的距离为 10,那么就可以认为 B 点到 A 点的距离比 C 点到 A 点的距离更近,这样就足够了。
    < 上一篇:众数 下一篇:曼哈顿距离 >