协同过滤基于评分物品算法理解

Posted PythonNew_Mr.Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协同过滤基于评分物品算法理解相关的知识,希望对你有一定的参考价值。

# 导入必要的库
import numpy as np



# 预测用户对物品的评分
# 定义一个函数,输入目标用户和目标物品的ID,返回预测的评分值
def predict_user_rating(user_count,user_id,item_id):

    # 创建用户数*用户数的数组
    similarity_matrix = np.zeros((user_count, user_count))

    numerator = 0     # 分子
    denominator = 0   # 分母

    # 遍历每一对用户
    for i in range(user_count):
        for j in range(i+1,user_count):
            # 若i不等于j,则计算用户i和用户j的相似度
            if i != j:
                # 创建一个掩码,用于选择用户i和用户j都评分过的物品
                # 每个数组对比每个不同的数组 计算出布尔值数组
                # 理解:计算数组之间的掩码,如果大于1 就说明共同评价过同1个物品  接着计算共同评分物品的相似度值
                mask = np.logical_and(ratings[i] > 0, ratings[j] > 0)
                # 若存在共同评分的物品,则计算余弦相似度
                if np.count_nonzero(mask) > 0:
                    similarity_matrix[i][j] = np.dot(ratings[i][mask], ratings[j][mask]) / (np.linalg.norm(ratings[i][mask]) * np.linalg.norm(ratings[j][mask]))

    # 遍历每个用户
    for i in range(user_count):
        # 若用户i对物品item_id评分过且与目标用户相似度大于0,则考虑该用户对预测评分的贡献
        if ratings[i][item_id] > 0 and similarity_matrix[user_id][i] > 0:
            numerator += similarity_matrix[user_id][i] * ratings[i][item_id]
            denominator += similarity_matrix[user_id][i]
    # 若denominator为0,则返回0;否则,返回预测评分值
    if denominator == 0:
        return 0
    else:
        return numerator / denominator


if __name__ == \'__main__\':

    # 创建用户评分矩阵
    # X个用户对X个物品的评分记录,其中0表示未评分
    ratings = np.array([[5, 3, 0, 1], [4, 0, 4, 0], [0, 2, 5, 2], [0, 0, 0, 3],[0, 0, 0, 3]])

    user_id = 1
    print(predict_user_rating(5,user_id,0))
    print(predict_user_rating(5,user_id,1))
    print(predict_user_rating(5,user_id,2))
    print(predict_user_rating(5,user_id,3))

    user_id = 2
    print(predict_user_rating(5,user_id,0))
    print(predict_user_rating(5,user_id,1))
    print(predict_user_rating(5,user_id,2))
    print(predict_user_rating(5,user_id,3))

 

以上是关于协同过滤基于评分物品算法理解的主要内容,如果未能解决你的问题,请参考以下文章

协同过滤推荐算法简述

协同过滤算法——基于物品(Item)

10种传统机器学习算法

推荐系统中的矩阵分解演变方式

推荐算法总结

推荐系统(一):基于物品的协同过滤算法