利用机器学习进行手写数字识别

本次案例中,我们的目标是从数万个手写图像的数据集中正确识别数字。

数据介绍:

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

在这里插入图片描述

  • 导入工具包
import matplotlib.pyplot as plt   #绘图包
import pandas as pd     #读取CSV文件
from sklearn.model_selection import train_test_split   #训练集和测试集的划分
from sklearn.neighbors import KNeighborsClassifier     #算法包
import joblib                                          #保存模型
from collections import Counter                        #统计当前数据

  • 数据显示
def show_digit(idx):    #索引idx后面if循环需要在idx内
    # 加载数据
    data = pd.read_csv('../data/手写数字识别.csv')    #读取文件数据
    if idx < 0 or idx > len(data) - 1:    #确定索引idx范围,超出即返回
        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_,cmap="gray")
    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')

  • 模型预测
# 读取图片数据
import matplotlib.pyplot as plt
import joblib
img = plt.imread('temp/0.png')
plt.imshow(img,cmap='gray')
# 加载模型
knn = joblib.load('../model/knn.pth')
y_pred = knn.predict(img.reshape(1, -1))
print('您绘制的数字是:', y_pred)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习基于CNN手写数字识别是一项实验性研究,该技术可以通过训练算法和图像数据,自动识别和分类手写数字。下面我将用300字向您介绍相关实验过程。 实验的第一步是准备数据,可以使用MNIST数据,该数据包含大量手写数字图像样本。然后,我们将数据分为训练和测试,用于训练和评估模型性能。 接下来,我们使用CNN模型进行手写数字识别的训练。CNN(卷积神经网络)是一种常用的深度学习模型,特别适用于图像识别。该模型可以自动提取图像中的特征,并进行分类。我们通过不断调整模型的结构和参数,让其能够更好地适应手写数字识别任务。 训练过程中,我们将训练的图像输入到CNN模型中,模型通过反向传播算法不断调整权重和偏置,以最小化预测结果与实际标签之间的误差。随着训练的进行,模型逐渐优化,使其在测试上的准确度得到提升。 完成训练后,我们将使用测试对模型进行评估。通过与实际标签对比,可以计算出模型的准确率、精确度、召回率等性能指标,从而评估模型的表现。 最后,我们可以使用训练好的模型进行手写数字识别。将手写数字图像输入到模型中,模型将自动输出识别结果。 这项实验的目的是将机器学习和CNN技术应用于手写数字识别,提高识别的准确度和速度。它在人工智能、图像处理等领域具有广泛的应用前景,可以为我们提供更多便利和智能化的服务。 ### 回答2: 机器学习是一种可以让计算机通过学习和训练数据来完成特定任务的方法。而基于CNN(卷积神经网络)的手写数字识别实验即利用机器学习的方法来实现对手写数字的自动识别。 首先,我们需要准备一个包含大量手写数字的数据,这些数据中既包含手写数字图片,也包含对应的标签。在该实验中,我们需要将每个手写数字图片与其对应的数字标签建立联系。 接下来,我们可以利用CNN模型来训练和优化识别手写数字的算法。CNN是一种专门应用于图像处理和识别的深度学习模型。通过分析手写数字图片中不同的特征和模式,CNN可以学习到一种有效的表示手写数字的方式。 在训练过程中,我们将数据划分为训练和验证,用于训练和评估模型的性能。通过迭代训练,自动调整模型的参数和权重,使其逐渐提高识别手写数字的准确率。 完成训练后,我们可以用测试来评估模型的性能。测试是一个模型从未见过的数据,用于模拟实际应用场景。通过与标签比较,我们可以计算出模型在测试上的准确率,来评判其对手写数字识别的能力。 最后,我们可以使用训练好的CNN模型来进行实际的手写数字识别。输入一张手写数字图片,经过模型的处理和分析,输出对应的数字。 综上所述,基于CNN的手写数字识别实验利用机器学习的方法训练和优化模型,以实现自动识别手写数字的功能。该实验将深度学习和图像处理的技术应用于手写数字识别,具有较高的准确率和广泛的应用前景。 ### 回答3: 机器学习是一种能够通过训练模型来让计算机对数据进行自动学习的技术。基于卷积神经网络(Convolutional Neural Network,CNN)的手写数字识别机器学习的一项实验。 首先,为了进行手写数字识别实验,我们需要准备一个手写数字的数据。这个数据包含了许多手写数字的图片,每张图片都有对应的标签,表示图片所代表的数字。 接着,我们将利用CNN来构建一个模型。CNN是一种深度学习架构,它能够提取图像的特征并用于分类任务。CNN通常由多个卷积层、池化层和全连接层组成。在手写数字识别实验中,我们可以设计一个具有几个卷积层和全连接层的CNN模型。 然后,我们需要将数据分为训练和测试。训练用于训练模型,测试用于评估模型的性能。在训练过程中,模型会根据训练的数据不断调整自身的参数,以使其能够更好地对手写数字进行识别。训练的过程中需要定义损失函数和优化器来指导模型的参数更新。 训练完成后,我们将使用测试来评估模型的性能。评估指标可以是准确率,即模型正确预测的手写数字的比例。较高的准确率表示模型对手写数字识别能力较强。 此外,为了提高模型的性能,我们还可以采取一些策略,如数据增强、超参数调节等。数据增强可以通过对训练进行旋转、平移、缩放等操作,生成更多的训练样本,以增加模型的泛化能力。超参数调节可以通过调整模型的学习率、批大小等参数,以找到更好的模型配置。 通过这样的实验,我们可以验证基于CNN的手写数字识别模型的效果,并探索机器学习在图像识别任务中的应用潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值