• 大小: 13KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签:

资源简介

基于用户的协同过滤和基于内容的混合推荐系统源代码。

资源截图

代码片段和文件信息

# 代码说明:
# 基于内容的推荐算法的具体实现

import math
import numpy as np
import pandas as pd

# 创建节目画像
# 参数说明:
# items_profiles = {item1:{‘label1‘:1 ‘label2‘: 0 ‘label3‘: 0 ...} item2:{...}...}
def createItemsProfiles(data_array labels_names items_names):

    items_profiles = {}

    for i in range(len(items_names)):

        items_profiles[items_names[i]] = {}

        for j in range(len(labels_names)):
            items_profiles[items_names[i]][labels_names[j]] = data_array[i][j]

    return items_profiles

# 创建用户画像
# 参数说明:
# data_array: 所有用户对于其所看过的节目的评分矩阵 data_array = [[2 0 0 1.1 ...] [0 0 1.1 ...] ...]
# users_profiles = {user1:{‘label1‘:1.1 ‘label2‘: 0.5 ‘label3‘: 0.0 ...} user2:{...}...}
def createUsersProfiles(data_array users_names items_names labels_names items_profiles):

    users_profiles = {}

    # 计算每个用户对所看过的所有节目的平均隐性评分
    # users_average_scores_list = [1.2 2.2 4.3...]
    users_average_scores_list = []

    # 统计每个用户所看过的节目(不加入隐性评分信息)
    # items_users_saw = {user1:[item1 item3 item5] user2:[...]...}
    items_users_saw = {}

    # 统计每个用户所看过的节目及评分
    # items_users_saw_scores = {user1:[[item1 1.1] [item2 4.1]] user2:...}
    items_users_saw_scores = {}

    for i in range(len(users_names)):

        items_users_saw_scores[users_names[i]] = []
        items_users_saw[users_names[i]] = []
        count = 0
        sum = 0.0

        for j in range(len(items_names)):

            # 用户对该节目隐性评分为正,表示真正看过该节目
            if data_array[i][j] > 0:
                items_users_saw[users_names[i]].append(items_names[j])
                items_users_saw_scores[users_names[i]].append([items_names[j] data_array[i][j]])
                count += 1
                sum += data_array[i][j]

        if count == 0:
            users_average_scores_list.append(0)
        else:
            users_average_scores_list.append(sum / count)

    for i in range(len(users_names)):

        users_profiles[users_names[i]] = {}

        for j in range(len(labels_names)):
            count = 0
            score = 0.0

            for item in items_users_saw_scores[users_names[i]]:

                # 参数:
                # 用户user1对于类型label1的隐性评分: user1_score_to_label1
                # 用户user1对于其看过的含有类型label1的节目item i 的评分: score_to_item i
                # 用户user1对其所看过的所有节目的平均评分: user1_average_score
                # 用户user1看过的节目总数: items_count

                # 公式: user1_score_to_label1 = Sigma(score_to_item i - user1_average_score)/items_count

                # 该节目含有特定标签labels_names[j]
                if items_profiles[item[0]][labels_names[j]] > 0:
                    score += (item[1] - users_average_scores_list[i])
                    count += 1

            # 如果求出的值太小,直接置0
            if abs(score) < 1e-6:
                score = 0.0
            if count == 0:
                result = 0.0
            else:
                result = score / count

    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8592  2018-05-02 12:51  recommender_system\CB.py

     文件       4849  2018-05-02 21:27  recommender_system\CB_Mixture_userCF.py

     文件       1841  2018-05-02 00:36  recommender_system\items_labels_to_01matrix.py

     文件       2230  2018-05-02 11:31  recommender_system\items_saw_labels_to_01matrix.py

     文件       7586  2018-05-02 19:53  recommender_system\UserCF.py

     文件       3686  2018-05-02 20:13  recommender_system\__pycache__\CB.cpython-36.pyc

     文件       3648  2018-05-02 20:13  recommender_system\__pycache__\UserCF.cpython-36.pyc

     目录          0  2018-05-02 21:57  recommender_system\__pycache__

     目录          0  2018-05-02 21:57  recommender_system

----------- ---------  ---------- -----  ----

                32432                    9


评论

共有 条评论

相关资源