python - 给定稀疏矩阵的行 id,计算对余弦相似度
问题描述
我想计算稀疏矩阵的一行与其余行之间的成对余弦相似度。(为什么?:因为每一行都是一个向量化的product_title,我想提取给定id值的相似产品)。
以前,我有df_cleaned
一个<504x41732 sparse matrix>
(每一行,一个产品标题,列是由于令牌)。
我定义:
def pairw_cos(prod_idx):
prod = df_cleaned[prod_idx]
foll_idx = prod_idx + 1 #thats a trick to select the rest of rows on the following line
candidates_matrix = scipy.sparse.vstack([df_cleaned[:prod_idx, :], df_cleaned[foll_idx:, :]])
simil_cosine = {}
for candidates_idx, single_candidate in candidates_matrix.iterrows():
single_simil = cosine_similarity(prod,single_candidate)
simil_cosine[candidates_idx] = single_simil
return pd.Series(simil_cosine)
但这不起作用(因为 iterrows 方法不存在于稀疏矩阵中)。然后,我尝试了:
for row in candidates_matrix:
for candidates_idx, single_candidate in row:
single_simil = cosine_similarity(prod,single_candidate)
simil_cosine[candidates_idx] = single_simil
而且,在调用该函数时,我得到:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-53-4c45754152cc> in <module>()
----> 1 pairw_cos2(2)
<ipython-input-52-12d55d3c35e5> in pairw_cos2(prod_idx)
7
8 for row in candidates_matrix:
----> 9 for candidates_idx, single_candidate in row:
10 single_simil = cosine_similarity(prod,single_candidate)
11 simil_cosine[candidates_idx] = single_simil
ValueError: not enough values to unpack (expected 2, got 1)
解决方案
如果有人问同样的问题,我终于解决了:
def pairwise_cosine(prod_idx):
prod = df_cleaned[prod_idx]
foll_idx = prod_idx + 1
candidates_matrix = scipy.sparse.vstack([df_cleaned[:prod_idx, :], df_cleaned[foll_idx:, :]])
simil_cosine = {}
to_enumerate = []
for row in candidates_matrix:
simil_per_row= []
simil_per_row = cosine_similarity(row,prod)
to_enumerate.append(simil_per_row)
for index, row in enumerate(candidates_matrix):
simil_cosine[index] = to_enumerate[index]
return pd.Series(simil_cosine)
推荐阅读
- java - Java Tcp Socket 管理数据包重传
- kubernetes - 就绪探测失败但仍在运行,endPoint 不会删除 pod id
- aframe - A-Frame 0.9.0 似乎已损坏
- python - 如何找到二维数组的按列唯一元素及其频率
- tensorflow - 如何在 keras / tensorflow 中使用相同的平均池化处理不均匀的输入
- vue.js - 在 Vuex 中将新项目推送到数组上
- php - APi Ebay 的服务“findItemsByKeywords”不返回精确结果(PHP)
- amazon-cognito - AWS 使用 STS 或 Cognito 对移动用户进行身份验证有什么区别
- vue.js - Vue Canvas 不加载图像
- anaconda - Conda 将环境克隆到错误的目标目录