☰
基于机器学习的高血压预测分析系统设计与实现-完整源码论文毕设项目
2026/10/22 21:00:36 网站建设 项目流程

========【重要提示:主页置顶文章找我咨询】=======

博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,不断的进行新技术的项目实战👈

可定制,需求的各位可以先收藏起来

1. 项目概述

1.1 系统目标

本系统旨在构建一个基于机器学习的高血压风险预测与分析平台,通过分析用户的健康指标数据,预测其患高血压的风险概率,并提供个性化的健康建议。

1.2 系统用途

  • 健康风险评估:基于用户的年龄、血压、血脂、血糖等健康指标,预测高血压风险概率

  • 数据可视化:通过图表展示预测结果和健康指标分布

  • 历史记录管理:保存用户的预测历史,支持趋势分析

  • 个性化建议:结合大语言模型生成针对性的健康管理建议

1.3 整体流程

  1. 数据预处理阶段:对原始数据集进行清洗、特征工程、不平衡处理,生成训练数据

  2. 模型训练阶段:使用随机森林、逻辑回归、XGBoost三种算法训练模型,通过网格搜索优化超参数,对比性能后选择最优模型

  3. 系统运行阶段:

    • 用户注册/登录系统

    • 输入健康数据(年龄、血压、血脂、血糖等)

    • 系统调用训练好的模型进行风险预测

    • 生成健康建议(优先使用大模型,失败则使用规则生成)

    • 保存预测结果和历史记录

    • 可视化展示预测结果和趋势

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 }核心逻辑:

  1. 验证用户登录状态(Session)

  2. 验证健康数据格式和范围

  3. 调用predict_risk()进行预测

  4. 调用generate_health_advice()生成建议

  5. 保存数据到数据库

5.2 模型预测函数(model_utils.predict_risk)

功能:执行模型预测调用方式:predict_risk(health_data: Dict) -> (float, int)返回:(风险概率, 风险状态)核心逻辑:

  1. 加载模型、标准化器、特征列(单例模式)

  2. 将健康数据转换为DataFrame,按特征列顺序排列

  3. 应用标准化器标准化数值特征

  4. 调用模型predict_proba()和predict()获取结果

5.3 健康建议生成(advice_utils.generate_health_advice)

功能:生成个性化健康建议调用方式:generate_health_advice(health_data, risk_probability, risk_status, use_llm=True)返回:健康建议文本(Markdown格式)核心逻辑:

  1. 如果启用LLM且配置完整,调用llm_advice.generate_llm_advice()

  2. 如果LLM失败或未启用,使用规则引擎生成基础建议

  3. 建议内容包含针对性建议、生活方式改善、医疗建议、预防措施

5.4 用户认证(POST /api/login)

功能:用户登录,创建Session调用方式:

POST /api/login Body: { username: string, password: string }

返回:{ user_id, username, email }核心逻辑:

  1. 验证用户名密码格式

  2. 查询数据库验证用户

  3. 密码SHA256加密后比对

  4. 创建Session,设置user_id

5.5 历史记录查询(GET /api/history)

功能:获取用户的预测历史调用方式:GET /api/history?limit=10返回:{ history: Array<预测记录> }核心逻辑:

  1. 验证用户登录状态

  2. 从数据库查询该用户的预测记录

  3. 按时间倒序返回,支持limit限制数量

6. 前后端交互概述

6.1 数据流转方式

  • 通信协议:HTTP/HTTPS

  • 数据格式:JSON

  • 认证方式:基于Session的Cookie认证(开发环境支持跨域)

  • 跨域处理:Flask-CORS配置允许前端域名(localhost:8000)访问,支持凭证传递

6.2 主要请求流程

用户登录流程:

  1. 前端:用户在登录页输入用户名密码

  2. 前端:调用authApi.login()发送POST请求到/api/login

  3. 后端:验证用户信息,创建Session,返回用户信息

  4. 前端:保存用户信息到Pinia store和localStorage

  5. 前端:路由跳转到仪表盘

预测流程:

  1. 前端:用户在预测页填写健康数据表单

  2. 前端:调用predictApi.predict()发送POST请求到/api/predict(携带Session Cookie)

  3. 后端:验证Session,验证数据格式

  4. 后端:调用model_utils.predict_risk()加载模型并预测

  5. 后端:调用advice_utils.generate_health_advice()生成建议(可能调用LLM API)

  6. 后端:保存健康数据和预测结果到MySQL

  7. 后端:返回预测结果(风险概率、状态、建议)

  8. 前端:接收结果,使用ECharts渲染图表(仪表盘、雷达图),使用marked渲染Markdown格式的健康建议

历史记录查询流程:

  1. 前端:在历史记录页调用historyApi.getHistory()

  2. 前端:发送GET请求到/api/history?limit=100(携带Session Cookie)

  3. 后端:验证Session,查询数据库

  4. 后端:返回历史记录列表

  5. 前端:渲染列表和趋势折线图

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响应时间

  • 模型评估:通过测试集评估模型性能,生成评估报告

资料获取

========【重要提示:主页置顶文章找我】========

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询