========【重要提示:主页置顶文章找我咨询】=======
博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,不断的进行新技术的项目实战👈
可定制,需求的各位可以先收藏起来
1. 项目概述
1.1 系统目标
本系统旨在构建一个基于机器学习的高血压风险预测与分析平台,通过分析用户的健康指标数据,预测其患高血压的风险概率,并提供个性化的健康建议。
1.2 系统用途
健康风险评估:基于用户的年龄、血压、血脂、血糖等健康指标,预测高血压风险概率
数据可视化:通过图表展示预测结果和健康指标分布
历史记录管理:保存用户的预测历史,支持趋势分析
个性化建议:结合大语言模型生成针对性的健康管理建议
1.3 整体流程
数据预处理阶段:对原始数据集进行清洗、特征工程、不平衡处理,生成训练数据
模型训练阶段:使用随机森林、逻辑回归、XGBoost三种算法训练模型,通过网格搜索优化超参数,对比性能后选择最优模型
系统运行阶段:
用户注册/登录系统
输入健康数据(年龄、血压、血脂、血糖等)
系统调用训练好的模型进行风险预测
生成健康建议(优先使用大模型,失败则使用规则生成)
保存预测结果和历史记录
可视化展示预测结果和趋势
2. 技术栈简述
2.1 后端技术
Flask 2.3.3:轻量级Web框架,用于构建RESTful API服务
Flask-CORS 4.0.0:处理跨域请求,支持前后端分离架构
PyMySQL 1.1.0:MySQL数据库连接驱动
SQLAlchemy 2.0.23:ORM框架,简化数据库操作
scikit-learn 1.3.0:机器学习核心库,提供模型训练、评估、特征选择等功能
XGBoost 2.0.3:梯度提升算法实现
imbalanced-learn 0.14.1:处理数据不平衡问题(SMOTE过采样)
pandas 2.3.3:数据处理和分析
numpy <2.0.0:数值计算基础库
joblib 1.3.2:模型序列化和加载
requests 2.31.0:HTTP请求库,用于调用大模型API
matplotlib 3.7.2和seaborn 0.12.2:数据可视化,生成模型评估图表
2.2 前端技术
Vue 3.4.0:渐进式JavaScript框架,采用Composition API
TypeScript 5.3.3:类型安全的JavaScript超集
Vite 7.2.6:现代化前端构建工具,提供快速开发体验
Vue Router 4.2.5:前端路由管理
Pinia 2.1.7:状态管理库(Vue 3官方推荐)
Element Plus 2.4.4:基于Vue 3的UI组件库
ECharts 5.4.3:数据可视化图表库
Axios 1.6.2:HTTP客户端,用于API请求
marked 11.1.1:Markdown解析和渲染库
2.3 数据库
MySQL:关系型数据库,存储用户信息、健康数据和预测结果
2.4 机器学习相关
特征工程:相关性分析、RFE(递归特征消除)特征选择
模型算法:随机森林、逻辑回归、XGBoost
超参数优化:GridSearchCV网格搜索 + 交叉验证
模型评估:准确率、召回率、F1值、AUC值、混淆矩阵、ROC曲线
2.5 外部服务
大语言模型API:阿里云通义千问(Qwen),用于生成个性化健康建议
3. 项目结构总览
HyperML/ ├── backend/ # 后端服务 │ ├── app.py # Flask主应用入口,配置CORS和路由 │ ├── config.py # 配置文件(数据库、模型路径、LLM配置) │ ├── routes/ # API路由模块 │ │ ├── auth.py # 用户认证(注册、登录、登出) │ │ ├── predict.py # 预测接口(预测、快速预测、样本数据) │ │ └── history.py # 历史记录查询接口 │ ├── utils/ # 工具函数模块 │ │ ├── db_utils.py # 数据库操作封装(UserDAO、HealthDataDAO、PredictionDAO) │ │ ├── model_utils.py # 模型加载和预测(ModelPredictor类) │ │ ├── advice_utils.py # 健康建议生成(规则生成 + LLM调用) │ │ └── llm_advice.py # 大模型API调用(Qwen接口封装) │ ├── database/ # 数据库相关 │ │ ├── init_db.sql # 数据库表结构定义 │ │ └── init_database.py # 数据库初始化脚本 │ └── models/ # 训练好的模型文件 │ ├── best_model.pkl # 最优模型 │ ├── scaler.pkl # 特征标准化器 │ ├── feature_columns.pkl # 特征列名 │ └── [其他模型文件] │ ├── frontend/ # 前端应用 │ ├── src/ # 源代码目录 │ │ ├── main.ts # Vue应用入口 │ │ ├── App.vue # 根组件 │ │ ├── router/ # 路由配置 │ │ │ └── index.ts # 路由定义(登录、注册、仪表盘、预测、历史) │ │ ├── views/ # 页面组件 │ │ │ ├── Login.vue # 登录页 │ │ │ ├── Register.vue # 注册页 │ │ │ ├── Dashboard.vue # 仪表盘(统计信息、最近记录) │ │ │ ├── Predict.vue # 预测页面(表单输入、结果展示、图表) │ │ │ └── History.vue # 历史记录(列表、趋势图) │ │ ├── components/ # 公共组件 │ │ │ └── Navbar.vue # 导航栏 │ │ ├── layouts/ # 布局组件 │ │ │ └── MainLayout.vue # 主布局 │ │ ├── api/ # API封装 │ │ │ ├── request.ts # Axios请求拦截器配置 │ │ │ └── index.ts # API方法定义(authApi、predictApi、historyApi) │ │ ├── stores/ # 状态管理 │ │ │ └── user.ts # 用户状态(Pinia store) │ │ ├── utils/ # 工具函数 │ │ │ └── chart.ts # ECharts图表工具(仪表盘、雷达图、折线图) │ │ └── styles/ # 样式文件 │ ├── vite.config.ts # Vite构建配置(代理、别名) │ └── package.json # 前端依赖配置 │ ├── ml_scripts/ # 机器学习脚本 │ ├── data_preprocessing.py # 数据预处理(加载、清洗、特征工程、RFE、SMOTE) │ ├── model_training.py # 模型训练(三种算法、超参数优化) │ ├── model_evaluation.py # 模型评估(指标计算、可视化) │ ├── run_all.py # 完整流程执行脚本 │ └── processed_data/ # 处理后的数据文件 │ ├── datasets/ # 数据集目录 │ └── Hypertension-risk-model-main.csv # 原始数据集 │ ├── requirements.txt # Python依赖列表
=======【重要提示:主页置顶文章找我咨询】=========
4. 主要功能模块说明
4.1 数据预处理模块(ml_scripts/data_preprocessing.py)
功能:对原始数据集进行清洗、特征工程和平衡处理
数据加载:读取CSV格式的高血压数据集
数据清洗:处理缺失值、异常值
特征工程:
相关性分析:计算特征间相关性,生成热力图
RFE特征选择:使用递归特征消除筛选重要特征
数据平衡:使用SMOTE过采样处理类别不平衡问题
数据标准化:使用StandardScaler标准化数值特征
数据分割:将数据分为训练集和测试集
调用关系:被run_all.py调用,输出处理后的训练数据供模型训练使用
4.2 模型训练模块(ml_scripts/model_training.py)
功能:训练多种机器学习模型并优化超参数
模型类型:
随机森林(RandomForestClassifier)
逻辑回归(LogisticRegression)
XGBoost(XGBClassifier)
超参数优化:使用GridSearchCV进行网格搜索和交叉验证
模型保存:将训练好的模型、最优参数、标准化器保存为pkl文件
最优模型选择:根据评估指标(AUC、准确率等)选择最优模型
调用关系:接收预处理后的数据,输出训练好的模型文件到backend/models/
4.3 模型评估模块(ml_scripts/model_evaluation.py)
功能:评估模型性能并生成可视化报告
指标计算:准确率、召回率、F1值、AUC值、混淆矩阵
可视化生成:
ROC曲线对比图
指标对比柱状图
混淆矩阵热力图
指标雷达图
模型对比:生成CSV格式的模型性能对比表
调用关系:评估训练好的模型,生成评估报告和可视化图表
4.4 用户认证模块(backend/routes/auth.py)
功能:处理用户注册、登录、登出
用户注册:验证用户名、密码格式,检查重复,密码SHA256加密存储
用户登录:验证用户名密码,创建Session会话
用户登出:清除Session
数据验证:用户名格式(3-20字符,字母数字下划线)、密码长度(≥6位)、邮箱格式
调用关系:前端通过/api/register、/api/login、/api/logout调用,使用user_dao进行数据库操作
4.5 预测模块(backend/routes/predict.py)
功能:接收健康数据,调用模型进行风险预测
数据验证:验证必填字段和数值范围(年龄、血压、胆固醇、血糖等)
模型预测:调用
model_utils.predict_risk()进行预测健康建议生成:调用
advice_utils.generate_health_advice()生成建议(优先LLM,失败则规则生成)数据持久化:保存健康数据和预测结果到数据库
样本数据接口:从数据集中随机返回一条样本数据供前端表单填充
调用关系:
接收前端POST请求(
/api/predict)调用
model_utils进行预测调用
advice_utils生成建议使用
db_utils保存数据
4.6 历史记录模块(backend/routes/history.py)
功能:查询用户的预测历史记录
历史列表:按时间倒序返回用户的预测记录
详情查询:根据预测ID查询完整的预测详情和健康数据
权限验证:检查用户登录状态,确保只能查询自己的记录
调用关系:前端通过/api/history调用,使用prediction_dao和health_data_dao查询数据
4.7 模型预测工具(backend/utils/model_utils.py)
功能:加载模型并执行预测
模型加载:单例模式加载最优模型、标准化器、特征列
特征预处理:将用户输入的健康数据转换为模型所需格式,应用标准化
风险预测:调用模型进行预测,返回风险概率和风险状态(0/1)
调用关系:被predict.py路由调用,是预测功能的核心逻辑
4.8 健康建议生成模块(backend/utils/advice_utils.py + llm_advice.py)
功能:生成个性化的健康建议
LLM生成:优先调用通义千问API,基于用户健康数据和预测结果生成建议
规则生成:如果LLM不可用或调用失败,使用规则引擎生成基础建议
提示词构建:将健康数据、风险概率、风险状态组织成结构化的提示词
调用关系:被predict.py调用,advice_utils根据配置决定使用LLM还是规则生成
4.9 前端页面模块
功能:提供用户交互界面
登录/注册页:用户认证入口,支持表单验证
仪表盘:展示统计信息(总预测次数、高风险次数、平均风险概率)和最近预测记录
预测页面:
健康数据输入表单(基本信息、健康指标、其他信息)
样本数据快速填充功能
预测结果展示(风险等级、概率、健康建议)
可视化图表(风险概率仪表盘、健康指标雷达图)
历史记录页:列表展示历史预测,趋势折线图,详情查看
调用关系:通过api/index.ts中的API方法调用后端接口,使用chart.ts生成可视化图表
5. 关键接口或核心逻辑说明
5.1 预测接口(POST /api/predict)
功能:接收健康数据,返回风险预测结果和健康建议调用方式:
POST /api/predict Body: { age: number, sysBP: number, diaBP: number, totChol: number, glucose: number, male: 0|1, currentSmoker: 0|1, // ... 其他可选字段 }返回:{ risk_probability, risk_status, risk_level, health_advice, prediction_id }核心逻辑:
验证用户登录状态(Session)
验证健康数据格式和范围
调用
predict_risk()进行预测调用
generate_health_advice()生成建议保存数据到数据库
5.2 模型预测函数(model_utils.predict_risk)
功能:执行模型预测调用方式:predict_risk(health_data: Dict) -> (float, int)返回:(风险概率, 风险状态)核心逻辑:
加载模型、标准化器、特征列(单例模式)
将健康数据转换为DataFrame,按特征列顺序排列
应用标准化器标准化数值特征
调用模型
predict_proba()和predict()获取结果
5.3 健康建议生成(advice_utils.generate_health_advice)
功能:生成个性化健康建议调用方式:generate_health_advice(health_data, risk_probability, risk_status, use_llm=True)返回:健康建议文本(Markdown格式)核心逻辑:
如果启用LLM且配置完整,调用
llm_advice.generate_llm_advice()如果LLM失败或未启用,使用规则引擎生成基础建议
建议内容包含针对性建议、生活方式改善、医疗建议、预防措施
5.4 用户认证(POST /api/login)
功能:用户登录,创建Session调用方式:
POST /api/login Body: { username: string, password: string }返回:{ user_id, username, email }核心逻辑:
验证用户名密码格式
查询数据库验证用户
密码SHA256加密后比对
创建Session,设置
user_id
5.5 历史记录查询(GET /api/history)
功能:获取用户的预测历史调用方式:GET /api/history?limit=10返回:{ history: Array<预测记录> }核心逻辑:
验证用户登录状态
从数据库查询该用户的预测记录
按时间倒序返回,支持limit限制数量
6. 前后端交互概述
6.1 数据流转方式
通信协议:HTTP/HTTPS
数据格式:JSON
认证方式:基于Session的Cookie认证(开发环境支持跨域)
跨域处理:Flask-CORS配置允许前端域名(localhost:8000)访问,支持凭证传递
6.2 主要请求流程
用户登录流程:
前端:用户在登录页输入用户名密码
前端:调用
authApi.login()发送POST请求到/api/login后端:验证用户信息,创建Session,返回用户信息
前端:保存用户信息到Pinia store和localStorage
前端:路由跳转到仪表盘
预测流程:
前端:用户在预测页填写健康数据表单
前端:调用
predictApi.predict()发送POST请求到/api/predict(携带Session Cookie)后端:验证Session,验证数据格式
后端:调用
model_utils.predict_risk()加载模型并预测后端:调用
advice_utils.generate_health_advice()生成建议(可能调用LLM API)后端:保存健康数据和预测结果到MySQL
后端:返回预测结果(风险概率、状态、建议)
前端:接收结果,使用ECharts渲染图表(仪表盘、雷达图),使用marked渲染Markdown格式的健康建议
历史记录查询流程:
前端:在历史记录页调用
historyApi.getHistory()前端:发送GET请求到
/api/history?limit=100(携带Session Cookie)后端:验证Session,查询数据库
后端:返回历史记录列表
前端:渲染列表和趋势折线图
6.3 API接口列表
POST /api/register- 用户注册POST /api/login- 用户登录POST /api/logout- 用户登出POST /api/predict- 风险预测(保存到数据库)POST /api/predict/quick- 快速预测(不保存)GET /api/sample-data- 获取样本数据GET /api/history- 查询历史记录GET /api/history/<id>- 查询预测详情GET /api/health- 健康检查
7. 需求文档对应关系(概述)
7.1 数据处理需求实现
数据清洗:
data_preprocessing.py中的clean_data()方法处理缺失值和异常值不平衡处理:使用
SMOTE过采样,在feature_engineering()中实现特征工程:实现了相关性分析(
analyze_correlation())和RFE特征选择(select_features_rfe())数据标准化:使用
StandardScaler标准化数值特征
7.2 多算法模型构建需求实现
三种算法:
model_training.py中实现了随机森林、逻辑回归、XGBoost的训练超参数优化:使用
GridSearchCV进行网格搜索和交叉验证模型对比:
model_evaluation.py计算准确率、召回率、F1值、AUC值等指标,生成对比图表最优模型选择:根据评估结果选择最优模型保存为
best_model.pkl
7.3 系统开发需求实现
前端:使用Vue 3 + TypeScript + Element Plus实现用户界面,ECharts实现可视化,支持用户注册登录、数据输入、结果展示、历史记录查看
后端:基于Flask框架,实现RESTful API,支持多模型调用(通过
model_utils统一接口)数据库:MySQL数据库,包含users、health_data、predictions三张表,通过
db_utils封装数据访问
7.4 健康建议模块需求实现
大模型接口集成:
llm_advice.py实现了通义千问(Qwen)API的调用个性化建议生成:
advice_utils.py根据用户健康数据和预测结果,调用LLM生成个性化建议,失败时回退到规则生成Markdown渲染:前端使用
marked库渲染健康建议,支持格式化显示
7.5 系统测试需求
功能测试:通过前后端集成测试验证各功能模块
性能测试:模型预测响应时间、API响应时间
模型评估:通过测试集评估模型性能,生成评估报告
资料获取
========【重要提示:主页置顶文章找我】========