基于用户画像的食谱推荐系统

Flask+SQLite 食谱推荐 Web:问卷与活动数据构建用户向量,KMeans 聚类画像 + 规则过滤 + RandomForest 融合排序,输出可解释推荐,含 Hit@K/NDCG 离线评估,适合推荐系统毕业设计。

评分:4.8/5.0
销量:85
发布:3/24/2026
难度:L3 高级

获取完整源码

演示视频仅作效果参考。完整源码、项目说明与运行答疑,请私聊沟通(适合毕业设计 / 课程设计 / 课设参考)。

获取完整源码观看演示视频
含项目说明文档,便于对照学习
可本地运行,适合课设演示
沟通获取后可咨询运行问题

项目封面

截图 1

项目概览

系统采集年龄、目标、过敏、活动步数等字段生成用户特征,profile_builder 做聚类与中文标签,recipe_engine 规则层硬约束剔除过敏后再与 ml_train 随机森林 ranker 按 0.55/0.45 融合。Flask-Login 认证、Bootstrap+ECharts 前端、pytest 测试与 CLI init-db/seed/evaluate,适合 Python 可解释推荐与用户画像类毕业设计。

项目说明

基于用户画像的食谱推荐系统

1. 项目简介

这是一个基于 Flask + SQLite + 规则引擎 + 轻量机器学习的食谱推荐系统,面向课程设计/演示场景。
系统核心思路:

  • 采集用户问卷与活动数据(步数、活动分钟)
  • 构建用户特征向量并进行用户画像聚类
  • 基于规则过滤和打分,再结合随机森林回归模型进行排序
  • 输出可解释的推荐结果(规则命中原因 + 模型融合说明)

项目目标是提供一个可运行、可展示、可扩展的端到端闭环,而不是工业级推荐系统。


