基于网络推理(NBI)的商品推荐算法系统
项目简介
本项目是一个基于MATLAB环境开发的推荐系统,完整实现了基于网络推理(Network-based Inference, NBI)的推荐算法,即“概率质量扩散”算法。该系统利用二部图(Bipartite Graph)结构模拟资源在用户与商品之间的流动过程,从而挖掘用户对未交互商品的潜在兴趣。本项目不仅包含核心算法的矩阵化高效实现,还集成了数据生成、训练测试集划分、Top-N推荐生成以及多维度的性能评估模块。
功能特性
- 模拟数据生成:系统内置数据生成器,可创建指定规模(用户数、商品数)和稀疏度的二部图邻接矩阵,并具备自动修复孤立节点的功能,确保网络连通性。
- 数据集划分:支持将原始交互数据随机划分为训练集和测试集(默认90%训练,10%测试),用于验证算法的泛化能力。
- 矩阵化NBI算法:采用高效的矩阵运算替代传统的循环迭代,模拟资源从“商品 -> 用户 -> 商品”的两步扩散过程,计算全量预测评分。
- Top-N个性化推荐:根据预测评分生成推荐列表,自动过滤用户历史交互商品,支持动态调整推荐列表长度(N)。
- 多维度性能评估:通过与测试集比对,评估推荐结果的准确率(Precision)、召回率(Recall)、综合评价指标(F1 Score)、新颖性(Novelty)以及多样性(Hamming Distance)。
- 可视化分析接口:集成了从数据结构到性能指标的可视化调用流程。
系统要求
- MATLAB R2016a 或更高版本
- 无需额外工具箱,基于MATLAB基础函数库实现
使用方法
直接运行主程序入口函数即可启动整个流程。程序将依次执行参数初始化、数据生成、模型计算、评估与可视化,并在控制台输出各个阶段的耗时与进度提示。
核心算法与实现逻辑
本项目的核心逻辑紧密围绕 main 函数及其子程序展开,具体流程如下:
1. 参数配置与数据准备
系统首先初始化关键参数,包括用户数量(200)、商品数量(500)、稀疏度(0.05)以及推荐列表长度序列([5, 10, 20, 50])。
- 数据合成:调用生成函数创建二元稀疏矩阵,行代表用户,列代表商品。生成过程中通过随机补边机制,确保每个用户和商品至少有一条连边,消除孤立节点。
- 集合划分:将生成的非零交互边打乱,按照预设比例(如0.9)拆分为训练集矩阵和测试集矩阵。
2. NBI 资源分配(核心算法)
算法核心通过两步资源分配过程计算这一评分,完全基于矩阵运算实现,避免了低效的嵌套循环:
- 节点度计算:计算训练集中每个用户和每个商品的度(Degree),并处理度为0的情况以防除零错误。
- 构建转移矩阵 W:
*
第一步(Item -> User):计算资源从商品流向用户的中间状态。代码中通过归一化用户度矩阵实现。
*
第二步(User -> Item):计算资源从用户流回商品的最终状态。代码通过归一化商品度矩阵,结合转置的邻接矩阵,计算出物品间的资源转移权重矩阵 W。
- 预测评分计算:利用训练集矩阵与转移矩阵 W 的乘积,得到所有用户对所有商品的最终资源分配值(潜在兴趣得分)。
3. 生成推荐列表
系统对计算出的全量预测评分矩阵进行处理:
- 历史过滤:将训练集中用户已交互过的商品得分强制置为 -1,确保这些商品不会出现在推荐列表中。
- 排序与截断:对每个用户的未交互商品得分进行降序排列,并根据评估需求截取前 N 个商品作为 Top-N 推荐结果。
4. 性能评估
系统对不同的推荐长度 N(如5, 10, 20, 50)分别进行评估,计算以下指标:
- Precision(准确率):推荐列表中命中测试集商品的比例。
- Recall(召回率):推荐列表命中的商品占用户在测试集中所有交互商品的比例。
- F1 Score:准确率与召回率的调和平均数,用于综合衡量推荐质量。
- Novelty(新颖性):计算推荐商品的平均度(Degree)。推荐商品的度越低,代表越冷门,算法的新颖性越高。
- Hamming(多样性):通过采样计算不同用户推荐列表之间的海明距离,衡量系统推荐结果的多样化程度。
5. 可视化
最后,系统调用可视化接口绘制网络结构图或性能曲线,并打印最终的评估报告。
关键函数说明
- generate_synthetic_data: 负责生成满足稀疏度要求的随机二部图,包含“检查并修复孤立节点”的逻辑,保证生成的网络结构合法。
- split_data: 基于链路(Link)进行随机划分。它提取矩阵中所有的连边索引,随机打乱后按比例分配给训练矩阵和测试矩阵。
- run_nbi_algorithm: 实现了 NBI 的数学推导公式 $f' = W f$。其中转移矩阵 $W = frac{1}{k(o_j)} sum frac{a_{li} a_{lj}}{k(u_l)}$ 被转化为高效的稀疏矩阵乘法形式:
(A' * inv_Ku * A) * inv_Ko。 - get_top_n_recommendations: 执行推荐结果的提取工作,关键在于使用掩码(Mask)技术高效屏蔽训练集数据。
- evaluate_metrics: 具体的指标计算模块,遍历每个用户的推荐列表与测试集真值(Ground Truth)进行交集运算,并计算各项统计指标的平均值。