# OPTIMAL_KNN_MNIST_QUESTION2 **Repository Path**: YXY0216/optimal_knn_mnist_question_1 ## Basic Information - **Project Name**: OPTIMAL_KNN_MNIST_QUESTION2 - **Description**: 本项目使用gradio应用在 minist 上训练的最有 KNN 模型就行手写数字识别。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 378 - **Created**: 2025-10-22 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MNIST KNN 手写数字识别 ![model training process](model_training.jpeg) ![webapp screen shot](screen_shot.jpeg) ## 项目简介 本项目基于MNIST数据集,采用K近邻(KNN)算法实现手写数字识别,并通过数据增强(平移、旋转、加噪声)提升模型泛化能力。包含本地KNN与基于 Pinecone 的云KNN两套方案: - 本地训练/推理 - `optimal_knn.py`:自动寻找最优K值,训练KNN模型并保存,支持数据增强和PCA降维。 - `optimal_knn_webapp.py`:基于Gradio的Web应用,用户可在画板上手写数字,模型实时预测结果。 - Pinecone 云KNN(每次推理都走云端) - `pinecone_train.py`:用 80% MNIST 创建(或重建)索引并上传数据,使用 20% 数据测试 k=5 的准确率(带进度条和带日期日志),示例会打印“成功创建索引,并上传了1437条数据”。 - `optimal_knn_webapp_pinecone.py`:Web 应用,实时调用 Pinecone 索引完成 KNN 推理。 - `pinecone_example.py`:构建一个 digit=3 的示例图片并在 Pinecone 上进行相似度查询演示。 ## 依赖环境 - Python 3.8+ - numpy - matplotlib - scikit-learn - joblib - tqdm - gradio - tensorflow - scipy - pinecone-client - scikit-image 安装依赖: ```bash pip install numpy matplotlib scikit-learn joblib tqdm gradio tensorflow scipy scikit-image pinecone-client ``` ## 使用说明 1. 运行 `optimal_knn.py`,自动下载MNIST数据集,完成数据增强、训练、模型保存和准确率曲线绘制。 2. 运行 `optimal_knn_webapp.py`,启动Web界面。 3. 在浏览器打开 http://127.0.0.1:7860 ,用白色画笔在黑色背景上手写数字(28x28),点击提交即可获得预测结果。 ## Pinecone 云KNN 使用说明 ### 1) 准备密钥与区域 - 在 Pinecone 控制台获取 API Key 和可用的 cloud/region(例如 aws + us-east-1)。 - Windows PowerShell 临时设置环境变量(推荐): ```powershell $env:PINECONE_API_KEY = "<你的_api_key>" $env:PINECONE_CLOUD = "aws" # 或 gcp $env:PINECONE_REGION = "us-east-1" # 根据控制台信息填写 ``` ### 2) 训练并上传数据 + 验证准确率 - 运行 `pinecone_train.py`(默认创建 784 维索引,直接上传 28x28=784 维向量): ```powershell python .\optimal_knn_mnist_question_1\pinecone_train.py ``` - 预期日志(带日期): - 成功创建索引,并上传了1437条数据 - k=5 的准确率为:0.98xx - 上传与测试过程均显示 tqdm 进度条 提示:如你已有历史索引,脚本会先删除再重建,随后等待索引 Ready 后再上传数据。 ### 3) 启动 Web 应用(云推理) - 运行 `optimal_knn_webapp_pinecone.py`: ```powershell python .\optimal_knn_mnist_question_1\optimal_knn_webapp_pinecone.py ``` - 页面打开后在画板手写数字,点击提交即可。应用会: - 自动发现索引,并读取维度 - 若维度是 784:直接用 28x28 拉平向量查询 - 若维度是 50:若同目录有 `scaler.pkl` 与 `pca.pkl`,则先标准化+PCA 再查询 ### 4) 示例脚本(digit=3 演示) ```powershell python .\optimal_knn_mnist_question_1\pinecone_example.py ``` - 脚本会生成一个 digit3.png 并将该图片向量上传到索引,再查询输出 Top-K 匹配与预测结果。 ### 常见问题(Troubleshooting) - 401 Unauthorized:API Key 无效或未设置。请重新设置 `$env:PINECONE_API_KEY`。 - 404 Not Found (region):cloud/region 不匹配,请以控制台显示的 region 为准(例如 us-east-1)。 - 查询无结果:数据刚 upsert 需要数秒同步;脚本已加入索引就绪与向量计数轮询,稍等片刻或重试。 ## 主要特性 - 支持MNIST全量数据,训练集自动增强,提升KNN泛化能力。 - 自动标准化、PCA降维,提升KNN效率。 - Web端输入与训练集风格完全一致,识别准确率高。 - 结果可视化,自动保存最优模型和准确率曲线。 ## 个人信息 - 学号: 202352320208 - 年级: 2023 - 专业: 智能科学与技术 - 班级: 二班