我有一个文件中的数据,格式如下:
user_id, item_id, rating1, abc,51, abcd,32, abc, 32, fgh, 5
因此,我希望为上述数据形成的矩阵如下:
# itemd_ids# abc abcd fgh[[5, 3, 0] # user_id 1 [3, 0, 5]] # user_id 2
其中缺失的数据被替换为0。
但从这里我希望创建用户到用户的相似性矩阵和物品到物品的相似性矩阵?
我该怎么做呢?
回答:
从技术上讲,这不是一个编程问题,而是一个数学问题。但我认为你最好使用方差-协方差矩阵。或者,如果数值的尺度差异很大,比如说,不是这样:
>>> xarray([[5, 3, 0], [3, 0, 5], [5, 5, 0], [1, 1, 7]])
而是这样的:
>>> xarray([[5, 300, 0], [3, 0, 5], [5, 500, 0], [1, 100, 7]])
要获得方差-协方差矩阵:
>>> 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中第一个和第二个向量之间的相关性。它们是负相关的。或者类似地,第一个和第三个单元格是正相关的。
方差-协方差矩阵或相关矩阵避免了@Akavall指出的零问题。