使用NumPy进行协同过滤计算平均绝对差

时间:2019-03-26 19:12:35

标签: numpy matrix-multiplication

我正在尝试对yelp数据集执行用户-用户协作过滤。我有一个矩阵,其中每一列包含一个业务,每一行包含一个用户。每个单元格都包含用户对企业的评分(如果用户未对企业进行评分,则为0)。我正在尝试使用平均绝对错误来查找两个用户之间的相似性。

我已经浏览了该网站(https://www.ethanrosenthal.com/2015/11/02/intro-to-collaborative-filtering/)。它具有使用余弦公式查找相似性的代码。代码是:

def fast_similarity(ratings, kind='user', epsilon=1e-9):
    # epsilon -> small number for handling dived-by-zero errors
    if kind == 'user':
        sim = ratings.dot(ratings.T) + epsilon
    elif kind == 'item':
        sim = ratings.T.dot(ratings) + epsilon
    norms = np.array([np.sqrt(np.diagonal(sim))])
    return (sim / norms / norms.T)

我想使用均值绝对差而不是余弦。

我可以使用for循环找到相似度矩阵,但这需要很多时间。因此,我正在寻找均值绝对差的矢量化实现。我注意到,平均绝对差公式的工作原理与矩阵乘法非常相似,但是它不是计算两个元素,而是仅计算两个元素的绝对差。有没有numpy的技巧来实现这一目标?谢谢

0 个答案:

没有答案