zoukankan      html  css  js  c++  java
  • 【机器学习】距离公式分析

    机器学习中的距离

    机器学习任务中,常用的距离公式有以下几种:

    1. 欧式距离(又称欧几里得距离)
    2. 曼哈顿距离(又称城市街区距离)
    3. 切比雪夫距离
    4. 闵氏距离(又称闵可夫斯基距离)
    5. 标准化欧式距离
    6. 余弦距离

    (一)欧式距离

    公式:

    [d = sqrt{(a-b)^T(a-b)} ]

    其中 (a, b) 为两个 (n) 维向量;

    理解:

    欧式距离在二维空间中代表某个点到另一个点的直线距离。扩展到 (n) 维空间,指两个点在 (n) 维空间中的真实距离。

    局限:

    1. 假如两个点分别为 A(1, 1000), B(3, 60),则第二个维度对距离 (d) 的计算有更大的贡献。这说明我们只是对向量中各元素分别进行了处理,但并未考虑维度之间的关系,以及不同维度对距离的贡献程度。
    2. 这种方法认为两点之间始终可以通过直线距离到达,因此更适用于欧式空间。

    (二)曼哈顿距离

    公式:

    [d = sum_{k=1}^n|a_k - b_k| ]

    理解:

    前面提到,欧式距离有一局限,即认为两点之间始终可以通过直线距离到达。但是现实世界中,从原点到目标点并不都能通过直线到达,因此引入曼哈顿距离。曼哈顿距离考虑了更多的实际因素,在曼哈顿世界中,我们只能沿着线画出的格子行进。

    局限:

    与欧式距离相似,认为各个维度对距离 (d) 的贡献是一样的,即各个维度权重相同。解决方法:很多维度可以通过预处理转化成曼哈顿距离,而在预处理阶段可以解决贡献权重问题。


    (三)切比雪夫距离

    公式:

    [d = max_{k}|a_k-b_k| \ ]

    另一种形式:

    [d = lim_{p ightarrow infin} left(sum_{k=1}^{n} |a_k-b_k|^p ight)^{frac{1}{p}} ]

    理解:

    欧氏距离只能直线走,曼哈顿距离只能沿着划定的格子边缘走,而切比雪夫中说的距离则是两者的结合体(即可直线走,也可沿着格子走)。
    两个点之间的距离定义为:各坐标数值差的绝对值的最大值。此距离中,加入了优化的成分,通过最值来定义距离。

    以国际象棋为例,国王走一步能够移动到相邻的8个方格中的任意一个,那么国王从格子 ((x_1,y_1)) 走到格子 ((x_2,y_2)) 最少需要多少步?自己走走试试。你会发现最少步数总是 (max( | x_2-x_1 | , | y_2-y_1 | )) 步 。

    在上面的距离中可以看出该距离计算适用的场景。像曼哈顿距离一样,需要将空间划分成网格,然后以网格为单位来进行度量。但此距离中,允许你走8个方向。而曼哈顿距离中,只允许你走4个方向。


    (四)闵氏距离

    公式:

    [d = left(sum_{k=1}^{n}|a_k-b_k|^p ight)^{frac{1}{p}} ]

    理解:

    闵氏距离不是一种距离,而是一组距离。(p=1) 时就是曼哈顿距离,(p=2) 时就是欧式距离,(p ightarrow infin) 时就是切比雪夫距离。因此根据不同的参数 (p) ,闵氏距离可以表示多种距离。

    局限:

    举个例子:二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。简单来说,闵氏距离主要有两个缺点:

    1. 将各个分量的量纲(scale)(也就是“单位”)同等看待,这是不可取的
    2. 没有考虑各个分量的分布(期望,方差等)可能是不同的

    (五)标准化欧氏距离

    公式:

    [d = sqrt{sum_{k=1}^n left( frac{a_k-b_k}{delta_k} ight)^2} ]

    其中 (delta_k) 是第 (k) 维的标准差。

    理解:

    由于向量各维分量的分布不一致,所以先将各维度分量标准化到 均值、方差 相同(均值为 0,方差为 1),再计算欧式距离,则避免了欧式距离的“量纲”局限。换种角度看,如果将 ({1}/{{delta_k}^2}) 看作权重,则这个公式可看作是加权欧式距离。


    (六)余弦距离

  • 相关阅读:
    一道打印的面试题
    Quartz使用总结
    子类和父类之间的静态代码块、静态方法、非静态代码块、构造函数之间的执行关系
    springboot使用 @EnableScheduling、@Scheduled开启定时任务
    springboot的Interceptor、Filter、Listener及注册
    ConcurrentHashMap 的工作原理及代码实现
    为什么Hashtable ConcurrentHashmap不支持key或者value为null
    Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
    Android 自定义title 之Action Bar
    Android常用控件之GridView与ExpandableListView的用法
  • 原文地址:https://www.cnblogs.com/xxxxxxxxx/p/11657807.html
Copyright © 2011-2022 走看看