资源简介
基于用户的协同过滤和基于内容的混合推荐系统源代码。
代码片段和文件信息
# 代码说明:
# 基于内容的推荐算法的具体实现
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
- 上一篇:推荐系统输入表格数据
- 下一篇:多级反馈队列进程调度Swing实现源代码
评论
共有 条评论