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.数据稀疏性强,就考虑用夹角余弦相似度算法
  • 相关阅读:
    liunx配置jdk
    liunx 用户修改文件打开数
    goolge安装插件
    安装解压版MySQL 5.6.35
    Windows7 搭建ftp 服务
    eclipse 搭建Swt 环境
    注释正则表达式
    java excle导出合计字段值
    liunx 字符编码问题
    FreeIPA ACI (Access Control Instructions) 访问控制说明
  • 原文地址:https://www.cnblogs.com/lzhc/p/9206386.html
Copyright © 2011-2022 走看看