1. 立项背景和目标
背景: 基于 PyCaret 内置的鸢尾花(Iris)经典三分类数据集,构建一个自动化机器学习分类流水线,并部署为可交互的 Web 页面,降低机器学习模型的展示与使用门槛。
目标:
使用 PyCaret 自动完成数据探索、多模型对比训练,选出最优分类模型
基于 Gradio 将该模型部署为本地可访问的 Web 预测界面
用户输入 4 个花瓣特征数值,即可实时获得物种预测结果
2. 软件功能与核心功能模块
模块 说明
数据加载与探索 调用 pycaret.datasets.get_data('iris') 加载 150×5 的鸢尾花数据,打印行列数、前5行、统计描述、缺失值、列名
PyCaret 环境初始化 创建 ClassificationExperiment 对象,以 species 为 target,session_id=42 固定随机种子
模型训练与比较 调用 exp.compare_models(exclude=['lightgbm']) 自动训练并对比多种算法,取 .best 作为最优模型
Gradio 网页部署 定义 predict() 函数封装 4 个数值输入 → PyCaret 预测 → 返回物种标签;构建 gr.Interface 页面并启动服务
3. 业务流程与功能路径
代码执行流程(代码.py):
数据加载 → get_data('iris') 获取 DataFrame,打印基本信息(shape、head、describe、nulls、columns)
初始化 PyCaret 实验 → ClassificationExperiment().setup(data, target='species') 完成数据预处理、特征工程等配置
模型训练与比较 → exp.compare_models() 自动训练多种算法(逻辑回归、随机森林、SVM 等),选出最优模型 best
定义预测函数 → predict(sepal_len, sepal_wid, petal_len, petal_wid):将 4 个输入构造为单行 DataFrame,调用 exp.predict_model(best, df),返回 prediction_label
启动 Gradio 服务 → iface.launch(),默认监听 http://127.0.0.1:7860
用户使用路径(网页交互):
浏览器打开 Gradio 页面
→ 输入 4 个特征(花萼长/宽、花瓣长/宽)
→ 点击"Run"
→ 页面显示预测物种标签(setosa / versicolor / virginica)
1. 整体架构与设计思路
设计思路:四阶段线性流水线,单文件交付
[数据层] [模型层] [服务层] [展示层]
get_data('iris') → ClassificationExperiment → predict() → Gradio Interface
150×5 DataFrame setup() 对比训练 封装为函数 4输入/1输出 Web 页面
compare_models() DataFrame转换 http://127.0.0.1:7860
各模块技术栈:
模块 技术 版本 说明
数据加载与探索 PyCaret get_data + pandas pycaret 3.3.2 / pandas 2.1.4 加载内置 iris 数据集,打印 shape、统计、缺失值
模型训练与对比 PyCaret ClassificationExperiment pycaret 3.3.2 内部调用 sklearn 1.4.2,对 14 种算法做 10-fold 交叉验证
模型预测封装 自定义函数 + pandas DataFrame — 将 4 个标量转为单行 DataFrame,调用 exp.predict_model
Web 部署 Gradio Interface gradio 6.19.0 基于 FastAPI + uvicorn 的轻量 Web 服务,本地监听 7860 端口
2. "我"负责模块与量化结果
负责模块:全流程实现(数据探索 + 模型训练 + Gradio 部署)
量化指标 数值
数据规模 150 行 × 5 列(4 特征 + 1 目标),3 类
训练/测试划分 70/30 → 训练集 105 行,测试集 45 行
对比训练算法数 14 种(lr、knn、nb、dt、svm、ridge、rf、qda、lda、mlp、mlr、ada、et、xgb)
交叉验证折数 StratifiedKFold,10 折
最终胜出模型 Quadratic Discriminant Analysis (QDA)
模型对比总耗时 约 6.2 秒(setup() 0.59s + compare_models() 约 5.6s)
代码总行数 45 行(代码.py)
日志总行数 3139 行(含大量 sklearn 警告)
结果验证:
输入 sepal_length=5.1, sepal_width=3.5, petal_length=1.4, petal_width=0.2 → 输出 Iris-setosa
输入 4.9, 3.0, 1.4, 0.2 → 输出 Iris