码迷,mamicode.com
首页 > 其他好文 > 详细

用户相似度计算

时间:2018-06-21 00:06:12      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:euc   pearson   def   级别   min   nbsp   不同的   用户   value   

协同过滤中用户距离计算

# 构建共同的评分向量
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.数据稀疏性强,就考虑用夹角余弦相似度算法

 

用户相似度计算

标签:euc   pearson   def   级别   min   nbsp   不同的   用户   value   

原文地址:https://www.cnblogs.com/lzhc/p/9206386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!