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

机器学习-手写数字识别

文章目录

  • 一. 数据介绍
  • 二. KNN

一. 数据介绍

数据文件手写数字识别.csv包含从 0 到 9 的手绘数字的灰度图像。
● 每个图像高 28 像素,宽28 像素,共784个像素。
● 每个像素取值范围[0,255],取值越大意味着该像素颜色越深
● 数据集共785列。第一列为 “标签”,为该图片对应的手写数字。其余784列为该图像的像素值
● 训练集中的特征名称均有pixel前缀,后面的数字([0,783])代表了像素的序号。

import pandas as pd

data = pd.read_csv('data/手写数字识别.csv')
data.head()

在这里插入图片描述

data.shape

(42000, 785)

二. KNN

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import joblib
from collections import Counter


def show_digit(idx):
      # 加载数据
    data = pd.read_csv('data/手写数字识别.csv')
    if idx < 0 or idx > len(data) - 1:
        return
    x = data.iloc[:, 1:]
    y = data.iloc[:,0]
    print('当前数字的标签为:',y[idx])
    
    # data 修改为 ndarray 类型
    data_ = x.iloc[idx].values
    # 将数据形状修改为 28*28
    data_ = data_.reshape(28, 28)
    # 关闭坐标轴标签
    plt.axis('off')
    # 显示图像
    plt.imshow(data_)
    plt.show()
    

def train_model():

    # 1. 加载手写数字数据集
    data = pd.read_csv('data/手写数字识别.csv')
    x = data.iloc[:, 1:] / 255
    y = data.iloc[:, 0]
    
    # 2. 打印数据基本信息
    print('数据基本信息:', x.shape)
    print('类别数据比例:', Counter(y))

    # 3. 分割数据集
    split_data = train_test_split(x, y, test_size=0.2, stratify=y, random_state=0)
    x_train, x_test, y_train, y_test = split_data

    # 4. 模型训练
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train, y_train)

    # 5. 模型评估
    acc = estimator.score(x_test, y_test)
    print('测试集准确率: %.2f' % acc)

    # 6. 模型保存
    joblib.dump(estimator, 'model/knn.pth')


def test_model():
    # 读取图片数据
    import matplotlib.pyplot as plt
    import joblib
    img = plt.imread('temp/demo.png')
    plt.imshow(img)
    # 加载模型
    knn = joblib.load('model/knn.pth')
    y_pred = knn.predict(img.reshape(1, -1))
    print('您绘制的数字是:', y_pred)
# 显示部分数字
show_digit(1)

当前数字的标签为: 0
在这里插入图片描述

# 训练模型
train_model()
数据基本信息: (42000, 784)
类别数据比例: Counter({1: 4684, 7: 4401, 3: 4351, 9: 4188, 2: 4177, 6: 4137, 0: 4132, 4: 4072, 8: 4063, 5: 3795})
测试集准确率: 0.97
# 测试模型
test_model()

您绘制的数字是: [1]
在这里插入图片描述
啊偶,预测错了


http://www.kler.cn/a/516803.html

相关文章:

  • composer安装指定php版本, 忽略平台原因导致的报错
  • docker: Device or resource busy
  • 【2025小年源码免费送】
  • 优选算法——哈希表
  • sql主从同步
  • java 根据前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端
  • 基于Springboot + vue实现的美发门店管理系统
  • Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
  • Redis支持数据类型详解
  • 后端的config包中的常用配置
  • Java毕设项目:基于Springboot农机农业设备租赁网站系统设计与实现开题报告
  • 「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
  • index.php的备份文件名
  • scala文件编译相关理解
  • 前端发送Ajax请求的技术Axios
  • 【TypeScript】命名空间、模块、声明文件
  • 机器学习Pytorch实战(1)——安装Anaconda
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(14)静定与超静定问题、约束类型介绍、简支梁挠度求解和自定义材料库建立
  • LINQ 和 LINQ 扩展方法(2)
  • 考研机试:买房子
  • 基于单片机的多功能蓝牙语音智能台灯(论文+源码)
  • C语言-构造数据类型
  • [Qt]系统相关-多线程、线程安全问题以及线程的同步机制
  • Spring Boot/MVC
  • kamailio-5.8.4-centos9编译
  • impala增加字段,hsql查不到数据