基于深度学习神经网络协同过滤模型(NCF)的视频推荐体系

news/2025/10/26 11:16:43/文章来源:https://www.cnblogs.com/ljbguanli/p/19166599

基于深度学习神经网络协同过滤模型(NCF)的视频推荐体系

测试数据(我是在本地存了个文件,记得修改自己测试数据文件的路径):

User,Video 1,Video 2,Video 3,Video 4,Video 5,Video 6
User1,10,3,,,,
User2,,10,,10,5,1
User3,,,9,,,
User4,6,1,,8,,9
User5,1,,1,,10,4
User6,1,4,1,,10,1
User7,,2,1,2,,8
User8,,,,1,,
User9,1,,10,,3,1

相关库准备:

若直接安装 scikit(如 pip install scikit),会错误安装非官方包(如 scikit 0.0.post1),导致功能缺失或报错。正确安装命令应为 pip install scikit-learn

import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

调用数据:

# 设置Pandas显示选项:显示所有列且不换行
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
# 数据加载与预处理
data = pd.read_csv('data/test-data.csv')  # 读取用户-视频评分数据
print("原始数据预览:")
print(data)  # 打印原始数据便于检查

数据预处理阶段:

1. 保存原始用户ID(第一列)

2. 重置索引为数字序列

3. 将第一列替换为数字索引

user_index = data[data.columns[0]]  # 保存原始用户ID
video_index = data.columns  # 保存视频列名
data = data.reset_index(drop=True)  # 重置索引
data[data.columns[0]] = data.index.astype('int')  # 将用户ID列转为数字索引
scaler = 10  # 评分缩放因子 适用于已知评分范围固定(如1-10分制)的简单场景

数据重塑:

将宽格式数据转为长格式(user_id, video_id, rating)

