# 图像分类器项目

本项目包含多种基于MobileNet特征提取的图像分类器实现，包括三层神经网络、随机森林和KNN算法。

## 模型对比

| 模型 | 算法类型 | 特点 | 适用场景 |
|------|---------|------|---------|
| 三层神经网络 | 深度学习 | 自定义全连接网络，支持训练监控、早停、正则化 | 需要高精度、可解释性强的场景 |
| 随机森林 | 集成学习 | 多决策树投票，参数直观可调 | 中等规模数据集，需要模型解释性 |
| KNN (原版) | 实例学习 | 简单实现，预测结果平滑处理 | 快速原型开发，小规模数据 |
| KNN (完善版) | 实例学习 | 增强阈值控制，支持单类别检测 | 异常检测、单类别分类场景 |

## 详细说明

### 三层神经网络分类器
- 使用MobileNet进行特征提取
- 自定义三层全连接网络进行分类
- 功能特点：
  - 训练过程可视化（损失/准确率曲线）
  - 支持早停、正则化等技巧
  - 模型保存/加载功能
  - 温度缩放调整预测置信度

### 随机森林分类器
- 使用MobileNet特征作为输入
- 构建多个决策树进行集成分类
- 可调参数：
  - 决策树数量（默认10棵）
  - 训练集子集比例（默认70%）
- 特点：
  - 训练速度快
  - 提供ImageNet标签显示功能

### KNN分类器（原版）
- 基于MobileNet特征的K最近邻算法
- 特点：
  - 实现简单
  - 低通滤波器平滑预测结果
  - 支持模型保存/加载

### KNN分类器（完善版）
在原版基础上增强：
- 距离阈值控制
- 自适应阈值计算
- 改进的单类别检测
- 更详细的训练反馈

## 使用指南

1. 选择分类器类型
2. 上传各类别训练图片
3. 调整模型参数（如适用）
4. 点击"训练模型"按钮
5. 使用摄像头或上传图片进行预测

## 技术实现

所有分类器均基于以下技术：
- 特征提取：MobileNet (TensorFlow.js)
- 前端框架：纯JavaScript实现
- 数据存储：浏览器本地存储（IndexedDB）

## 开发建议

- 对于高精度需求：使用三层神经网络
- 对于可解释性需求：使用随机森林
- 对于快速原型开发：使用KNN
- 对于异常检测：使用完善版KNN
·