iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
自我挑戰組

終極大數據地獄系列 第 16

#16 數據上的各種距離(1)

  • 分享至 

  • xImage
  •  

講到大數據就免不了提及一些演算法,但在我們開始介紹演算法之前,先介紹在數據中各種距離代表得含義

閔可夫基斯距離(Minkowski Distance)

嚴格上來講閔可夫司機距離不算一種距離,而是一組距離的定義

兩組?維變數https://chart.googleapis.com/chart?cht=tx&chl=A(x_%7B11%7D%2Cx_%7B12%7D...x_%7B1n%7D)https://chart.googleapis.com/chart?cht=tx&chl=B(x_%7B21%7D%2C%20x_%7B22%7D...x_%7B2n%7D)間的閔可夫司機距離定義為:

https://chart.googleapis.com/chart?cht=tx&chl=d%20%3D%20%5Csqrt%5B%5Ep%5D%7B%5Cdisplaystyle%5Csum_%7Bk%3D1%7D%5E%7Bn%7D(x_%7B1k%7D%20-%20x_%7B2k%7D)%5Ep%7D

其中p是一個變參數

  • 當p=1時,就是曼哈頓距離
  • 當p=2時,就是歐氏距離
  • 當p→♾時,就是謝比雪夫距離

根據變參數的不同,閔可夫基斯距離可以表示一種距離

歐氏距離(Euclidean Distance)

歐氏距離(L2範數),來自歐氏空間中的兩點間的距離公式

  • 二維平面上的兩點https://chart.googleapis.com/chart?cht=tx&chl=A(x_1%2Cy_1)https://chart.googleapis.com/chart?cht=tx&chl=B(x_2%2C%20y_2)間的歐氏距離:
    https://chart.googleapis.com/chart?cht=tx&chl=d_%7B12%7D%20%3D%20%5Csqrt%7B(x_1-x_2)%5E2%2B(y_1-y_2)%5E2%7D
  • 三維空間上的兩點https://chart.googleapis.com/chart?cht=tx&chl=A(x_1%2Cy_1%2Cz_1)https://chart.googleapis.com/chart?cht=tx&chl=B(x_2%2Cy_2%2Cz_2)間的歐氏距離:
    https://chart.googleapis.com/chart?cht=tx&chl=d_%7B12%7D%20%3D%20%5Csqrt%7B(x_1-x_2)%5E2%20%2B%20(y_1-y_2)%5E2%20%2B%20(z_1-z_2)%5E2%7D
  • 兩個?維向量https://chart.googleapis.com/chart?cht=tx&chl=A(x_%7B11%7D%2Cx_%7B12%7D...x_%7B1n%7D)https://chart.googleapis.com/chart?cht=tx&chl=B(x_%7B21%7D%2C%20x_%7B22%7D...x_%7B2n%7D)間的歐氏距離:
    https://chart.googleapis.com/chart?cht=tx&chl=d_%7B12%7D%20%3D%20%5Csqrt%7B%5Cdisplaystyle%5Csum_%7Bk%3D1%7D%5En(x_%7B1k%7D-x_%7B2k%7D)%5E2%7D

用python實現歐氏距離:

import numpy as np


def get_dist(a, b):
    """
    a:  A點
    b:  B點
    """
    return np.sqrt(sum(np.power((a - b), 2)))


if __name__ == '__main__':
    a = np.array([1, 2, 3])
    b = np.array([1, 2, 3])
    print(get_dist(a, b)) # 0
    a = np.array([1, 2, 3])
    b = np.array([3, 1, 5])
    print(get_dist(a, b)) # 3.0

上一篇
#15 ARIMA教學
下一篇
#17 數據上的各種距離(2)
系列文
終極大數據地獄24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言