用户相似度计算

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.数据稀疏性强,就考虑用夹角余弦相似度算法

 



以上是关于用户相似度计算的主要内容,如果未能解决你的问题,请参考以下文章

基于用户的协同过滤算法:用户相似度计算的改进

基于用户的协同过滤算法:用户相似度计算的改进

基于用户的协同过滤算法:用户相似度计算的改进

词义相似度计算

使用 mahout mapreduce 计算用户相似度

SparkMLlib---基于余弦相似度的用户相似计算