一、实验环境
Windows,Python 3
Python作为主要编程语言,使用Python的Pandas、NumPy、Matplotlib等库
二、实验内容
主要任务
- 查阅相关资料,了解矩阵分解算法的基本概念、应用场景及其难点。重点了解SVD(Singular Value Decomposition,奇异值分解)系列方法。
- 掌握Python语言的基本使用。
- 了解梯度下降算法概念,熟悉并复现矩阵分解算法。
- 在标准评测数据集MovieLens上验证矩阵分解算法。
- 学习numpy或pandas的基本使用方法,能够对ratings.csv和movies.csv文件中的数据进行提取。使用numpy或sklearn中的知识,随机划分训练集、验证集、测试集,比例为8:1:1。
- 使用Python语言或利用PyTorch、TensorFlow等深度学习库,复现矩阵分解算法,在标准评测数据集MovieLens上验证该算法,并且能够取得较低的均方误差(MSE不能高于1.5)。
三、实验过程
第一步:学习numpy或pandas的基本使用方法,能够对ratings.csv和movies.csv文件中的数据进行提取。
运行结果:
通过这些处理,生成了两个新的文件moviesProcessed.csv和ratingsProcessed.csv,其中包含了处理后的电影信息和电影评分信息,为后续的推荐系统构建提供了处理后的数据。
第二步:划分使用numpy或sklearn中的知识,随机划分训练集、验证集、测试集,比例为8:1:1。
随机划分训练集(80%)train_data、验证集(10%)valid_data和测试集(10%)test_data。
第三步:使用Python语言或利用PyTorch、TensorFlow等深度学习库,复现矩阵分解算法。
为了创建矩阵分解模型,我们使用嵌入来显示用户和电影,使用点积来捕捉它们之间的相互作用。
我们还引入了用户和电影的偏置,以考虑用户和电影的整体评分倾向。
def matrix_factorization_model(num_users, num_movies, embedding_size=10):
user_input = Input(shape=(1,), name='user_input')
user_embedding = Embedding(input_dim=num_users, output_dim=embedding_size, input_length=1)(user_input)
movie_input = Input(shape=(1,), name='movie_input')
movie_embedding = Embedding(input_dim=num_movies, output_dim=embedding_size, input_length=1)(movie_input)
偏置:
user_bias = Embedding(input_dim=num_users, output_dim=1, input_length=1)(user_input)
movie_bias = Embedding(input_dim=num_movies, output_dim=1, input_length=1)(movie_input)
dot_user_movie = Dot(axes=2)([user_embedding, movie_embedding])
dot_user_movie = Add()([dot_user_movie, user_bias, movie_bias])
prediction = Flatten()(dot_user_movie)
model = Model(inputs=[user_input, movie_input], outputs=prediction)