Skip to content

[Python, chinese comments] 电影推荐系统-数据挖掘思路

Notifications You must be signed in to change notification settings

Alanthink/recom_sys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

电影推荐系统

原始数据

本实验采用数据集MovieLens 100K Dataset。这个数据集由国外GroupLens Research团队整理提供。

这个数据集收集了943个用户对1682部电影的总共10,000条记录。所用文件如下

  • u.data: 10,000条记录,每一条记录格式为 user id | item id | rating | timestamp,其中每一个用户至少有20条评价。
  • u.user: 每一条记录格式为 user id | age | gender | occupation | zip code。
  • u.occupation: 所有工作的列表。

数据处理

虽然每个评价在1到5之内,由于每个用户的习惯不一样,导致某个用户评价普遍偏高,或者普遍偏低。为了消除这种影响,需要对每个用户的评价进行正规化,以下是正规化的代码。

# 读入数据
base=np.loadtxt("ml-100k/u.data", int)
# 初始化: 默认情况下每个用户对每部电影都是-1分, 表示没有评价
# rate是一个二维数组, 行数为user行, 列数为movies列
rate=np.ones([users, movies])*(-1)
# 将已经知道的数据录入到rate表里
for j in range(base.shape[0]):
    rate[base[j, 0]-1, base[j, 1]-1]=base[j, 2]
avg=np.zeros(users)
std=np.zeros(users)
for j in range(users):
    tem=rate[j, :]
    tem=tem[tem!=-1]
    avg[j]=(tem.sum()+0.0)/tem.shape[0]
    std[j]=np.std(tem)
rate_V=np.zeros([users, movies])
for j in range(users):
    rate_V[j, :]=avg[j]*np.ones(movies)
rate_V[rate!=-1]=rate[rate!=-1]
# Z-normalization
for i in range(users):
    for j in range(movies):
        rate_V[i, j]=(rate_V[i, j]-avg[i])/std[i]

算法基本思想

为了向用户进行推荐,

  • 对于每一部用户U尚未评价的电影M,找到与其“相似”并且对电影M有评价的那些用户
  • 然后取平均值,作为用户U对电影M的评价
  • 将所有估算的电影的评价从高到低排序,选取前几部进行推荐

About

[Python, chinese comments] 电影推荐系统-数据挖掘思路

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages