iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
自我挑戰組

終極大數據地獄系列 第 18

# 18 數據上的各種距離(3)

  • 分享至 

  • xImage
  •  
tags: tags: 2021IT

#18數據上的各種距離(3)

夾角餘弦(Cosine)

幾何中的夾角餘弦可用來衡量兩個向量方向的差異,當兩個向量的方向重合時夾角餘弦取最大值1,當兩個向量的方向完全相反夾角餘弦取最小值-1,兩個方向正交時夾角餘弦取值為0

  • 二維平面兩點 https://chart.googleapis.com/chart?cht=tx&chl=A(x_1%2C%20y_1)https://chart.googleapis.com/chart?cht=tx&chl=B(x_2%2C%20y_2) 間的夾角餘弦
    $\cos{\theta}=\dfrac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}}$

  • 兩個 n 維向量 https://chart.googleapis.com/chart?cht=tx&chl=A(x_%7B11%7D%2C%20x_%7B12%7D%2C%20...x_%7B1n%7D)https://chart.googleapis.com/chart?cht=tx&chl=B(x_%7B21%7D%2C%20x_%7B22%7D%2C%20...x_%7B2n%7D) 間的夾角餘弦
    $\cos{\theta} = \dfrac{AB}{|A||B|}$ 即 $\cos{\theta}=\dfrac{\displaystyle\sum_{k=1}^n{x_{1k}x_{2k}}}{\sqrt{\displaystyle\sum_{k=1}^n{x_{1k}^2}}\sqrt{\displaystyle\sum_{k=1}^n{x_{2k}^2}}}$

用python實現夾角餘弦

import numpy as np


def get_cosine(a, b):
    a_norm = np.linalg.norm(a)
    b_norm = np.linalg.norm(b)
    cos = np.dot(a, b) / (a_norm * b_norm)
    return cos


if __name__ == '__main__':
    a = np.array([1, 2, 5])
    b = np.array([7, 2, 4])
    print(get_cosine(a, b)) # 0.68135982250898
    a = np.array([3, 4, 9])
    b = np.array([8, 1, 4]) # 0.6906921687873878
    print(get_cosine(a, b))

漢明距離(Hamming Distance)

兩個等長字串s1和s2之間的漢明距離是兩個字符串對應位置的不同字符的個數,就是將一個字符串變換成另外一個字符串所需要替換的字符個數

用python實現

import numpy as np


def get_dist(a, b):
    a = np.array(list(a))
    b = np.array(list(b))
    return np.count_nonzero(a!=b)


if __name__ == '__main__':
    a = 'aaaac'
    b = 'bbaac'
    print(get_dist(a, b)) # 2
    a = '1143253'
    b = '1155113'
    print(get_dist(a, b)) # 4

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

尚未有邦友留言

立即登入留言