使用从 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_matrixcsr_matrix 它对重复项求和(我不想发生这种情况,我的矩阵中只需要 1 和 0)。

有没有办法解决这个问题并计算余弦相似度?

由于 csr_matrix 支持项目索引,您可以使用以下 one liner 将大于一的所有内容转换为一

X[X > 1] = 1