zoukankan      html  css  js  c++  java
  • 用户相似度计算

    协同过滤中用户距离计算

    # 构建共同的评分向量
    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.数据稀疏性强,就考虑用夹角余弦相似度算法
  • 相关阅读:
    课上练习,判断大小。
    软件工程个人作业03。
    构建之法阅读笔记一。
    软件工程个人作业02。
    SSM常见面试题
    Bean的作用域和初始化时机(singleton&prototype)
    Spring中的AOP
    Spring核心概念和打印机案例
    MyBatis中的常用注解
    MyBatis中的延迟加载策略
  • 原文地址:https://www.cnblogs.com/lzhc/p/9206386.html
Copyright © 2011-2022 走看看