问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习中的相似性度量方法:闵可夫斯基距离

创作时间:
作者:
@小白创作中心

机器学习中的相似性度量方法:闵可夫斯基距离

引用
CSDN
1.
https://m.blog.csdn.net/augustme/article/details/139903405

闵可夫斯基距离(Minkowski Distance)是一种在多维空间中衡量两点间距离的方法,它是对多个其他常见距离度量方法(如曼哈顿距离、欧式距离和切比雪夫距离)的一种概括和推广。

计算公式

两个向量或者两个点A(x1, x2, x3, ..., xn)和B(y1, y2, y3, ..., yn)之间的闵可夫斯基距离定义公式为:

d(A, B) = (∑i=1n |xi - yi|p)1/p

其中,p是一个正实数参数。

  • 当p=1时,闵可夫斯基距离退化为曼哈顿距离(绝对距离、城市街区距离),即:

d(A, B) = ∑i=1n |xi - yi|

  • 当p=2时,闵可夫斯基距离退化为欧几里得距离(欧氏距离),即:

d(A, B) = √(∑i=1n (xi - yi)2)

  • 当p→∞时,闵可夫斯基距离变为切比雪夫距离(棋盘距离),即两点在各维度上距离的最大值:

d(A, B) = lim p→∞ (∑i=1n |xi - yi|p)1/p = max(|xi - yi|)

闵可夫斯基距离由于包含了多种距离度量,因此具有较广的适用范围。根据具体的应用场景和数据特性,可以选择合适的p值来定义距离。

代码实现

下面是用Python实现的闵可夫斯基距离计算代码:

import numpy as np

def minkowski_distance(x, y, p=2):
    """
    计算两个点之间的闵可夫斯基距离

    参数:
    x, y: 数组或列表,代表两个点的坐标
    p: 正实数,闵可夫斯基距离的指数

    返回:
    d: 闵可夫斯基距离
    """
    # 确保x和y是NumPy数组
    x = np.array(x)
    y = np.array(y)

    # 检查x和y的维度是否相同
    if x.shape != y.shape:
        raise ValueError("输入的点必须具有相同的维度")

    # 计算闵可夫斯基距离
    diff = np.abs(x - y)
    distance = np.sum(diff ** p) ** (1 / p)

    return distance

# 示例数据
A = [1, 2, 3]
B = [2, 3, 5]

# 计算欧几里得距离 (p=2)
euclidean_distance = minkowski_distance(A, B, p=2)
print(f"欧几里得距离: {euclidean_distance}")

# 计算曼哈顿距离 (p=1)
manhattan_distance = minkowski_distance(A, B, p=1)
print(f"曼哈顿距离: {manhattan_distance}")

# 计算切比雪夫距离 (使用大的p值,例如1000,来近似)
chebyshev_distance = minkowski_distance(A, B, p=10000)  # 注意:这不是严格的切比雪夫距离,近似
print(f"切比雪夫距离近似: {chebyshev_distance}")

# 计算闵可夫斯基距离 (p=3)
minkowski_distance_p3 = minkowski_distance(A, B, p=3)
print(f"闵可夫斯基距离 (p=3): {minkowski_distance_p3}")

输出结果:

欧几里得距离: 2.449489742783178
曼哈顿距离: 4.0
切比雪夫距离近似: 1.0000693171203765
闵可夫斯基距离 (p=3): 2.154434690031884

通过这个例子,我们可以看到不同p值下计算出的距离值,这有助于理解闵可夫斯基距离的灵活性和适用性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号