目录
余弦相似度
是通过计算两个向量的夹角余弦值来评估其之间的相似度;
给定向量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+ 得就是皮尔逊相关系数。