一套 Streamlit 前端 + scikit-learn 模型 + MySQL 存储的系统,覆盖三类人工智能任务:
| # | 场景 | 任务类型 | 算法要求 | 用户功能 |
|---|---|---|---|---|
| 01 | 学生群体划分 | 无监督聚类 | ≥ 2 种,择优定型 | 批量录入成绩 → 自动分 4 群体打标签入库 → 按群体/按学号查询 |
| 02 | 房屋价格预测 | 回归 | ≥ 3 种,择优定型 | 单条/批量录入房屋参数 → 预测价格入库 → 按编号/全量查询 |
| 03 | 癌症复发研判 | 二分类 | ≥ 3 种,择优定型 | 单条/批量录入体检数据 → 研判复发入库 → 按编号/全量查询 |
设计原则:模型开发不面向用户(离线在
models/完成训练与择优);面向用户的只有 「录入 → 自动判别 → 入库 → 查询」这一条清爽动线。
视觉上走 杂志极简(Editorial) 风:米白纸面 #FAF8F3 + 大号衬线标题 + 墨黑正文 + 砖红
强调 #C0392B + 发丝分隔线 + 编号栏目(01/02/03),与默认 Streamlit 面板完全不同。
- 语言:Python(代码按 3.7 语法编写;见文末兼容性说明)
- AI 工具:
scikit-learn/numpy/pandas/matplotlib/seaborn - 前端:
Streamlit(自定义 CSS 深度定制) - 数据库:
MySQL(PyMySQL + SQLAlchemy)为主,连不上自动回退 SQLite 兜底
ai-/
├── config.py # 全局配置:路径 / 数据库 / 三场景元信息
├── requirements.txt
├── db/
│ ├── connection.py # MySQL→SQLite 自动兜底的连接层
│ └── schema.sql # 手工建库建表 DDL(数据上传后补全真实列)
├── models/ # 【离线】模型开发:多算法对比 + 择优(不面向用户)
│ ├── train_students.py # 场景1:KMeans / 层次聚类 / GMM
│ ├── train_house.py # 场景2:线性·Ridge / 随机森林 / GBDT / SVR
│ └── train_cancer.py # 场景3:逻辑回归 / SVM / 随机森林 / GBDT
├── pipeline/ # 推理 + 入库管线(前端调用,与训练共享预处理)
├── app/
│ ├── app.py # Streamlit 入口(运行:streamlit run app/app.py)
│ └── theme.py # Editorial 主题与排版组件
├── artifacts/ # 训练产物:模型(.joblib) / 指标 / 图表
└── data/ # 原始数据(附件 1-6 的 CSV,见下)
# 1) 安装依赖
pip install -r requirements.txt
# 2)(可选)配置 MySQL —— 不配也能跑,会自动用 SQLite 兜底
# 可用环境变量覆盖 config.py 中的默认值:
export AISYS_DB_HOST=127.0.0.1 AISYS_DB_PORT=3306 \
AISYS_DB_USER=root AISYS_DB_PASSWORD=yourpwd AISYS_DB_NAME=ai_three_scenes
# 3) 启动前端
streamlit run app/app.py把附件 CSV 按下列文件名放入 data/ 目录:
| 场景 | 训练数据 | 待预测数据 |
|---|---|---|
| 学生群体划分 | data/attachment1_students_train.csv(附件1) |
data/attachment2_students_new.csv(附件2) |
| 房屋价格预测 | data/attachment3_house_train.csv(附件3) |
data/attachment4_house_new.csv(附件4) |
| 癌症复发研判 | data/attachment5_cancer_train.csv(附件5) |
data/attachment6_cancer_new.csv(附件6) |
录入表单、预处理、模型推理与建表 DDL 都会依据真实数据的列名生成,因此请先上传数据。
- 程序启动优先连接
config.MYSQL指定的 MySQL,并在缺库时自动CREATE DATABASE(等价于手工执行db/schema.sql)。 - 若无可连 MySQL(无实例 / 网络不通 / 缺驱动),自动回退到本地
app_fallback.db(SQLite), 界面侧栏与页脚会显示当前实际使用的后端。 - 如需强制只用 MySQL:设环境变量
AISYS_ALLOW_SQLITE=0。
- 工程地基:配置、数据库连接层(MySQL/SQLite)、依赖
- Editorial 前端外壳:总览 + 三场景页 + 系统页
- 场景1 学生群体划分:KMeans/层次/GMM 三算法对比 → 择优 K-Means(Silhouette 0.436 最高); 4 群体(全面优秀/理科优势/文科优势/待提升);录入·分群·入库·查询全流程已通;附件1/2 真实数据
- 场景2 房屋价格预测:线性/Ridge/随机森林/GBDT/SVR 五算法 5 折 CV → 择优 随机森林 (定型 R²=0.713, RMSE=7.25, MAE=4.72);录入·预测·入库·查询全流程已通;附件3/4 真实数据
- 场景3 癌症复发研判:逻辑回归/SVM/随机森林/GBDT 四算法分层 5 折 CV(准确率/精确率/召回/F1/AUC) → 以 AUC 择优 随机森林(定型 AUC=0.933, F1=0.817, 召回=0.789);类别特征独热编码; 录入·研判·入库·查询全流程已通;附件5/6 真实数据
-
db/schema.sql:students / houses / cancer_cases 三表 DDL
✅ 三大场景全部完成,均通过真实 UI 端到端验证(录入 → 自动判别 → 入库 → 查询 → 导出)。
python models/train_students.py # 场景1:聚类对比 + 择优 + 出图
python models/train_house.py # 场景2:回归对比 + 调参 + 出图
python models/train_cancer.py # 场景3:分类对比 + 调参 + 出图(ROC/混淆矩阵)产物写入 artifacts/<scene>/:model.joblib(模型)、metrics.json(指标/理由)、*.png(图表)。
前端启动时若缺少产物会自动触发一次离线训练作为兜底。
本仓库代码全部按 Python 3.7 语法编写(不使用 walrus、match 等 3.8+ 语法)。但新版
streamlit / pandas 仅支持 Python ≥ 3.9。若必须在 3.7 运行,请改用
requirements.txt 文末注释里的旧版本组合(已验证可在 3.7 安装)。