资源简介
推荐系统中矩阵分解被最广泛的应用,本项目采用python并在数据集Movielens 100K上进行实现。
代码片段和文件信息
#!usr/bin/python
# -*- coding:UTF-8 -*-
#Created on: 2018/3/12
#author: Xiuze Zhou
#e-mail: zhouxiuze@foxmail.com
#-------------------------FUNCTION---------------------------#
from pylab import *
import numpy as np
import random
import math
def SGD(traintestNMgammaDlambda_1Step):
# train: train data
# test: test data
# N:the number of user
# M:the number of item
# gamma: the learning rata
# D: the number of latent factor
# lambda_1: regularization parameter
# Step: the max iteration
p = np.random.random((N D))
q = np.random.random((M D))
rmse=[]
loss=[]
for ste in range(Step):
los=0.0
for data in train:
u=data[0]
i=data[1]
r=data[2]
e=r-np.dot(p[u]q[i].T)
p[u]=p[u]+gamma*(e*q[i]-lambda_1*p[u])
q[i]=q[i]+gamma*(e*p[u]-lambda_1*q[i])
los=los+e**2+lambda_1*(np.square(p[u]).sum()+np.square(q[i]).sum())
loss.append(los)
rms=RMSE(pqtest)
rmse.append(rms)
if ste%10==0:
print ste/10
return lossrmsepq
def RMSE(pqtest):
count=len(test)
sum_rmse=0.0
for t in test:
u=t[0]
i=t[1]
r=t[2]
pr=np.dot(p[u]q[i].T)
sum_rmse+=np.square(r-pr)
rmse=np.sqrt(sum_rmse/count)
return rmse
def Load_data(filedirratio):
user_set={}
item_set={}
N=0;#the number of user
M=0;#the number of item
u_idx=0
i_idx=0
data=[]
f = open(filedir)
for line in f.readlines():
uirt=line.split()
if int(u) not in user_set:
user_set[int(u)]=u_idx
u_idx+=1
if int(i) not in item_set:
item_set[int(i)]=i_idx
i_idx+=1
data.append([user_set[int(u)]item_set[int(i)]int(r)])
f.close()
N=u_idx;
M=i_idx;
np.random.shuffle(data)
train=data[0:int(len(data)*ratio)]
test=data[int(len(data)*ratio):]
return NMtraintest
def Figure(lossrmse):
fig1=plt.figure(‘LOSS‘)
x = range(len(loss))
plot(x loss color=‘g‘linewidth=3)
plt.title(‘Convergence curve‘)
plt.xlabel(‘Iterations‘)
plt.ylabel(‘Loss‘)
fig2=plt.figure(‘RMSE‘)
x = range(len(rmse))
plot(x rmse color=‘r‘linewidth=3)
plt.title(‘Convergence curve‘)
plt.xlabel(‘Iterations‘)
plt.ylabel(‘RMSE‘)
show()
#----------------------------SELF TEST----------------------------#
def main():
dir_data=“./u.data“
ratio=0.8
NMtraintest=Load_data(dir_dataratio)
gamma=0.005
D=10
lambda_1=0.1
Step=50
lossrmsepq=SGD(traintestNMgammaDlambda_1Step)
print rmse[-1];
Figure(lossrmse)
if __name__ == ‘__main__‘:
main()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1189 2018-03-13 23:54 SGD_MF\README.md
文件 2946 2018-03-13 00:35 SGD_MF\SGD_MF\SGD_MF.py
文件 1979173 2018-03-12 05:39 SGD_MF\SGD_MF\u.data
文件 75 2018-03-13 23:51 SGD_MF\SGD_MF\讲解和推导.txt
目录 0 2018-03-13 00:42 SGD_MF\SGD_MF
目录 0 2018-03-13 23:50 SGD_MF
----------- --------- ---------- ----- ----
1983383 6
相关资源
- SVD实现代码
- 电影推荐系统171901
- 基于hadoop的电影推荐系统源码.zip
- Python-使用MovieLens数据集训练的电影推
- 基于协同过滤的电影推荐系统 python
- 基于Movielens的推荐系统—评分预测
- 机器学习——推荐系统python实现
- movielens(100K)数据集分析,Apriori算法
- 电影推荐系统
- 推荐系统相似度python
- 推荐系统Koren’s SVD++ Python实现
- Probabilistic Matrix Factorization概率矩阵分
- 推荐系统物质扩散代码python
- 某马头条推荐系统
- 基于python的推荐系统库
- 《推荐系统实践》 程序实现 —— 2
- 协同过滤推荐算法视频推荐系统自带
- 基于矩阵分解的协同过滤的电影推荐
- 基于用户相似度和社会关系和地理位
- 基于python语言编程的矩阵分解电影推
- 用Python写的电影推荐系统
- 用Python写的电影推荐系统
- 用Python写的电影推荐系统
- 用Python写的电影推荐系统
- 基于用户的协同过滤和基于内容的混
- 用Python写的电影推荐系统
评论
共有 条评论