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

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.kler.cn/a/584930.html

相关文章:

  • 蓝桥杯备赛-基础练习 day1
  • linux 构建网站环境
  • 【模拟面试】计算机考研复试集训(第二天)
  • Netlify部署vue/react项目,在页面刷新时呈现404解决办法
  • Java常见文件操作及分块传输
  • CI/CD—GitLab钩子触发Jenkins自动构建项目
  • 某银行 U位资产管理系统安全合规整改项目案例及分析
  • Penguins“Collect to Earn”新标杆,开启Web3.0与AI融合未来
  • kkFileView文件预览组件部署说明
  • Trae与Builder模式初体验
  • 基于异构特征融合与轻量级集成学习的软件漏洞挖掘方案设计与Python实现
  • maxkb安装部署
  • Zookeeper与Kafka学习笔记
  • 面试高频#LeetCode#Hot100-字母异位词分组
  • docker拉取 sentinel 并启动
  • 技术聚焦:Debezium 如何将数据库数据精准注入 Kafka
  • 探索移动端开发新可能: Android Termux环境下部署MariaDB数据库
  • 智慧锂电:开启能源新时代的钥匙
  • Web网页制作之爱家居的设计(静态网页)
  • springboot3 webflux