# KNN 算法识别猫狗 **Repository Path**: bone-zzz/bond ## Basic Information - **Project Name**: KNN 算法识别猫狗 - **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-03 - **Last Updated**: 2025-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 猫狗分类:集成学习(CPU) 本项目使用多种经典机器学习模型与集成学习方法,对猫狗图片进行分类。特征为 32×32 灰度的扁平化向量(不使用 CNN/VGG,纯 CPU)。支持以下模型/集成: - 基学习器:Logistic Regression、Random Forest、SVM(RBF, probability=True)、FAISS-KNN(无 faiss 时自动回退到 sklearn KNN) - 集成方法:Voting(hard/soft)、Bagging、Pasting、AdaBoost、Gradient Boosting、Stacking - 轻量调参:对 LR/RF/SVM/KNN 做小范围网格搜索 - 结果输出:每个模型的训练时间、预测时间与验证集准确率表格;保存验证最优的模型到 `best_ensemble.pkl` ## 数据说明 - 期望数据结构(Kaggle Dogs vs. Cats 兼容): - `data/train` 目录中包含混合的 `cat.xxx.jpg` 与 `dog.xxx.jpg` 图像文件。 - 脚本会从 `data/train` 中划分 80% 训练、20% 验证(Stratified)。 > 默认每一类最多采样 1000 张(可通过环境变量 `LIMIT_PER_CLASS` 调整),便于首次快速验证。 ## 环境与依赖 - Python 3.9+(推荐) - 依赖见 `requirements.txt`。`faiss-cpu` 为可选项,安装失败会自动回退到 sklearn 的 KNN。 ### Windows PowerShell 快速开始(可复制执行) ```powershell # 1) 创建并激活虚拟环境 python -m venv .venv; .\.venv\Scripts\Activate.ps1 # 2) 安装依赖 pip install -r requirements.txt # 3) 训练(首次建议限制每类样本数) $env:LIMIT_PER_CLASS="800"; python .\train_ensemble.py # 4) 启动 Web 应用(推理) python .\ensemble_webapp.py ``` ## 训练脚本说明(`train_ensemble.py`) - 从 `data/train` 读取图像,转为 32×32 灰度,并归一化到 [0,1],拉平为 1024 维向量。 - 通过 `StratifiedShuffleSplit` 划分训练/验证集。 - 对 LR/RF/SVM 使用 `GridSearchCV` 做小范围网格搜索;KNN 遍历 k ∈ {3,5,7}。 - 训练以下模型并评估: - `faiss_knn_k*`, `logistic_regression`, `random_forest`, `svm_rbf` - `voting_hard`, `voting_soft`, `bagging`, `pasting`, `adaboost`, `gradient_boosting`, `stacking` - 打印每个模型的训练/预测用时与验证准确率表格,选择最优模型保存到仓库根目录 `best_ensemble.pkl`(包含类名、图像尺寸与指标等元数据)。 ## 推理应用(`ensemble_webapp.py`) - 启动后打开浏览器,根据提示上传图片即可得到预测类别与概率。 - 模型文件默认从仓库根目录加载 `best_ensemble.pkl`。 ## 常见问题 - `faiss-cpu` 安装失败? - 可暂时忽略,脚本会自动回退到 sklearn 的 KNN;稍后再尝试安装 `faiss-cpu` 即可。 - `ModuleNotFoundError`(缺少包)? - 请确认已按 `requirements.txt` 安装依赖;若有网络受限,建议使用清华/阿里镜像。 - 首次训练太慢? - 降低 `LIMIT_PER_CLASS`(如 400/类),或减少网格搜索取值;待流程跑通后再增大数据量。 ## 许可证 本仓库仅用于学习与演示用途,数据版权归原作者所有。 学号202352320213 班级2班 专业智能科学与技术