2024-05-12 20:37:32 发布
网友
我有以下格式的文件中的数据:
user_id, item_id, rating 1, abc,5 1, abcd,3 2, abc, 3 2, fgh, 5
因此,我要为上述数据形成的矩阵如下:
# itemd_ids # abc abcd fgh [[5, 3, 0] # user_id 1 [3, 0, 5]] # user_id 2
其中缺少的数据被0替换。
但从这一点出发,我想创建用户之间的相似度矩阵和项目之间的相似度矩阵?
我该怎么做?
从技术上讲,这不是一个编程问题,而是一个数学问题。但我认为你最好用方差协方差矩阵。或相关矩阵,如果值的比例非常不同,例如,而不是:
>>> x array([[5, 3, 0], [3, 0, 5], [5, 5, 0], [1, 1, 7]])
你有:
>>> x array([[5, 300, 0], [3, 0, 5], [5, 500, 0], [1, 100, 7]])
要获得方差cov矩阵:
>>> np.cov(x) array([[ 6.33333333, -3.16666667, 6.66666667, -8. ], [ -3.16666667, 6.33333333, -5.83333333, 7. ], [ 6.66666667, -5.83333333, 8.33333333, -10. ], [ -8. , 7. , -10. , 12. ]])
或相关矩阵:
>>> np.corrcoef(x) array([[ 1. , -0.5 , 0.91766294, -0.91766294], [-0.5 , 1. , -0.80295507, 0.80295507], [ 0.91766294, -0.80295507, 1. , -1. ], [-0.91766294, 0.80295507, -1. , 1. ]])
这是观察它的方法,对角线单元,即(0,0)单元,是X中第一个向量与其自身的相关性,所以它是1。其他细胞,即(0,1)细胞,是X中第1和第2个向量之间的相关性,它们呈负相关。或者类似地,第1和第3个细胞是正相关的。
(0,0)
(0,1)
协方差矩阵或相关矩阵避免了由@Akavall指出的零问题。
看这个问题:What's the fastest way in Python to calculate cosine similarity given sparse matrix data?
具有:
A = np.array( [[0, 1, 0, 0, 1], [0, 0, 1, 1, 1], [1, 1, 0, 1, 0]]) dist_out = 1-pairwise_distances(A, metric="cosine") dist_out
结果:
array([[ 1. , 0.40824829, 0.40824829], [ 0.40824829, 1. , 0.33333333], [ 0.40824829, 0.33333333, 1. ]])
但这适用于稠密矩阵。对于稀疏,你必须开发你的解决方案。
从技术上讲,这不是一个编程问题,而是一个数学问题。但我认为你最好用方差协方差矩阵。或相关矩阵,如果值的比例非常不同,例如,而不是:
你有:
要获得方差cov矩阵:
或相关矩阵:
这是观察它的方法,对角线单元,即
(0,0)
单元,是X中第一个向量与其自身的相关性,所以它是1。其他细胞,即(0,1)
细胞,是X中第1和第2个向量之间的相关性,它们呈负相关。或者类似地,第1和第3个细胞是正相关的。协方差矩阵或相关矩阵避免了由@Akavall指出的零问题。
看这个问题:What's the fastest way in Python to calculate cosine similarity given sparse matrix data?
具有:
结果:
但这适用于稠密矩阵。对于稀疏,你必须开发你的解决方案。
相关问题 更多 >
编程相关推荐