个性化推荐算法的代码实现-CSDN博客的文章中用的传统的相似性计算,这里介绍基于深度神经网络的推荐系统代码。

将协同过滤推荐算法扩展为基于深度神经网络的实现,可以通过以下步骤实现,具体使用 Neural Collaborative Filtering (NCF) 的方式。这种方法将用户和物品的嵌入向量学习融入深度学习框架中,通过非线性层捕获复杂的用户-物品交互关系。

以下是基于深度神经网络的推荐系统代码示例:

import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Embedding, Flatten, Dense, Concatenate, Dropout

# 数据预处理
# 模拟用户-物品评分数据
data = {
    'user_id': [0, 1, 2, 3, 4, 1, 2],
    'item_id': [0, 1, 2, 3, 0, 3, 1],
    'rating': [5, 4, 3, 4, 5, 2, 1]
}
df = pd.DataFrame(data)

# 提取用户数和物品数
num_users = df['user_id'].nunique()
num_items = df['item_id'].nunique()

# 将数据分为训练集和测试集
train, test = train_test_split(df, test_size=0.2, random_state=42)

# 构建模型
# 用户嵌入层
user_input = Input(shape=(1,), name="User_Input")
user_embedding = Embedding(num_users, 8, name="User_Embedding")(user_input)
user_vector = Flatten(name="User_Vector")(user_embedding)

# 物品嵌入层
item_input = Input(shape=(1,), name="Item_Input")
item_embedding = Embedding(num_items, 8, name="Item_Embedding")(item_input)
item_vector = Flatten(name="Item_Vector")(item_embedding)

# 合并用户和物品的嵌入向量
merged = Concatenate(name="Concatenate")([user_vector, item_vector])

# 全连接层
dense_1 = Dense(64, activation='relu', name="Dense_1")(merged)
dropout_1 = Dropout(0.3, name="Dropout_1")(dense_1)
dense_2 = Dense(32, activation='relu', name="Dense_2")(dropout_1)
output = Dense(1, activation='linear', name="Output")(dense_2)

# 创建模型
model = Model(inputs=[user_input, item_input], outputs=output)
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

# 模型摘要
model.summary()

# 转换训练数据
train_user = train['user_id'].values
train_item = train['item_id'].values
train_rating = train['rating'].values

test_user = test['user_id'].values
test_item = test['item_id'].values
test_rating = test['rating'].values

# 训练模型
model.fit([train_user, train_item], train_rating, epochs=10, batch_size=16, validation_data=([test_user, test_item], test_rating))

# 预测示例
predictions = model.predict([test_user, test_item])
for i in range(len(test_user)):
    print(f"User {test_user[i]} - Item {test_item[i]} - Predicted Rating: {predictions[i][0]:.2f}")

代码说明

  1. 嵌入层

    • 用户和物品分别通过嵌入层转化为固定大小的低维向量。
    • 嵌入向量代表用户和物品的特征表示。
  2. 合并嵌入向量

    • 将用户和物品的嵌入向量通过 Concatenate 层进行拼接。
  3. 深度神经网络

    • 通过若干个全连接层 (Dense) 和非线性激活函数(如 ReLU)学习用户与物品的交互关系。
  4. 输出层

    • 输出预测评分,使用线性激活函数。
  5. 优化与损失函数

    • 优化器使用 adam,损失函数为均方误差(MSE)。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