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

No packages published