计算数据框中组中所有列的余弦相似度

calculate cosine similarity for all columns in a group by in a dataframe

我有一个数据框 df:APer 列的范围是 0-60

ID    FID   APerc0   ...   APerc60
0     X     0.2      ...   0.5
1     Z     0.1      ...   0.3
2     Y     0.4      ...   0.9
3     X     0.2      ...   0.3
4     Z     0.9      ...   0.1
5     Z     0.1      ...   0.2
6     Y     0.8      ...   0.3
7     W     0.5      ...   0.4
8     X     0.6      ...   0.3

我想计算每一行之间所有 APerc 列的值的余弦相似度。所以上面的结果应该是:

      ID       CosSim   
1     0,2,4     0.997   
2     1,8,7     0.514    
1     3,5,6     0.925  

我知道如何为整个 df 生成余弦相似度:

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(df)

但我想找到每个 ID 之间的相似性并将它们组合在一起(或创建单独的 df)。如何快速处理大数据集?

创建一个函数进行计算,然后df.apply(cosine_similarity_function()),有人说用apply函数可能比逐行快几百倍

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html

一种可能的解决方案是获取要用于余弦相似度计算的特定行并执行以下操作。

在这里,combinations 基本上是您要考虑用于计算的行索引列表对。

cos = nn.CosineSimilarity(dim=0)

for i in range(len(combinations)):
    row1 = df.loc[combinations[i][0], 2:62]
    row2 = df.loc[combinations[i][1], 2:62]
    sim = cos(row1, row2)
    print(sim)

您可以按照自己的方式使用结果。