1. 程式人生 > 程式設計 >Python 餘弦相似度與皮爾遜相關係數 計算例項

Python 餘弦相似度與皮爾遜相關係數 計算例項

夾角餘弦(Cosine)

也可以叫餘弦相似度。 幾何中夾角餘弦可用來衡量兩個向量方向的差異,機器學習中借用這一概念來衡量樣本向量之間的差異。

(1)在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角餘弦公式:

(2) 兩個n維樣本點a(x11,x12,…,x1n)和b(x21,x22,x2n)的夾角餘弦

類似的,對於兩個n維樣本點a(x11,x2n),可以使用類似於夾角餘弦的概念來衡量它們間的相似程度。

即:

餘弦取值範圍為[-1,1]。求得兩個向量的夾角,並得出夾角對應的餘弦值,此餘弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,餘弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角餘弦取最小值-1。當餘弦值為0時,兩向量正交,夾角為90度。因此可以看出,餘弦相似度與向量的幅值無關,只與向量的方向相關。

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
 
#方法一:根據公式求解
d1=np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))
 
#方法二:根據scipy庫求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=1-pdist(X,'cosine')

兩個向量完全相等時,餘弦值為1,如下的程式碼計算出來的d=1。

d=1-pdist([x,x],'cosine')

皮爾遜相關係數(Pearson correlation)

(1) 皮爾遜相關係數的定義

前面提到的餘弦相似度只與向量方向有關,但它會受到向量的平移影響,在夾角餘弦公式中如果將 x 平移到 x+1,餘弦值就會改變。怎樣才能實現平移不變性?這就要用到皮爾遜相關係數(Pearson correlation),有時候也直接叫相關係數。

如果將夾角餘弦公式寫成:

皮爾遜相關係數具有平移不變性和尺度不變性,計算出了兩個向量(維度)的相關性。

在python中的實現:'

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
 
#方法一:根據公式求解
x_=x-np.mean(x)
y_=y-np.mean(y)
d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))
 
#方法二:根據numpy庫求解
X=np.vstack([x,y])
d2=np.corrcoef(X)[0][1]

相關係數是衡量隨機變數X與Y相關程度的一種方法,相關係數的取值範圍是[-1,1]。相關係數的絕對值越大,則表明X與Y相關度越高。當X與Y線性相關時,相關係數取值為1(正線性相關)或-1(負線性相關)。