什么叫推荐系统?

用户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())
原文地址:https://www.cnblogs.com/542684416-qq/p/10273163.html