机器学习实战第3天:手写数字识别

简介: 机器学习实战第3天:手写数字识别



一、任务描述

手写数字识别是机器学习中的一个经典问题,通常涉及将手写数字的图像与其对应的数字进行关联。这种问题通常被认为是计算机视觉领域的一个入门任务,也是许多深度学习框架和算法的基础测试案例之一。

二、数据集描述

手写数字识别数据集包含了一列数字标签,每个数字标签有784个像素值,代表这个数字图片的像素值

三、主要代码

(1)主要代码库的说明与导入方法

import pandas as pd

pandas 是一个数据分析库,提供了灵活的数据结构,如 DataFrame,用于处理和分析结构化数据。它常被用于数据清洗、处理和分析。

import matplotlib.pyplot as plt

matplotlib 是一个用于绘制图表和可视化数据的库。pyplot模块是 matplotlib 的一个子模块,用于创建各种类型的图表,如折线图、散点图、直方图等。

import numpy as np

NumPy 是用于科学计算的库,提供了高性能的数组对象和各种数学函数。它在数据处理和数值计算中被广泛使用,尤其是在机器学习中。

import matplotlib as mpl

这里再次导入 matplotlib 库,但是这次将其别名设置为mpl。这样做是为了在代码中使用更短的别名,以提高代码的可读性。

from sklearn.model_selection import train_test_split

scikit-learn(sklearn)是一个用于机器学习的库。train_test_split函数用于将数据集划分为训练集和测试集,这是机器学习模型评估的一种常见方式。

from sklearn.neighbors import KNeighborsClassifier

这里导入了 scikit-learn 中的KNeighborsClassifier类,该类实现了 k-近邻分类器,用于进行基于邻近样本的分类。

from sklearn.metrics import accuracy_score

从 scikit-learn 中导入accuracy_score函数,用于计算分类模型的准确度分数。准确度是分类模型预测的正确样本数占总样本数的比例。

为确保代码能正常运行,请先复制以下代码,导入本文用到的所有库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

当代码无法运行时,还有可能是文件路径问题,注意改成自己的文件路径

(2)数据预处理

1.导入数据

使用pandas库导入数据集文件,文件路径要换成自己的

digit = pd.read_csv("datasets/digit-recognizer/train.csv")

2.划分训练集与测试集

使用train_test_split函数将数据集分为训练集和测试集,测试集比例为0.2

再将特征和标签分离出来

train, test = train_test_split(digit, test_size=0.2)
 
train_x = train.drop(columns="label")
train_y = train["label"]
test_x = test.drop(columns="label")
test_y = test["label"]

3.图片显示

我们可以使用matplotlib库将图片显示出来

  • train_x.iloc[2]选取训练集的第3行数据
  • np.array()将数组转化为numpy数组,以便使用reshape函数
  • .reshape(28,28)将原来的784个特征转化为(28,28)格式的数据,这代表一个正方形图片
  • cmap=mpl.cm.binary使图片颜色为黑白
  • plt.imshow()函数可以将一个像素数组转化为图片
plt.imshow(np.array(train_x.iloc[2]).reshape(28, 28), cmap=mpl.cm.binary)
plt.show()
print(train_y.iloc[2])

显示图片并打印数据标签

我们可以看到图像是一个数字9,打印标签也确实是9,接下来我们就来训练一个数字识别机器学习模型

(3)模型训练

由于这是一个分类任务,我们可以选择使用KNN近邻算法,第一步设置模型,第二步训练模型

model = KNeighborsClassifier(n_neighbors=3)
model.fit(train_x, train_y)

(4)模型预测与性能评估

寻找最优参数

对于大部分机器学习模型来说,设置不同的参数得到的模型性能都不同,我们可以绘制不同参数的准确率曲线图来寻找最优参数

accuracy = []
 
for i in range(1, 10):
    model = KNeighborsClassifier(n_neighbors=i)
    model.fit(train_x, train_y)
    prediction = model.predict(test_x)
    accuracy.append(accuracy_score(prediction, test_y))
    print()
 
plt.plot(range(1, 10), accuracy)
plt.xlabel("neighbors")
plt.ylabel("accuracy")
plt.show()

可以看到当neighbors为3时模型效果最好,我们在应用时就将模型参数设置为3

(5)除数据预处理外的完整代码

这里是舍弃了一些寻找特征等工作的完整模型训练代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
 
 
digit = pd.read_csv("datasets/digit-recognizer/train.csv")
 
train, test = train_test_split(digit, test_size=0.2)
 
train_x = train.drop(columns="label")
train_y = train["label"]
test_x = test.drop(columns="label")
test_y = test["label"]
 
model = KNeighborsClassifier(n_neighbors=3)
model.fit(train_x, train_y)
prediction = model.predict(test_x)
print(accuracy_score(prediction, test_y))

四、本章总结

  • 学习了使用numpy处理图像数据的方法
  • 学习了打印准确率曲线来寻找最优参数的方法
  • 使用KNN模型来完成分类任务

当然,也可以自己处理特征,自己选择模型,调整参数,看看会不会获得更好的结果

感谢阅读,觉得有用的话就订阅下本专栏吧

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
105 0
|
3月前
|
机器学习/深度学习 数据采集 算法
机器学习实战:基于sklearn的工业蒸汽量预测
机器学习实战:基于sklearn的工业蒸汽量预测
66 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】K-Means对文本聚类和半环形数据聚类实战(附源码和数据集)
【Python机器学习】K-Means对文本聚类和半环形数据聚类实战(附源码和数据集)
71 0
|
3月前
|
机器学习/深度学习 算法 TensorFlow
实战技术:如何使用Python进行机器学习建模
实战技术:如何使用Python进行机器学习建模
47 1
|
4月前
|
机器学习/深度学习 算法 Python
【Python机器学习】KNN进行水果分类和分类器实战(附源码和数据集)
【Python机器学习】KNN进行水果分类和分类器实战(附源码和数据集)
302 1
|
4月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】K-Means算法对人脸图像进行聚类实战(附源码和数据集)
【Python机器学习】K-Means算法对人脸图像进行聚类实战(附源码和数据集)
144 1
|
4月前
|
机器学习/深度学习 算法 Python
【Python机器学习】感知器进行信用分类和使用KNN进行图书推荐实战(附源码和数据集)
【Python机器学习】感知器进行信用分类和使用KNN进行图书推荐实战(附源码和数据集)
126 0
|
4月前
|
机器学习/深度学习 算法 数据可视化
【Python机器学习】SVM解决非线性问题和信用卡欺诈检测实战(附源码和数据集)
【Python机器学习】SVM解决非线性问题和信用卡欺诈检测实战(附源码和数据集)
74 0
|
1月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
27天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)