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

目录

余弦相似度

使用sklearn计算

使用scipy计算

使用numpy计算

皮尔逊相关系数

 使用numpy计算

使用scipy计算


余弦相似度

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

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

         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-完全负相关;

        计算公式:

 使用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+ 得就是皮尔逊相关系数。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值