# IPR05 **Repository Path**: gbu23/ipr05 ## Basic Information - **Project Name**: IPR05 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-08 - **Last Updated**: 2025-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IPR项目4: 使用 LazyPredict 优化猫狗识别 - 终极版 ## 📋 项目简介 本项目使用 **LazyPredict** 自动评估多个机器学习分类器,选择准确率最高的模型进行猫狗图像识别,并通过 **Gradio** 提供友好的 Web 界面进行推理。 ### 🎯 核心特性 - ✅ **自动模型选择**: 使用 LazyPredict 自动训练和评估 29+ 种分类器 - ✅ **最优模型保存**: 自动选择并保存准确率最高的模型 - ✅ **工业级日志**: 完整的训练和推理日志记录 - ✅ **Web 可视化**: 基于 Gradio 的友好交互界面 - ✅ **性能对比**: 自动生成模型性能对比报告 ## 🏗️ 项目结构 ``` IPR05/ ├── train.py # 训练脚本(使用 LazyPredict) ├── webapp.py # Web 应用(使用 Gradio) ├── requirements.txt # 依赖包列表 ├── README.md # 项目说明文档 ├── util.py # 工具函数 ├── cat_dog_data/ # 数据集目录 │ └── data/ │ └── train/ │ ├── cats/ # 猫的图片 │ └── dogs/ # 狗的图片 ├── models/ # 模型保存目录 │ ├── best_model_latest.pkl # 最新最佳模型 │ └── model_comparison.csv # 模型对比结果 └── logs/ # 日志文件目录 ├── lazypredict_training_*.log └── webapp_*.log ``` ## 🚀 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 训练模型 运行训练脚本,LazyPredict 将自动评估多个分类器: ```bash python train.py ``` 训练过程将: - 自动加载和预处理猫狗图像数据 - 使用 LazyPredict 评估 29+ 种分类器 - 选择准确率最高的模型 - 保存最佳模型到 `models/` 目录 - 生成模型对比报告 `models/model_comparison.csv` - 记录详细日志到 `logs/` 目录 ### 3. 启动 Web 应用 ```bash python webapp.py ``` 然后在浏览器中打开: http://127.0.0.1:7860 ## 📊 LazyPredict 评估结果 LazyPredict 会自动评估以下指标: | 指标 | 说明 | |------|------| | **Accuracy** | 准确率 | | **Balanced Accuracy** | 平衡准确率 | | **ROC AUC** | ROC曲线下面积 | | **F1 Score** | F1分数 | | **Time Taken** | 训练耗时 | ### 典型输出示例 ``` 排名 模型名称 准确率 平衡准确率 ROC AUC F1分数 训练时间(s) ---------------------------------------------------------------------------------------------------- 1 RandomForestClassifier 0.9850 0.9848 0.9995 0.9850 31.01 2 ExtraTreesClassifier 0.9825 0.9823 0.9994 0.9825 9.14 3 XGBClassifier 0.9800 0.9798 0.9992 0.9800 8.28 4 LGBMClassifier 0.9775 0.9773 0.9990 0.9775 3.53 5 GradientBoostingClassifier 0.9750 0.9748 0.9988 0.9750 7.73 ... ``` ## 🔧 技术栈 ### 核心库 - **LazyPredict**: 自动模型评估和选择 - **Scikit-learn**: 机器学习算法 - **XGBoost**: 梯度提升算法 - **LightGBM**: 轻量级梯度提升 - **Gradio**: Web 界面框架 - **OpenCV**: 图像处理 - **NumPy**: 数值计算 ### 支持的分类器 LazyPredict 会自动评估以下分类器(部分): 1. **集成学习** - RandomForestClassifier - ExtraTreesClassifier - GradientBoostingClassifier - AdaBoostClassifier - BaggingClassifier - XGBClassifier - LGBMClassifier 2. **线性模型** - LogisticRegression - RidgeClassifier - SGDClassifier - LinearSVC 3. **树模型** - DecisionTreeClassifier - ExtraTreeClassifier 4. **近邻算法** - KNeighborsClassifier 5. **贝叶斯** - GaussianNB - BernoulliNB 6. **支持向量机** - SVC - NuSVC 7. **判别分析** - LinearDiscriminantAnalysis - QuadraticDiscriminantAnalysis ## 📝 文件说明 ### train.py 训练脚本的主要功能: 1. **数据加载**: 从 `cat_dog_data/data/train/` 加载猫狗图像 2. **特征提取**: 将图像调整为 64x64 并展平为特征向量 3. **数据分割**: 75% 训练集,25% 测试集 4. **模型评估**: 使用 LazyPredict 自动评估所有分类器 5. **模型训练**: 重新训练最佳模型 6. **模型保存**: 保存到 `models/best_model_latest.pkl` 7. **日志记录**: 详细的训练日志 ### webapp.py Web 应用的主要功能: 1. **模型加载**: 加载训练好的最佳模型 2. **图像预处理**: 调整图像大小并提取特征 3. **实时推理**: 对上传的图像进行分类 4. **结果展示**: 显示预测类别和置信度 5. **日志记录**: 记录所有推理请求 ## 📈 性能优化 ### 特征工程 - 图像大小: 64x64 像素 - 颜色空间: RGB - 特征维度: 12,288 (64×64×3) - 归一化: 像素值范围 [0, 255] ### 模型选择策略 1. LazyPredict 自动评估所有可用分类器 2. 按准确率降序排序 3. 选择准确率最高的模型 4. 重新训练完整模型以获得最佳性能 ## 🎨 Web 界面功能 - 📤 **图像上传**: 支持拖拽或点击上传 - 🖼️ **示例图片**: 提供猫狗示例图片快速测试 - 📊 **结果展示**: 显示预测类别和置信度 - 🔄 **清除功能**: 一键清除输入和输出 - 📱 **响应式设计**: 适配不同屏幕尺寸 ## 📊 日志系统 ### 训练日志 位置: `logs/lazypredict_training_YYYYMMDD_HHMMSS.log` 记录内容: - 数据加载和预处理信息 - LazyPredict 评估所有模型的详细结果 - 最佳模型选择过程 - 模型训练和保存信息 ### 推理日志 位置: `logs/webapp_YYYYMMDD_HHMMSS.log` 记录内容: - 模型加载信息 - 每次预测请求的详细信息 - 图像预处理步骤 - 预测结果和置信度 ## 🔍 使用示例 ### 训练模型 ```python # 运行训练脚本 python train.py # 输出示例: # ================================================================================ # LazyPredict 自动模型选择系统启动 # ================================================================================ # 步骤 1: 数据加载与预处理 # ✓ 数据加载完成 - 耗时: 45.23秒 # - 样本总数: 25000 # - 特征维度: 12288 # # 步骤 3: LazyPredict 自动模型评估 # ✓ 模型评估完成 - 总耗时: 256.78秒 # ✓ 共评估了 29 个分类器 # # 🏆 最佳模型: RandomForestClassifier # 🏆 最高准确率: 0.9850 (98.50%) ``` ### 使用 Web 应用 ```python # 启动 Web 应用 python webapp.py # 在浏览器中打开: http://127.0.0.1:7860 # 1. 上传猫或狗的图片 # 2. 点击"开始识别"按钮 # 3. 查看预测结果和置信度 ``` ## 🐛 常见问题 ### Q1: 安装 lazypredict 失败? ```bash # 尝试使用以下命令 pip install lazypredict --no-deps pip install scikit-learn pandas numpy tqdm joblib ``` ### Q2: 训练时间过长? - LazyPredict 需要评估多个模型,首次运行可能需要 5-15 分钟 - 可以通过减少数据量来加快训练速度 - 使用更强大的 CPU 可以显著提升速度 ### Q3: 模型文件不存在? 确保先运行 `train.py` 训练模型,再运行 `webapp.py` ### Q4: Gradio 无法访问? 检查防火墙设置,确保 7860 端口未被占用 ## 📚 参考资料 - [LazyPredict 官方文档](https://github.com/shankarpandala/lazypredict) - [Gradio 官方文档](https://www.gradio.app/docs/) - [Scikit-learn 文档](https://scikit-learn.org/) - [XGBoost 文档](https://xgboost.readthedocs.io/) - [LightGBM 文档](https://lightgbm.readthedocs.io/) ## 📄 许可证 MIT License ## 👨‍💻 作者 - 学号:202352320116 - 班级:智科一班 - 年级:2023级