python 相似性计算方法 – 余弦相似度,皮尔逊相关系数

目录

余弦相似度

使用sklearn计算

使用scipy计算

使用numpy计算

皮尔逊相关系数

使用numpy计算

使用scipy计算

余弦相似度

是通过计算两个向量的夹角余弦值来评估其之间的相似度;

给定向量A, B,其余弦相似度计算公式:

python 相似性计算方法 - 余弦相似度,皮尔逊相关系数

python中有多个模块可以用来计算余弦相似度;

使用sklearn计算

使用sklearn包中的sklearn.metrics.pairwise.cosine_similarity()函数;

这个函数输入是n个长度相同的list或者array;

函数处理是计算这n个list(或者array)两两之间的余弦相似性,最后生成的 相似矩阵s[i][j]表示的是原来输入的矩阵的第i行和第j行两个向量的相似度,所以生成的是n*n的相似矩阵;

此函数的输入vector要求是二维的;

当不是二维时,要使用reshape(1,-1)变换维度;

代码演示:

>>> from sklearn.metrics.pairwise import cosine_similarity
>>> import numpy as np
>>> a = np.array([[1, 0, 0, 0],[1, 0, 0, 1],[1,1,0,1]])
>>> s = cosine_similarity(a,a)
>>> s
array([[1.        , 0.70710678, 0.57735027],
       [0.70710678, 1.        , 0.81649658],
       [0.57735027, 0.81649658, 1.        ]])

>>> e = np.array(e) # 当输入单样本特征时
>>> e = e.reshape(1,-1)
>>> f = np.array(f)
>>> f = f.reshape(1,-1)
>>> e
array([[1, 1, 2]])
>>> f
array([[1, 3, 4]])
>>> g = cosine_similarity(e,f)
>>> g
array([[0.96076892]])

使用scipy计算

scipy包中的scipy.spatial.distance.cosine 函数可计算余弦距离;

使用 1-余弦距离,得到余弦相似度;

这个函数的输入vector要求是1维的;

代码演示:

>>> from scipy.spatial.distance import cosine
>>> k = cosine(e,f)
>>> k
0.03923107716947716
>>> k = 1-k # 1-k得到的值才等于上面sklearn计算得到的值
>>> k
0.9607689228305228

使用numpy计算

需要使用公式,一步步计算;

numpy包中的numpy.dot函数计算两个向量的点积;

numpy.linalg.norm可以计算向量的欧式距离;

代码演示:

>>> from numpy import dot
>>> from numpy.linalg import norm
>>> a = [1, 2, 3, 4]
>>> b = [5, 6, 7, 8]
>>> s = dot(a,b)/(norm(a)*norm(b))
>>> s
0.9688639316269662

皮尔逊相关系数

在统计学中,皮尔逊相关系数,又称皮尔逊积矩相关系数,简称PCC,用来衡量两个变量X和Y之间的线性相关关系,值域在[-1,1]之间;

+1-完全正相关,+0.8-强正相关,+0.6-中等正相关,0-无关联,-0.6-中度负相关,-0.8-强烈的负相关,-1-完全负相关;

计算公式:

python 相似性计算方法 - 余弦相似度,皮尔逊相关系数

使用numpy计算

使用numpy.corrcoef() 函数计算;

此函数输入通常是一个矩阵,比如m*n维矩阵;

代码演示:

>>> X = [1,1,4,3]
>>> Y = [2,1,3,4]
>>> p = np.corrcoef(X,Y)
>>> Z = np.array([X,Y])
>>> Z.shape
(2, 4)
>>> p = np.corrcoef(Z)
>>> p
array([[1.        , 0.77459667],
       [0.77459667, 1.        ]])

使用scipy计算

使用scipy.stats.pearsonr()函数计算

代码演示:

>>> from scipy import stats
>>> p = stats.pearsonr(X,Y)
>>> p
(0.7745966692414834, 0.2254033307585166)

上述计算中0.77+ 得就是皮尔逊相关系数。

Original: https://blog.csdn.net/qq_40671063/article/details/127004612
Author: 无脑敲代码,bug漫天飞
Title: python 相似性计算方法 – 余弦相似度,皮尔逊相关系数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/757558/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球