在 pandas 数据帧中获取成对余弦相似度
Get pairwise cosine similarity in pandas dataframe
我需要为 pandas 数据帧计算成对 cosine_similarity
并将其存储回另一个数据帧 (Pandas)。
截至目前,我使用 sklearn.metrics.pairwise
的 cosine_similarity
:
计算相似度
sim = cosine_similarity(df,dense_output=False)
示例来自 sim
:
[[1.00000000 8.33333333 ... 8.72871561 8.72871561 8.72871561]
[8.33333333 1.00000000 ... 7.63762616 7.63762616 7.63762616]]
现在我希望将其存储回具有以下结构的 Pandas 数据帧:
ID Pair_ID Sim_Value
1 1 1.00
1 2 8.33
.
.
.
.
2 1 8.33
我该怎么做?
创建索引然后创建数据框
i, j = np.indices(sim.shape).reshape(2, -1)
mask = i != j
i = i[mask]
j = j[mask]
pd.DataFrame({
'ID': df.index[i],
'Pair_ID': df.index[j],
'Sim_Value': sim[i, j]
})
import numpy as np
import pandas as pd
def create_df(sim):
df = pd.DataFrame(data=sim[0], columns=['Sim_Value'])
df['Id'] = 1
for x in range(1,sim.shape[0]):
tdf = pd.DataFrame(data=sim[x], columns=['Sim_Value'])
tdf['Id'] = x+1
df = df.append(tdf)
df['Pair_ID'] = df.index + 1
df.reset_index(drop=True,inplace=True)
return df
我需要为 pandas 数据帧计算成对 cosine_similarity
并将其存储回另一个数据帧 (Pandas)。
截至目前,我使用 sklearn.metrics.pairwise
的 cosine_similarity
:
sim = cosine_similarity(df,dense_output=False)
示例来自 sim
:
[[1.00000000 8.33333333 ... 8.72871561 8.72871561 8.72871561]
[8.33333333 1.00000000 ... 7.63762616 7.63762616 7.63762616]]
现在我希望将其存储回具有以下结构的 Pandas 数据帧:
ID Pair_ID Sim_Value
1 1 1.00
1 2 8.33
.
.
.
.
2 1 8.33
我该怎么做?
创建索引然后创建数据框
i, j = np.indices(sim.shape).reshape(2, -1)
mask = i != j
i = i[mask]
j = j[mask]
pd.DataFrame({
'ID': df.index[i],
'Pair_ID': df.index[j],
'Sim_Value': sim[i, j]
})
import numpy as np
import pandas as pd
def create_df(sim):
df = pd.DataFrame(data=sim[0], columns=['Sim_Value'])
df['Id'] = 1
for x in range(1,sim.shape[0]):
tdf = pd.DataFrame(data=sim[x], columns=['Sim_Value'])
tdf['Id'] = x+1
df = df.append(tdf)
df['Pair_ID'] = df.index + 1
df.reset_index(drop=True,inplace=True)
return df