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后取绝对值得到的。