当前位置: 首页 > news >正文

Python 机器学习小项目:手写数字识别(MNIST 数据集)

        本项目将使用 scikit-learn 库,基于 支持向量机(SVM) 模型来构建一个手写数字识别系统。数据集选用 MNIST,其中包含 0-9 的手写数字图像,每张图片是 8×8 像素的灰度图。

项目步骤

  1. 安装必要的库
  2. 加载数据集
  3. 数据预处理
  4. 划分训练集和测试集
  5. 训练 SVM 模型
  6. 模型评估
  7. 测试并可视化结果

1. 安装必要的库

确保你的 Python 环境已安装以下库:

pip install numpy pandas scikit-learn matplotlib

 

2. 加载数据集

我们使用 sklearn.datasets.load_digits() 加载 MNIST 数据集的一个小型版本(8×8 图像)。

from sklearn import datasets

# 加载手写数字数据集
digits = datasets.load_digits()

# 查看数据集的大小
print(f"数据集样本数量: {len(digits.images)}")

3. 数据预处理

我们需要将 8×8 的图像转换为 一维数组(64 个特征),以便输入到 SVM 模型中。

import matplotlib.pyplot as plt
import numpy as np

# 显示前 5 张图片
fig, axes = plt.subplots(1, 5, figsize=(10, 3))
for i, ax in enumerate(axes):
    ax.imshow(digits.images[i], cmap='gray')
    ax.set_title(f"Label: {digits.target[i]}")
plt.show()

# 将数据转换为 (n_samples, n_features) 形式
X = digits.images.reshape((len(digits.images), -1))
y = digits.target

4. 划分训练集和测试集

我们使用 train_test_split 将数据集拆分为 80% 训练集20% 测试集

from sklearn.model_selection import train_test_split

# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print(f"训练集样本数: {len(X_train)}, 测试集样本数: {len(X_test)}")

5. 训练 SVM 模型

支持向量机(SVM)是一个强大的分类算法,特别适合中小型数据集。

from sklearn.svm import SVC

# 创建 SVM 分类器
clf = SVC(kernel='linear')

# 训练模型
clf.fit(X_train, y_train)

print("模型训练完成!")

6. 评估模型

我们在测试集上评估模型的准确率。

from sklearn.metrics import accuracy_score

# 进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

7. 测试并可视化结果

我们从测试集中随机选取一些样本进行预测,并显示结果。

import random

# 随机选择 5 个样本
sample_indices = random.sample(range(len(X_test)), 5)
sample_images = X_test[sample_indices].reshape(-1, 8, 8)  # 变回 8×8 形状
sample_labels = y_test[sample_indices]
sample_preds = clf.predict(X_test[sample_indices])

# 显示预测结果
fig, axes = plt.subplots(1, 5, figsize=(10, 3))
for i, ax in enumerate(axes):
    ax.imshow(sample_images[i], cmap='gray')
    ax.set_title(f"真实: {sample_labels[i]}\n预测: {sample_preds[i]}")
plt.show()

总结

通过本项目,我们完成了一个完整的 机器学习分类任务: ✅ 加载数据
数据预处理(转换 8×8 图像为 64 维特征)
划分数据集
训练 SVM 分类器
模型评估(计算准确率)
可视化预测结果

http://www.dtcms.com/a/61812.html

相关文章:

  • Neo4j 数据库备份
  • 1分钟看懂React的那些Hook‘s
  • GaussDB安全配置指南:从认证到防御的全方面防护
  • 深入剖析顺序存储二叉树与线索化二叉树:数据结构的灵活转换与优化
  • 常用的gpt
  • 通过大视觉模型实现的多维方向性增强分割|文献速递-医学影像人工智能进展
  • Hive函数、外部表和分区表
  • 培训讲师管理系统(源码+文档+讲解+演示)
  • 【面试】Java 多线程
  • 【Javascript网页设计】在线测验案例
  • 知识增强篇:RAG技术
  • Qt从入门到入土(九) -model/view(模型/视图)框架
  • DirectX12(D3D12)基础教程四 入门指南
  • C#实现高性能异步文件下载器(支持进度显示/断点续传)
  • 基于PyTorch的深度学习——机器学习3
  • 为什么Dex2C会影响性能?(面试题)
  • gitsubtree怎么添加新的子仓库
  • 超分之DeSRA
  • 侯捷 C++ 课程学习笔记:STL标准库与泛型编程
  • Vue主流的状态保存框架对比
  • 下载以后各个软件或者服务器的启动与关闭
  • C#常用的循环语句
  • 刷leetcode hot100--动态规划3.9
  • prompt大师高效提示词解析
  • 《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)问题 A: 【递归入门】全排列
  • [pytest] 配置
  • 中国信通院安全所青藤云安全联合牵头:容器安全评价新标准正式发布
  • Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
  • prompt样例库推荐
  • 《领导力21法则》第一章「盖子法则」笔记