【问题标题】:Cosine similarity between each row in a Dataframe in PythonPython中Dataframe中每一行之间的余弦相似度
【发布时间】:2018-01-05 08:22:15
【问题描述】:

我有一个包含多个向量的 DataFrame,每个向量都有 3 个条目。在我的表示中,每一行都是一个向量。我需要计算每个向量之间的余弦相似度。将其转换为矩阵表示会更好,还是 DataFrame 本身有更简洁的方法?

这是我尝试过的代码。

import pandas as pd
from scipy import spatial
df = pd.DataFrame([X,Y,Z]).T
similarities = df.values.tolist()

for x in similarities:
    for y in similarities:
        result = 1 - spatial.distance.cosine(x, y)

【问题讨论】:

  • 请分享您到目前为止所做的尝试,以便我们可以为您提供适当的帮助。
  • @JayanthPrakashKulkarni:在您使用的 for 循环中,您也在计算一行与其自身的相似度。您也不需要嵌套循环。迭代第 1 行的数量并计算 df.iloc[i,:]df.iloc[i+1,:] 之间的余弦相似度。或者,您可以查看 apply 数据帧方法。
  • @ClockSlave 感谢您的宝贵意见。我一定会尝试使用 DataFrame 的 apply 方法。

标签: python pandas dataframe scikit-learn


【解决方案1】:

您可以直接使用sklearn.metrics.pairwise.cosine_similarity

演示

import numpy as np; import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

df = pd.DataFrame(np.random.randint(0, 2, (3, 5)))

df
##     0  1  2  3  4
##  0  1  1  1  0  0
##  1  0  0  1  1  1
##  2  0  1  0  1  0

cosine_similarity(df)
##  array([[ 1.        ,  0.33333333,  0.40824829],
##         [ 0.33333333,  1.        ,  0.40824829],
##         [ 0.40824829,  0.40824829,  1.        ]])

【讨论】:

  • 尝试使用您的代码。似乎没有返回相同的数据帧。
  • @Dr.DOOM 遗漏了.reshape,已修复!
【解决方案2】:

您可以从sklearn.metrics.pairwise 导入pairwise_distances 并传递要计算余弦相似度的数据框,还可以传递超参数metric='cosine',因为默认情况下,度量超参数设置为'欧几里得'。

演示

import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import pairwise_distances

df = pd.DataFrame(np.random.randint(0, 5, (3, 5)))

df
##      0   1   2   3   4
## 0    4   2   1   3   2
## 1    3   2   0   0   1
## 2    3   3   4   2   4

pairwise_distances(df,metrics='cosine)
##array([[2.22044605e-16, 1.74971353e-01, 1.59831950e-01],
   [1.74971353e-01, 0.00000000e+00, 3.08976681e-01],
   [1.59831950e-01, 3.08976681e-01, 0.00000000e+00]])

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2016-09-08
    • 2021-10-07
    • 2017-04-04
    • 1970-01-01
    • 2018-08-19
    • 2020-02-11
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多