当前位置: 首页 > 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 分类器
模型评估(计算准确率)
可视化预测结果

相关文章:

  • 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主流的状态保存框架对比
  • 受贿2.61亿余元,陕西省政协原主席韩勇一审被判死缓
  • “十五五”时期长三角需创新机制,形成高水平一体化合作路径
  • 一周人物|收藏家瓦尔特捐出藏品,女性艺术家“对话”摄影
  • 波兰总统选举第一轮投票结束,出口民调显示将进入第二轮投票
  • 第十届青春文学奖揭晓,梁晓声获特别奖
  • 官方通报汕头违建豪宅“英之园”将强拆:对有关人员严肃追责问责