欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python计算相似矩阵

程序员文章站 2022-07-12 09:29:03
...

模糊数学课上完之后对使用python中的sklearn计算矩阵各个元素的相似度有了一些感悟。

首先需要强调的是python中对于矩阵的计算尽量不要在DataFrame中,效率非常低。应该使用numpy。


1 预处理
  • 常用1:MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics.pairwise import pairwise_distances
from sklearn.metrics.pairwise import cosine_similarity

>>> matrix= np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...

>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> matrix_minmax = min_max_scaler.fit_transform(matrix)
>>> matrix_minmax
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])
  • 常用2:StandardScaler
    把上面的MinMaxScaler换成StandardScaler就ok。

其他方法这里都有写


2 计算相似度矩阵

计算相似度矩阵的方法有很多种,发现了sklearn中直接有通过计算余弦相似度得到相似度矩阵的方法
1 sklearn.metrics.pairwise.cosine_similarity
2 sklearn.metrics.pairwise.pairwise_distances

>>> from sklearn.metrics.pairwise import cosine_similarity
>>> from sklearn.metrics.pairwise import pairwise_distances

>>> a=[[1,3],[2,2]]
>>> cosine_similarity(a)
array([[ 1.        ,  0.89442719],
       [ 0.89442719,  1.        ]])

>>> pairwise_distances(a,metric="cosine")
array([[ 0.        ,  0.10557281],
       [ 0.10557281,  0.        ]])

pairwise_distances方法是 cosine_similarity减1后取绝对值得到的。