2. 技术栈

  • 语言:Python 3.12.x
  • Web 框架:Flask 3.x
  • ORM:Flask-SQLAlchemy 3.x
  • 登录认证:Flask-Login
  • 数值计算:NumPy
  • 机器学习:scikit-learn(KMeans、RandomForestRegressor)
  • 前端:Jinja2 模板 + Bootstrap + ECharts
  • 数据库:SQLite(默认 diet_recommend.db
  • 测试:pytest

依赖定义见 requirements.txt


3. 项目目录结构

diet-recommend-system/
├── app.py                 # 应用入口
├── config.py              # 配置(密钥、数据库 URI、端口等)
├── requirements.txt
├── 项目说明.md
├── 测试说明.md
├── app/
│   ├── __init__.py        # 应用工厂
│   ├── cli.py             # Flask CLI(init-db、seed-data、evaluate 等)
│   ├── extensions.py      # db、login_manager
│   ├── models.py          # ORM 模型
│   ├── tag_labels.py      # 食谱标签中英文映射
│   ├── seed_recipes_data.py   # 演示食谱种子数据
│   ├── blueprints/
│   │   ├── auth.py        # 注册 / 登录 / 登出
│   │   └── main.py        # 工作台、问卷、推荐、活动等页面路由
│   └── services/
│       ├── preprocessing.py      # 问卷清洗、用户特征向量
│       ├── profile_builder.py      # 聚类、画像标签、同步写库
│       ├── recipe_engine.py        # 规则打分、混合推荐
│       ├── ml_train.py             # 随机森林训练与 ranker 模型文件
│       ├── evaluation.py           # 离线 Hit@K、NDCG
│       └── association_mining.py   # 标签共现(支持度)
├── templates/             # Jinja2 页面模板
├── static/                # 静态资源(CSS 等)
├── tests/                 # pytest
├── mac/                   # macOS 辅助脚本(部署与启动见项目内部署手册)
├── instance/              # 运行时目录(如 ranker.pkl,勿提交敏感内容)
└── diet_recommend.db      # SQLite 数据库(本地运行时生成)

4. 功能模块说明

4.1 用户与认证

  • 注册、登录、登出
  • 登录后可填写问卷、记录活动、查看画像、生成推荐
  • 已修复登录 next 参数开放重定向风险(只允许站内路径)

4.2 问卷与活动数据

问卷字段包括:

  • 年龄段、性别、身高体重
  • 目标(减脂/维持/增重/增肌/健康)
  • 活动水平、饮食风格
  • 过敏项、不喜食材
  • 每日餐次、热量目标

活动字段包括:

  • 日期、步数、活动分钟、备注

系统会将活动数据融合进用户向量末 3 维(最近 14 天):

  • 平均步数归一化
  • 平均活动分钟归一化
  • 记录覆盖度

4.3 用户画像(聚类 + 标签)

  • 从所有有问卷的用户构建特征向量
  • 使用 KMeans 聚类(样本太少时做稳健处理)
  • 生成中文标签文本(目标、风格、过敏、活动特征)
  • 将结果写入 UserProfile

注意:单用户时不会强行聚类,会走单用户兜底逻辑,避免 n_clusters > n_samples 异常。

4.4 推荐引擎

推荐流程分为两层:

  1. 规则层(硬约束 + 基线分)
    • 过敏标签命中直接剔除
    • 不喜食材与食材名称子串匹配命中直接剔除
    • 根据目标、饮食风格、脂肪控制、单餐热量匹配增加得分
  2. 模型层(可选)
    • 将用户向量与食谱特征拼接
    • 随机森林预测分与规则分融合(0.55 / 0.45)
    • 模型不可用或维度不匹配时自动回退为规则排序

输出包含可解释说明(命中规则和融合详情)。

4.5 数据挖掘展示

  • insights 页面提供食谱标签共现统计(支持度)
  • 用于展示“关联规则挖掘”模块的可视化结果

5. 数据模型说明

主要模型(app/models.py):

  • User:用户账号、密码哈希、问卷 JSON、特征向量 JSON
  • UserActivity:活动日志
  • UserProfile:画像簇编号、标签、标签 JSON
  • Recipe:食谱基础数据(食材/营养/步骤/标签)
  • RecipeGeneration:推荐生成记录与明细

时间字段已采用时区感知时间(UTC)写法,避免 datetime.utcnow() 的弃用问题。


6. 推荐与画像的数据流(端到端)

  1. 用户注册并登录
  2. 提交问卷 -> 清洗/标准化 -> 保存问卷 JSON
  3. 构建用户特征向量(问卷 15 维 + 活动 3 维)
  4. 同步所有用户画像(聚类 + 标签)
  5. 用户发起推荐
  6. 规则过滤与打分,必要时叠加模型预测
  7. 返回 TopN 结果并写入推荐日志

7. 特征工程与准确性策略

当前用户特征总维度为 18 维:

  • 问卷特征:15 维
  • 活动特征:3 维

已做关键优化:序数与连续特征统一归一化到 [0,1] 量级,降低距离模型(KMeans)被高量纲字段主导的风险,提升画像稳定性与可解释性。


8. CLI 命令说明

通过 flask 命令可执行:

  • flask init-db:建表
  • flask seed-data:导入演示用户/食谱/活动并训练模型
  • flask rebuild-profiles:重建用户画像
  • flask rebuild-model:重训排序模型
  • flask evaluate:离线评估 Hit@K、NDCG
  • flask replace-recipes:清空并重导食谱后重训模型

9. 已知限制

  • 离线评估使用“弱标签”(由规则分派生),不能等价真实用户反馈
  • 关联规则模块当前仅支持支持度统计,未扩展置信度/提升度
  • 推荐模型使用规则分做监督信号,属于“弱监督近似学习”

单元测试与运行方式见 测试说明.md


10. 快速排障

  • 启动后无法登录演示账号:
    • 删除 diet_recommend.db.data_seeded 后按部署手册重新初始化并导入数据
  • 页面提示模型不可用:
    • 执行 flask rebuild-model
  • 画像结果异常:
    • 执行 flask rebuild-profiles
  • 修改特征工程后建议:
    • 重新 seed-datarebuild-model,避免旧模型参数不一致

11. 许可与用途

本项目用于教学与课程设计演示。

获取完整源码

技术分类

包含内容

完整源码
项目说明文档
演示材料

适合方向

适合软件工程、数据科学毕业设计中 Python Flask、scikit-learn 聚类回归与规则+模型混合推荐方向;单用户样本过少时有聚类兜底逻辑。

关于 AI源码

AI源码 整理计算机毕业设计、课程设计向的可运行项目参考,含说明文档与演示材料。完整源码请通过联系方式沟通获取。

QQ: 861077046
邮箱: 861077046@qq.com
已帮助 85+ 位同学完成选题参考
问能不能做我的题目

相关推荐

查看全部 →
基于协同过滤的电影推荐系统设计与实现
高级·新上架

基于协同过滤的电影推荐系统设计与实现

Flask+SQLite 豆瓣电影推荐平台:scikit-surprise 实现 UserCF/ItemCF,三级冷启动降级、星级评分收藏、Pyecharts 后台图表与一键重训,含算法讲解页,适合推荐算法毕业设计。

PythonHTMLSQLite
4.881
基于机器学习的古籍文字识别与断句校正系统
高级

基于机器学习的古籍文字识别与断句校正系统

Vue3+Flask 古籍 OCR 流水线:PaddleOCR 识文、文本整理勘校、BERT 句读标注与多格式导出,JWT 任务隔离,支持离线微调数据闭环,适合 OCR+NLP 毕业设计。

PythonVue3SQLite
4.827
基于深度学习的音乐风格分类系统
高级·新上架

基于深度学习的音乐风格分类系统

Django+Vue2 音乐平台:Mel 频谱 CNN+Bi-LSTM 八类风格分类,含在线 MP3 播放、协同过滤推荐、热榜与 SimpleUI 管理后台,MySQL 预置 12 首歌曲,适合深度学习+Web 毕业设计。

PythonVue2MySQL
4.833
基于深度学习的日常服饰分类与推荐系统设计
高级·新上架

基于深度学习的日常服饰分类与推荐系统设计

PyTorch CNN 对 Fashion-MNIST 服饰图像 Top-5 分类,融合协同过滤与 Embedding 相似度的混合推荐引擎,含 120 件商品目录与评分收藏,适合深度学习推荐系统类毕业设计。

PythonHTMLSQLite
4.877
微小异物检测与识别系统
高级·新上架

微小异物检测与识别系统

YOLOv8 工业表面六类微小缺陷(龟裂、夹杂、点蚀等)检测平台,基于 NEU-DET 钢材数据集,支持单张/批量检测、在线训练与 PDF 报告导出,适合计算机视觉质检类毕业设计。

PythonHTMLSQLite
4.88
微小金属碎屑识别系统设计与实现
高级·新上架

微小金属碎屑识别系统设计与实现

MobileNetV2 对 NEU-CLS 六类金属表面缺陷图像分类识别平台,输出置信度与 Top 概率分布,含在线训练与多维度统计图表,适合轻量级深度学习质检类毕业设计。

PythonHTMLSQLite
4.88