用户相似度计算
Posted lzhc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户相似度计算相关的知识,希望对你有一定的参考价值。
协同过滤中用户距离计算
# 构建共同的评分向量 def build_xy(user_id1, user_id2): bool_array = df.loc[user_id1].notnull() & df.loc[user_id2].notnull() return df.loc[user_id1, bool_array], df.loc[user_id2, bool_array]
# 欧几里德距离 def euclidean(user_id1, user_id2): x, y = build_xy(user_id1, user_id2) try: value = sum((x - y)**2)**0.5 except ZeroDivisionError: value = 0 return value # 余弦相似度 def cosine(user_id1, user_id2): x, y = build_xy(user_id1, user_id2) # 分母 denominator = (sum(x*x)*sum(y*y))**0.5 try: value = sum(x*y)/denominator except ZeroDivisionError: value = 0 return value # 皮尔逊相关系数 def pearson(user_id1, user_id2): x, y = build_xy(user_id1, user_id2) mean1, mean2 = x.mean(), y.mean() # 分母 denominator = (sum((x-mean1)**2)*sum((y-mean2)**2))**0.5 try: value = sum((x - mean1) * (y - mean2)) / denominator except ZeroDivisionError: value = 0 return value
# 1.如果数据密集(所有数据几乎都有属性值,属性值量级重要),就用欧几里德算法
# 2.数据受级别膨胀影响(不同的用户使用不同的评分标准),就用皮尔逊相关系数算法
# 3.数据稀疏性强,就考虑用夹角余弦相似度算法
以上是关于用户相似度计算的主要内容,如果未能解决你的问题,请参考以下文章