使用从 coo_matrix 到 csr_matrix 的重复总和计算没有矩阵的余弦相似度
Calculate Cosine similarity without matrix with duplicate sum from coo_matrix to csr_matrix
我想计算购买数据集产品之间的余弦相似度。我有超过 100000 行(行 = 用户购买事件)和超过 80000 种产品。
为了避免使用pandas.crosstab
使数据集格式为:
> user_id\item_id 1 2 3 4 ...
> 1 | 1 1 0 0
> 2 | 0 1 0 0
> 3 | 1 0 1 0
> 4 | 0 0 0 0
> 5 | 0 0 1 0
> ...
>
> Matrix: Whether a user purchased an item or not
我将购买数据集转换为 scipy.coo_matrix
,然后我认为我必须执行 tocsr()
来进行产品之间的归一化和相似性计算,但发现当我们转换 coo_matrix
到 csr_matrix
它对重复项求和(我不想发生这种情况,我的矩阵中只需要 1 和 0)。
有没有办法解决这个问题并计算余弦相似度?
由于 csr_matrix
支持项目索引,您可以使用以下 one liner 将大于一的所有内容转换为一
X[X > 1] = 1
我想计算购买数据集产品之间的余弦相似度。我有超过 100000 行(行 = 用户购买事件)和超过 80000 种产品。
为了避免使用pandas.crosstab
使数据集格式为:
> user_id\item_id 1 2 3 4 ...
> 1 | 1 1 0 0
> 2 | 0 1 0 0
> 3 | 1 0 1 0
> 4 | 0 0 0 0
> 5 | 0 0 1 0
> ...
>
> Matrix: Whether a user purchased an item or not
我将购买数据集转换为 scipy.coo_matrix
,然后我认为我必须执行 tocsr()
来进行产品之间的归一化和相似性计算,但发现当我们转换 coo_matrix
到 csr_matrix
它对重复项求和(我不想发生这种情况,我的矩阵中只需要 1 和 0)。
有没有办法解决这个问题并计算余弦相似度?
由于 csr_matrix
支持项目索引,您可以使用以下 one liner 将大于一的所有内容转换为一
X[X > 1] = 1