• 什么叫推荐系统?


    用户k和用户a之间的相似度根据一个相似用户a的一系列评价的乘积(修正为该用户的平均评价)的权重。你将需要标准化相似度这样可以使评价维持在1到5之间,最后一步,统计你想预测用户平均评价的总和。

      这里考虑到的问题是一些用户评价所有电影时可能要么给最高分,要么给最低分。这些用户给出评价的相对不同比绝对值更重要。例如:设想,用户k对他最喜欢的电影评价4颗星,其他的好电影则评价3颗星。假设现在另一个用户t对他/她喜欢的一部电影评价为5颗星,看了想睡觉的一部电影评价为3颗星。这两位用户电影口味可能很相似但使用评价体系的方法不同。

    #第一种

    import numpy as np
    from sklearn.metrics.pairwise import pairwise_distances
    
    recommand_rate = np.array([[1,2,0],[1,2,3],[2,1,3]])
    def computer_zhangsan_distance():
        #计算相似距离,越小越相似,为0完全相同,假如有n个用户,构成nxn的相似矩阵
        sim_matrix = pairwise_distances(recommand_rate,metric='cosine')
        #按行(axis=1)计算用户评分平均值,【:,np.newaxis】表明转换为列的形式
        mean_matrix = recommand_rate.mean(axis=1)[:,np.newaxis]
        #将评分矩阵所有元素按列减去相应的平均值
        rating_diff = recommand_rate - mean_matrix
        #算出相应用户相似度权值的和,按列运算,n个用户算n个
        sum_rate = sim_matrix.sum(axis=1)[:,np.newaxis]
        #按照文档公式1算出所有物品的预测评分
        return sim_matrix.dot(rating_diff) / sum_rate +mean_matrix
    print(computer_zhangsan_distance())
    #第二种
    import numpy as np
    def cos_sim(a,b):
        return a.dot(b) / (np.linalg.norm(a) * np.linalg.norm(b))
    recommand_rate = np.array([[1,2,0],[1,2,3],[2,1,3]])
    def computer_zhangsan_art():
    
        zhangsan_sim_lisi   = cos_sim(recommand_rate[0],recommand_rate[1])
        zhangsan_sim_wangwu = cos_sim(recommand_rate[0],recommand_rate[2])
        lisi_art_value      = recommand_rate[1][2]
        wangwu_art_value    = recommand_rate[2][2]
        result = (zhangsan_sim_lisi * lisi_art_value + zhangsan_sim_wangwu
                  *wangwu_art_value) / (zhangsan_sim_lisi + zhangsan_sim_wangwu)
        return  result
    print('zhangsan art value is',computer_zhangsan_art())
    #第三种
    import numpy as np
    from sklearn.metrics.pairwise import cosine_similarity
    def computer_zhangsan_art_vector():
        # 计算余弦相似度,越大越相似,为1完全相同
        sim_matrix = cosine_similarity(recommand_rate)
        #得到分子
        all_rate = sim_matrix.dot(recommand_rate)
        #分母 。得到行,换成列
        sum_rate = sim_matrix.sum(axis=1)[:,np.newaxis] - 1
        return  all_rate / sum_rate
    print(computer_zhangsan_art_vector())
  • 相关阅读:
    JWT有这么难嘛?
    Mybatis一级缓存和二级缓存区别
    redis学习笔记
    基于Redission框架实现redis 分布式锁
    C# lambda 学习笔记
    C# 读取 ttf字体文件里的 Unicode
    网页调试控制台Preview乱码,但是正常显示
    uniapp 自定义组件 列表视图不更新问题
    asp.net core 允许跨域
    asp.net core asp-controller不生效
  • 原文地址:https://www.cnblogs.com/542684416-qq/p/10273163.html
Copyright © 2020-2023  润新知