【发布时间】:2018-03-31 23:10:58
【问题描述】:
我有一个按 ID 索引的特征数据框。
ID1, Red, Green, Blue
ID2, Yellow, Green, Orange
ID3, Gray, Green, Yellow
ID4, Yellow, Green, Blue
我正在尝试生成一个以余弦相似度作为权重的边列表,而不首先生成邻接矩阵。
我有足够的计算时间,但内存受限且数据集很大。
需要这个,不包括权重0:
ID1 ID2 Weight (cosine similarity)
01 02 0.33
01 03 0.25
01 04 0.75
(重量仅供参考)
这是我通过邻接矩阵解决这个问题的方法。
import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
df = df.pivot_table(index = ('ID'), columns= 'color', aggfunc=len, fill_value=0)
matrix = df.as_matrix().astype(np.float32)
matrix = cosine_similarity(matrix)
使用组合我能够生成列表,但不确定如何应用 cosine_similarity 排除零以防止填满内存。
edge_list = pd.DataFrame(list(combinations(df.index.tolist(), 2)), columns=['Source', 'Target'])
欣赏输入。谢谢,
【问题讨论】:
标签: pandas numpy networkx cosine-similarity