Keras-learn-note(3)

2020-04-16 11:05:46 浏览数 (1)

May you be faithful to yourself, live earnestly and laugh freel.

Keras 实现矩阵分解

推荐系统算法简介 这里简单介绍下推荐系统中最为主要的协同过滤算法,大致分为如下几类:

  1. 基于用户的协同过滤(给用户推荐与他相似的人购买的物品)
  2. 基于商品的协同过滤(给用户推荐和他之前喜欢的物品相似的物品)
  3. 基于模型的协同过滤:关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型都属于这个范畴。

之前用了python来写矩阵分解,现在换种写法,用keras来实现矩阵分解。

导入数据

代码语言:javascript复制
import pandas as pd
import numpy as np
rating = pd.read_csv('data/ratings.csv',sep=',')
num_user = np.max(rating['userId'])
num_movie = np.max(rating['movieId'])
print(num_user,num_movie,len(rating))
代码语言:javascript复制
#计算用户电影组合的R矩阵填充率
R = len(rating)/(num_user*num_movie)
print(f"矩阵填充率:{R}")

矩阵的填充率为:0.000853805025622708

搭建模型

代码语言:javascript复制
from keras import Model
import keras.backend as K
from keras.layers import Embedding ,Reshape,Input,Dot
K.clear_session()
def Recomand_model(num_user,num_movie,k):
    input_user = Input(shape=[None,],dtype='int32')
    model_user = Embedding(num_user 1,k,input_length = 1)(input_user)
    model_user = Reshape((k,))(model_user)
    
    input_moive = Input(shape=[None,],dtype="int32")
    model_moive = Embedding(num_movie 1,k,input_length = 1)(input_moive)
    model_moive = Reshape((k,))(model_moive)
    
    out = Dot(1)([model_user,model_moive])
    model = Model(input=[input_user,input_moive],outputs = out)
    model.compile(loss = 'mse',optimizer = 'Adam')
    model.summary()
    
    return model
代码语言:javascript复制
model =Recomand_model(num_user,num_movie,100)

model.summary()输出模型各层的参数状况

model.layers.Reshape() :将输出调整为特定的形状

数据处理

代码语言:javascript复制
train_u = rating['userId'].values
train_i = rating['movieId'].values
train_x = [train_u,train_i]
train_y = rating["rating"].values

训练模型

代码语言:javascript复制
model.fit(train_x,train_y,batch_size = 100,epochs = 10)

预测

代码语言:javascript复制
model.predict([[1],[2]])
代码语言:javascript复制
array([[ 3.76612234]], dtype=float32)

0 人点赞