基于用户的协同过滤算法主要思想有两步:
1)找到和目标用户兴趣度相似的用户集合
2)找到这个集合中的用户喜欢且目标用户没有听说过的物品推荐给目标用户
笔者自己动手实现该算法,算法流程为:
基于【用户,项目,评分】划分训练集与测试集
将训练集转换为稀疏矩阵【物品-用户倒排表】
计算用户之间的余弦相似度,得到用户兴趣相似度矩阵
针对目标用户u,找到与其最相似的K个用户Suk
找到K个用户喜欢过的物品集合Item
针对Item中的一个物品i,找到对物品i有过行为的用户集合Ni
依次循环集合Ni和Suk的交集,设v是其交集的一个用户,Wuv是用户u与v的相似度,rvi是用户v对物品i的兴趣度
利用下面公式计算用户u对物品i的感兴趣程度:
得到用户对物品的兴趣度后,剔除用户已喜欢的物品和兴趣度为0的物品,按照兴趣度排序得到推荐列表
根据需要给用户推荐长度为N的列表
利用电影评分数据集完成上面的代码编写。
数据集介绍
1.ratings.dat UserID:用户id MovieId:电影id Rating:评分 Timestamp:时间戳
2.movies.dat 电影id 电影名字 电影类别
3.users.dat 用户id 用户性别 年龄 职业 压缩编码
1.导入必要的python模块
import os
import random #计算代码运行时间
import numpy as np
i