df_long = pd.melt(data,id_vars=[data.columns[0]],  # 保留用户ID列ignore_index=True,  # 忽略原始索引var_name='video_id',  # 视频ID列名value_name='rate').dropna()  # 删除缺失值
df_long.columns = ['user_id', 'video_id', 'rating']  # 重命名列
df_long['rating'] = df_long['rating'] / scaler  # 评分归一化
df_long['user_id'] = df_long['user_id'].apply(lambda x: user_index[x])  # 恢复原始用户ID
dataset = df_long  # 最终数据集

将用户ID和视频ID转换为模型可处理的数字标签:

user_encoder = LabelEncoder()  # 用户ID编码器
video_encoder = LabelEncoder()  # 视频ID编码器
dataset['user_id'] = user_encoder.fit_transform(dataset['user_id'])
dataset['video_id'] = video_encoder.fit_transform(dataset['video_id'])
# 使用全部数据作为训练集(未划分测试集)
train = dataset

超参设置及选择嵌入维度

num_users = len(dataset['user_id'].unique())  # 唯一用户数量
num_videos = len(dataset['video_id'].unique())  # 唯一视频数量
# embedding_dim = 32  # 嵌入层维度
embedding_dim = 64  # 嵌入层维度

基本准备阶段结束,进入模型配置:

神经网络协同过滤模型架构:

1. 输入层:分别接收用户ID和视频ID

2. 嵌入层:将ID映射为稠密向量

3. 特征融合:连接两个嵌入向量

4. 全连接层:学习非线性特征交互

5. 输出层:预测评分

# 输入层
inputs_user = tf.keras.layers.Input(shape=(1,), name='user_input')  # 用户ID输入
inputs_video = tf.keras.layers.Input(shape=(1,), name='video_input')  # 视频ID输入
# 嵌入层
embedding_user = tf.keras.layers.Embedding(num_users, embedding_dim, name='user_embedding')(inputs_user)
embedding_video = tf.keras.layers.Embedding(num_videos, embedding_dim, name='video_embedding')(inputs_video)
# 特征融合层 Concatenate优势- 保留更多特征信息便于后续全连接层学习复杂交互
merged = tf.keras.layers.Concatenate(name='concat_embeddings')([embedding_user, embedding_video])
merged = tf.keras.layers.Flatten(name='flatten_features')(merged)
# 全连接层
dense = tf.keras.layers.Dense(64, activation='relu', name='dense_1')(merged)
dense = tf.keras.layers.Dense(32, activation='relu', name='dense_2')(dense)
output = tf.keras.layers.Dense(1, activation='sigmoid', name='output')(dense)
# 模型编译 mse对异常值敏感
model = tf.keras.Model(inputs=[inputs_user, inputs_video], outputs=output)
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

开始训练模型:

print("\n开始模型训练...")
model.fit([train['user_id'].values, train['video_id'].values],train['rating'].values,batch_size=64,epochs=100,verbose=0,# validation_split=0.1,
)

应用模型进行评分:

result_df = {}
for user_i in range(1, 10):user = f'User{user_i}'result_df[user] = {}for video_i in range(1, 7):video = f'Video {video_i}'# 编码用户和视频IDpred_user_id = user_encoder.transform([user])pred_video_id = video_encoder.transform([video])# 进行预测result = model.predict(x=[pred_user_id, pred_video_id], verbose=0)result_df[user][video] = result[0][0]  # 保存预测结果

转换结果格式并输出:

# 结果后处理
result_df = pd.DataFrame(result_df).T  # 转为DataFrame格式
result_df *= scaler  # 反归一化恢复原始评分范围
print("\n预测结果矩阵:")
print(result_df)

本地输出打印成功展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于容斥原理

简单的不说了,直接开题。 P1450 [HAOI2008] 硬币购物 题意 有 \(c1, c2, c3, c4\) 四种面值的硬币,询问多次,给你每个硬币最多有多少个,问凑出 \(S\) 面值的方案。 分析 考虑一个 \(f_i\) 是 i 号硬币不满足条件的…

可变字符串

可变字符串StringBuffer:可变长字符串,运行效率慢,线程安全StringBuilder:可变长字符串,运行效率吧快,线程不安全 package String; /*** StringBuffer和StrinBulider的使用* 和String的区别(1)比String效率高(…

给安卓设置背景色的时候保持默认按钮样式(关于使用setBackgroundColor导致丢失默认按钮样式的问题)

给安卓设置背景色的时候保持默认按钮样式(关于使用setBackgroundColor导致丢失默认按钮样式的问题)核心apiButton.setBackgroundTintList(ColorStateList);void initPatterns(LinearLayout PatternsRoot){for(int i=0;…

分片上传与断点续传实现详解

分片上传与断点续传实现详解 在现代Web应用中,用户经常需要上传大文件,如视频、压缩包等。传统的文件上传方式在面对大文件时容易出现超时、失败等问题,而且一旦上传中断就需要重新上传整个文件,浪费时间和带宽。为…

欧拉定理

欧拉定理 给定整数 \(a,m\),其中 \(\gcd(a,m)=1\),求证: \[a^{\phi(m)} \equiv 1 \pmod m \]其中 \(\phi(m)\) 是欧拉函数,表示 \(\le m\) 中与 \(m\) 互质的数的个数。 欧拉定理证明 考虑模 \(m\) 的一个简化剩余…

Kanass入门到实战(6) - 如何进行缺陷管理 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

手把手在 Linux 上安装 Docker 与 Docker Compose(包含 Ubuntu、CentOS 等 11 个发行版)

从零开始:按命令实操在 11 个主流 Linux 发行版(含 Ubuntu、CentOS、Debian 等)上安装 Docker 与 Docker Compose。支持 11 种主流发行版:OpenCloudOS、Anolis OS (龙蜥)、Alinux (阿里云)、Fedora、Rocky Linux、…

2025 年 10 月展示柜厂家最新推荐,精准检测与稳定性能深度解析!

展示柜的稳定性能直接关系到零售商家的日常运营效率与商品陈列效果,为助力商家筛选出经过精准检测、性能可靠的展示柜厂家,2025 年 10 月,中国商业设施协会联合国家轻工业产品质量监督检测中心,开展展示柜行业专项…

数据处理方法汇总

1.层次化 K-means (Hierarchical K-means)不直接把数据分成k个簇,第一层先分k1个簇,第二层每个大簇分为k2个小簇,以此类推,形成聚类树2.平衡采样对每类样本按比例采样3.检索式筛选数据用分类模型,找到数据池和种…

2025 年 10 月展示柜厂家最新推荐,技术实力与市场口碑深度解析!

在零售行业竞争日益激烈的当下,展示柜不仅是商品陈列工具,更成为品牌竞争力的重要体现。为帮助商家精准识别具备核心技术与良好市场口碑的展示柜厂家,2025 年 10 月,中国零售业协会联合全国商业设施质量监督检验中…

一些疑问

1、是否要减肥、如何增肌,增重对增肌的影响,脂肪可以转换为肌肉吗,人在饥饿的时候会先消耗肌肉还是脂肪,怎么保证减肥的时候肌肉不会被消耗,如果要减肥的话饮食怎么搭配,减肥的时候也会瘦脸吗,如何瘦脸 2、为什…

2025 年 10 月外墙涂料厂家最新推荐,高性能与可靠性兼具的优质品牌

2025 年我国外墙涂料行业产品合格率虽提升至 89%,但仍有 11% 的产品存在耐候性差、易脱落等性能问题,给建筑安全与外观维护带来隐患。为帮助用户筛选高性能、高可靠的优质品牌,本次测评联合中国涂料工业协会,依据《…

2025 年 10 月外墙涂料厂家最新推荐,聚焦高端定制需求与全案交付能力

2025 年我国高端外墙涂料市场规模同比增长 12.3%,随着建筑外观个性化需求提升与工程交付标准升级,高端定制与全案交付能力成为采购核心考量。但市场中多数厂家定制能力不足、交付链条断裂,导致项目落地难。为解决这…

深度神经网络 —— 使用RNN循环神经网络进行手写数字识别分类

深度神经网络 —— 使用RNN循环神经网络进行手写数字识别分类代码: import torch import torchvision from torchvision import datasets, transforms #from torch.autograd import Variable import matplotlib.pyplo…

2025年10月长白山亲子酒店推荐榜:四季主题与温泉度假对比排行

带娃去长白山,家长最在意的是“孩子玩得安全、学得开心,大人也能真正放松”。10月正值秋色最盛,山顶初雪、林间红叶,是全年亲子摄影的黄金窗口;可山区昼夜温差大、景点分散,如果酒店本身没有体系化的亲子配套,家…

2025年10月益生菌品牌推荐榜:全维度对比与榜单解读

进入十月,气温骤降、昼夜温差大,办公室与学校集体环境易爆发诺如病毒与轮状病毒,腹泻、便秘、抗生素后肠道不适成为高频健康困扰;同时,双11预售开启,消费者希望提前锁定优惠,却面对货架上数百种益生菌无从下手。…

2025年10月工装设计公司推荐榜:全国服务力对比评测

把办公室从毛坯变成能直接入驻的“拎包办公”场景,往往比家装更复杂:消防、空调、弱电、家具、软装、标识、实验室洁净度、酒店动线,每一项都牵一发而动全身。对甲方来说,时间即是现金流,一旦设计返工或施工节点失…

2025 年 10 月外墙涂料厂家最新推荐,精准检测与稳定性能深度解析

2025 年我国外墙涂料市场规模突破 1000 亿元,同比增长 5.3%,随着绿色建筑与旧改政策深化,市场对涂料性能要求愈发严格,但行业内产品性能虚标、检测标准不统一等问题仍存。为破解选购难题,本次测评联合中国建筑材料…

2025年10月美容仪品牌推荐:无创无痛对比评测榜

一、引言 家用美容仪赛道在2025年迎来技术迭代高峰,射频、微电流、光疗、超声、纳米晶片等多路线并行,创业者、电商选品经理、线下美容院采购者及高净值消费者共同的核心诉求集中在三点:一次投入成本可控、安全合规…

2025年10月遗产继承律师对比榜:五强排名与实测解析

遗产继承往往伴随亲人离世、财产分割、家庭矛盾等多重压力,用户寻找律师时最在意的是“能否把复杂程序讲清楚、能否把潜在风险提前锁死、能否在情感与利益之间找到平衡”。2025年第三季度,全国继承纠纷一审收案量同比…