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.数据稀疏性强,就考虑用夹角余弦相似度算法
  • 相关阅读:
    历史上的今天:3月1日
    用Windows Live Writer远程更新wordpress博客
    二月只有28天
    办公也可云概念
    FLASH做的画图板
    FLASH鼠标跟随特效
    silverlight应该以什么面孔见人?
    飞信Fetion 开发资料及下载
    收藏一个数学的C++算法的好博客
    下载网站资源共享
  • 原文地址:https://www.cnblogs.com/lzhc/p/9206386.html
Copyright © 2011-2022 走看看