首页 > 解决方案 > 多列值的余弦相似度

问题描述

id  size    numberOfPlants  balcony   available  publicTransport    
0   1191    3               0         1           1
1   3251    2               1         0           0
2   1641    1               1         1           0
3   2133    3               0         0           1

我有一个包含多个列值的数据集,其中每一行代表一个对象。我想计算所有行之间的余弦相似度,以便我考虑所有因素,大小,numberOfPlants,阳台(布尔),可用(布尔)和公共交通(布尔)具有相等的权重。如果我输入 a id,我想取回id看起来最相似的行中的 an 。如何在这里计算余弦相似度?

标签: pythonpython-3.xpandasmachine-learningcosine-similarity

解决方案


这应该可以解决成对余弦相似性的问题(这里我假设您已经使用潜在的 NaN 进行了三角运算):

from sklearn.metrics.pairwise import cosine_similarity
similarity = cosine_similarity(df)
print(similarity)

示例 df:

   id  size  numberOfPlants  balcony  available  publicTransport
0   1     3               1        0          1                1
1  23     4               2        4          0                2
2   3     5               2        5          1                3
3   4     6               2       76          3                4
4   5     7              34        4          4                5
5   6     8               5        2          5                6
6   4     4               6        1          6                4

然后上面的代码返回

[[1.         0.45345772 0.77907297 0.11234465 0.53344315 0.92557018
  0.80683665]
 [0.45345772 1.         0.5838878  0.23664101 0.276951   0.60827093
  0.50306617]
 [0.77907297 0.5838878  1.         0.67443414 0.51221106 0.85759678
  0.71288699]
 [0.11234465 0.23664101 0.67443414 1.         0.16973016 0.25879044
  0.19243529]
 [0.53344315 0.276951   0.51221106 0.16973016 1.         0.63498516
  0.76022001]
 [0.92557018 0.60827093 0.85759678 0.25879044 0.63498516 1.
  0.93652389]
 [0.80683665 0.50306617 0.71288699 0.19243529 0.76022001 0.93652389
  1.        ]]

推荐阅读