Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計(jì)算實(shí)例
夾角余弦(Cosine)
也可以叫余弦相似度。 幾何中夾角余弦可用來(lái)衡量?jī)蓚€(gè)向量方向的差異,機(jī)器學(xué)習(xí)中借用這一概念來(lái)衡量樣本向量之間的差異。
(1)在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角余弦公式:
(2) 兩個(gè)n維樣本點(diǎn)a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夾角余弦
類(lèi)似的,對(duì)于兩個(gè)n維樣本點(diǎn)a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用類(lèi)似于夾角余弦的概念來(lái)衡量它們間的相似程度。
即:
余弦取值范圍為[-1,1]。求得兩個(gè)向量的夾角,并得出夾角對(duì)應(yīng)的余弦值,此余弦值就可以用來(lái)表征這兩個(gè)向量的相似性。夾角越小,趨近于0度,余弦值越接近于1,它們的方向更加吻合,則越相似。當(dāng)兩個(gè)向量的方向完全相反夾角余弦取最小值-1。當(dāng)余弦值為0時(shí),兩向量正交,夾角為90度。因此可以看出,余弦相似度與向量的幅值無(wú)關(guān),只與向量的方向相關(guān)。

import numpy as np x=np.random.random(10) y=np.random.random(10) #方法一:根據(jù)公式求解 d1=np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y)) #方法二:根據(jù)scipy庫(kù)求解 from scipy.spatial.distance import pdist X=np.vstack([x,y]) d2=1-pdist(X,'cosine')
兩個(gè)向量完全相等時(shí),余弦值為1,如下的代碼計(jì)算出來(lái)的d=1。
d=1-pdist([x,x],'cosine')
皮爾遜相關(guān)系數(shù)(Pearson correlation)
(1) 皮爾遜相關(guān)系數(shù)的定義
前面提到的余弦相似度只與向量方向有關(guān),但它會(huì)受到向量的平移影響,在夾角余弦公式中如果將 x 平移到 x+1, 余弦值就會(huì)改變。怎樣才能實(shí)現(xiàn)平移不變性?這就要用到皮爾遜相關(guān)系數(shù)(Pearson correlation),有時(shí)候也直接叫相關(guān)系數(shù)。
如果將夾角余弦公式寫(xiě)成:

皮爾遜相關(guān)系數(shù)具有平移不變性和尺度不變性,計(jì)算出了兩個(gè)向量(維度)的相關(guān)性。
在python中的實(shí)現(xiàn):'
import numpy as np x=np.random.random(10) y=np.random.random(10) #方法一:根據(jù)公式求解 x_=x-np.mean(x) y_=y-np.mean(y) d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_)) #方法二:根據(jù)numpy庫(kù)求解 X=np.vstack([x,y]) d2=np.corrcoef(X)[0][1]
相關(guān)系數(shù)是衡量隨機(jī)變量X與Y相關(guān)程度的一種方法,相關(guān)系數(shù)的取值范圍是[-1,1]。相關(guān)系數(shù)的絕對(duì)值越大,則表明X與Y相關(guān)度越高。當(dāng)X與Y線性相關(guān)時(shí),相關(guān)系數(shù)取值為1(正線性相關(guān))或-1(負(fù)線性相關(guān))。
相關(guān)文章
使用python/pytorch讀取數(shù)據(jù)集的示例代碼
這篇文章主要為大家詳細(xì)介紹了使用python/pytorch讀取數(shù)據(jù)集的示例,文中的示例代碼講解詳細(xì),具有一定參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
使用Python 統(tǒng)計(jì)文件夾內(nèi)所有pdf頁(yè)數(shù)的小工具
這篇文章主要介紹了Python 統(tǒng)計(jì)文件夾內(nèi)所有pdf頁(yè)數(shù)的小工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
python 處理數(shù)字,把大于上限的數(shù)字置零實(shí)現(xiàn)方法
今天小編就為大家分享一篇python 處理數(shù)字,把大于上限的數(shù)字置零實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
PyHacker編寫(xiě)指南引用Nmap模塊實(shí)現(xiàn)端口掃描器
這篇文章主要為大家介紹了PyHacker編寫(xiě)指南Nmap模塊實(shí)現(xiàn)端口掃描,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
解決Python3 被PHP程序調(diào)用執(zhí)行返回亂碼的問(wèn)題
今天小編就為大家分享一篇解決Python3 被PHP程序調(diào)用執(zhí)行返回亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼
這篇文章主要介紹了Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

