가장 간단 한 추천 시스템 실천
코드 를 직접 올 리 고 구체 적 인 설명 은 주석 에 있 습 니 다.
#!/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))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로드 cifar10 데이터 세트텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.