最简单的推荐系统实践

原创 2016年09月27日 21:13:30

参考网络上的部分资料,做了个最简单的推荐系统的demo实例。
我们将使用MovieLens数据集,它是在实现和测试推荐引擎时所使用的最常见的数据集之一,包含来自943个用户以及精选的1682部电影的评分。
数据的下载地址:http://grouplens.org/datasets/movielens/,可以去上面下载相关数据。

直接上代码,具体的说明在注释里。

#!/usr/bin/env python
#coding:utf-8

import numpy as np
import pandas as pd
import time
from sklearn import cross_validation as cv
from sklearn.metrics.pairwise import pairwise_distances
from sklearn.metrics import mean_squared_error
from math import sqrt

def read_file():

    header = ['user_id', 'item_id', 'rating', 'timestamp']
    df = pd.read_csv("/Users/lei.wang/data/ml-100k/u.data",sep = '\t',names = header)
    #去重之后得到一个元祖,分别表示行与列,大小分别为943与1682
    n_users = df.user_id.unique().shape[0]
    n_items = df.item_id.unique().shape[0]

    print 'all users is :' + str(n_users) + ', all items is :' + str(n_items)

    #将样本分为训练集与测试机
    train_data,test_data = cv.train_test_split(df,test_size = 0.25)

    train_data_matrix = np.zeros((n_users,n_items))
    for line in train_data.itertuples():
        train_data_matrix[line[1]-1, line[2]-1] = line[3]

    test_data_matrix = np.zeros((n_users,n_items))
    for line in test_data.itertuples():
        test_data_matrix[line[1]-1,line[2]-1] = line[3]

    #计算user相似矩阵与item相似矩阵,大小分别为943*943,1682*1682
    user_similar = pairwise_distances(train_data_matrix, metric = "cosine")
    item_similar = pairwise_distances(train_data_matrix.T, metric = "cosine")

    return (train_data_matrix,test_data_matrix,user_similar,item_similar)

train_data_matrix,test_data_matrix,user_similar,item_similar = read_file()
print 'user_similar.shape is :',user_similar.shape
print 'item_similar.shape is :',item_similar.shape

def predict(rating, similar, type = 'user'):
    if type == 'user':
        mean_user_rating = rating.mean(axis = 1)
        rating_diff = (rating - mean_user_rating[:,np.newaxis])
        pred = mean_user_rating[:,np.newaxis] + similar.dot(rating_diff) / np.array([np.abs(similar).sum(axis=1)]).T
    elif type == 'item':
        pred = rating.dot(similar) / np.array([np.abs(similar).sum(axis=1)])

    return pred

user_prediction = predict(train_data_matrix, user_similar, type = 'user')
item_prediction = predict(train_data_matrix, item_similar, type = 'item')

def rmse(prediction,ground_truth):
    prediction = prediction[ground_truth.nonzero()].flatten()
    ground_truth = ground_truth[ground_truth.nonzero()].flatten()
    return sqrt(mean_squared_error(prediction, ground_truth))

print 'User based CF RMSE: ' + str(rmse(user_prediction, test_data_matrix))
print 'Item based CF RMSe: ' + str(rmse(item_prediction, test_data_matrix))
版权声明:本文为博主原创文章,未经博主允许不得转载。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

推荐系统实践学习笔记(一)

写在前面:这几天学习了一下《推荐系统实践》这本书,出于兼顾学生读者和工程师读者的考虑,作者在理论上讲得不算太深,但是非常系统、全面。由于看得比较快,其中的方法没有来得及一一实现,打算写几篇博客记录一下...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

推荐系统实践读书笔记与思考

推荐系统中评价指标和最常用协同过滤算法总结
  • huruzun
  • huruzun
  • 2016年03月17日 11:02
  • 972

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Mahout--简单推荐系统Demo

mahout简单推荐系统 工具: mahout 0.8 Myeclipse10 maven3.2.5 代码:  import java.io.BufferedReader; import java....

自己动手写一个推荐系统

Reading lists 虽然很多人觉得作为AI的分支之一,推荐跟自然语言处理等问题的难度不可同日而语。但所谓磨刀不误砍柴工,我觉得,至少在开工前先应该阅读这样基本书,起码要看看目录,以对于推荐系...

java基于MVC的简单博客系统

java基于MVC的简单博客系统 源代码下载地址:http://www.zuidaima.com/share/1550463595760640.htm...

用MovieLens数据集做推荐(Python推荐系统二)

思路:下载MovieLens的数据集,对数据集进行函数定义,定义各数据列的名称,根据上一篇Python写出简单的推荐系统(一) 文中的recommendations.py 的用户相似度进行推荐。  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最简单的推荐系统实践
举报原因:
原因补充:

(最多只允许输入30个字)