Skip to content

本项目实现了基于MNIST数据集的图像分类功能,使用五种不同的机器学习算法进行对比分析。

Notifications You must be signed in to change notification settings

Morieity/SummerTaskProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

多种机器学习算法的图像分类项目

本项目实现了基于MNIST数据集的图像分类功能,使用五种不同的机器学习算法进行对比分析。

项目特性

  • 多种算法实现: 支持向量机(SVM)、决策树、K近邻、BP神经网络、CNN
  • 完整评价指标: Accuracy、Precision、Recall、F1-Score、AUC、ROC曲线
  • 可视化结果: 生成对比图表、混淆矩阵、HTML报告
  • MNIST数据集: 自动下载和处理MNIST手写数字数据集

算法介绍

1. K近邻 (KNN)

  • 基于距离的非参数分类方法
  • 通过计算测试样本与训练样本的距离进行分类
  • 参数: k=5 (考虑5个最近邻)

2. 决策树 (Decision Tree)

  • 基于特征分割的树形结构分类器
  • 使用基尼不纯度作为分割标准
  • 参数: 最大深度=10, 最小分割样本数=5

3. 支持向量机 (SVM)

  • 寻找最优分离超平面的分类方法
  • 本项目使用简化实现
  • 参数: C=1.0, kernel=rbf, gamma=0.1

4. BP神经网络

  • 多层感知器,使用反向传播算法训练
  • 网络结构: 784-128-64-10
  • 参数: 学习率=0.01, 训练轮数=500, 动量=0.9

5. 卷积神经网络 (CNN)

  • 专门用于图像处理的深度学习网络
  • 本项目使用简化的CNN结构
  • 适合处理28x28的图像数据

项目结构

project9/
├── src/
│   ├── main.cpp              # 主程序入口
│   ├── mnist_dataset.h/cpp   # MNIST数据集加载和处理
│   ├── ml_algorithms.h/cpp   # 传统机器学习算法实现
│   ├── neural_networks.h/cpp # 神经网络算法实现
│   ├── metrics.h/cpp         # 评价指标计算
│   └── visualizer.h/cpp      # 结果可视化
├── data/                     # MNIST数据集存储目录
├── output/                   # 结果输出目录
└── xmake.lua                 # 构建配置文件

构建和运行

环境要求

  • C++17 编译器
  • XMake 构建工具
  • 依赖库: Eigen3 (可选)

构建步骤

  1. 克隆项目到本地

  2. 进入项目目录:

    cd project9
  3. 配置项目:

    xmake f -m release
  4. 编译项目:

    xmake
  5. 运行程序:

    xmake run project9

MNIST数据集准备

程序会自动提示下载MNIST数据集。如果自动下载失败,请手动下载以下文件到 data/ 目录:

  • train-images-idx3-ubyte.gz
  • train-labels-idx1-ubyte.gz
  • t10k-images-idx3-ubyte.gz
  • t10k-labels-idx1-ubyte.gz

下载地址: http://yann.lecun.com/exdb/mnist/

下载后需要解压 .gz 文件:

  • train-images-idx3-ubyte
  • train-labels-idx1-ubyte
  • t10k-images-idx3-ubyte
  • t10k-labels-idx1-ubyte

输出结果

程序运行后会在 output/ 目录生成以下文件:

1. 评价指标对比

  • metrics_comparison.csv: CSV格式的指标对比数据
  • metrics_chart.txt: 文本格式的性能对比图表

2. 混淆矩阵

  • confusion_matrix_[算法名].txt: 每个算法的混淆矩阵

3. ROC曲线

  • roc_curves.txt: ROC曲线数据

4. HTML报告

  • report.html: 完整的HTML格式分析报告

评价指标说明

Accuracy (准确率)

正确预测的样本数占总样本数的比例

Precision (精确率)

预测为正例中实际为正例的比例

Recall (召回率)

实际正例中被正确预测的比例

F1-Score

精确率和召回率的调和平均数

AUC (Area Under Curve)

ROC曲线下的面积,衡量分类器的整体性能

预期结果

根据MNIST数据集的特性,各算法的预期性能排序大致如下:

  1. CNN: 在图像分类任务中通常表现最好
  2. BP神经网络: 多层网络具有较强的表达能力
  3. SVM: 在小样本情况下表现良好
  4. 决策树: 解释性强,性能中等
  5. KNN: 简单有效,但对维度敏感

扩展功能

添加新算法

  1. 继承 MLAlgorithm 基类
  2. 实现 train()predict() 方法
  3. main.cpp 中添加算法实例

自定义数据集

  1. 修改 MNISTDataset
  2. 实现新的数据加载函数
  3. 确保数据格式符合算法要求

改进可视化

  1. 集成图形库 (如 OpenCV, matplotlib-cpp)
  2. 生成真正的图表和图像
  3. 添加交互式可视化

注意事项

  1. 内存使用: MNIST数据集较大,确保有足够内存
  2. 训练时间: 神经网络训练可能需要较长时间
  3. 数据预处理: 图像数据已归一化到[0,1]范围
  4. 简化实现: 部分算法为教学目的进行了简化

贡献指南

欢迎提交问题和改进建议:

  1. Fork 项目
  2. 创建特性分支
  3. 提交更改
  4. 发起 Pull Request

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

参考资料

About

本项目实现了基于MNIST数据集的图像分类功能,使用五种不同的机器学习算法进行对比分析。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors