手写数字识别 K临近算法

部署运行你感兴趣的模型镜像

一、原理

手写数字识别,或者说图像识别的本质就是把如下图所示的一张图片转换成计算机能够处理的数字形式。
在这里插入图片描述

1、图像二值化

将图片格式的数字4转换成由0和1组成的“新的数字4”。这是一个32×32的矩阵,数字1代表有颜色的地方,数字0代表无颜色的地方,这样就完成了手写数字识别的第一步也是最关键的一步:将图片转换为计算机能识别的内容——数字0和1,这个步骤又称为图像二值化。
在这里插入图片描述

2、二维数组转换为一维数组

经过图像二值化处理获得的32×32的0-1矩阵相当于一个二维数组,为了方便进行机器学习建模,还需要对这个二维数组进行简单的处理:在第1行数字之后依次拼接第2~32行的数字,得到一个1×1024的一维数组,利用这种一维数组就可以计算不同手写数字之间的距离,或者说这些手写数字的相似度,从而进行手写数字识别。
在这里插入图片描述

3、距离计算

手写数字图片处理后形成的1×1024的二维数组可以看成一个行向量,两张图片对应的行向量间的欧氏距离可以反映两张图片的相似度。因此,我们可以利用K近邻算法模型计算新样本与原始训练集中各个样本的欧氏距离,取新样本的K个近邻点,并以大多数近邻点所在的分类作为新样本的分类。
例如,有一个样本为手写数字4,将它转换为如下所示的1×1024的行向量。将另一个手写数字x转换为如下所示的1×1024的行向量,假设其只有中间一个数字不同。那么手写数字x与样本手写数字4的距离的计算过程如下。
在这里插入图片描述

二、代码实现

1、读取数据

import pandas as pd
df = pd.read_excel('手写字体识别.xlsx')
df.head()

在这里插入图片描述
其中第1列“对应数字”为目标变量y,其余1024列为特征变量X,我们的目的就是利用这些数据搭建手写数字识别模型。

2、提取特征变量和目标变量

X = df.drop(columns='对应数字') 
y = df['对应数字']

第1行代码用drop()函数删除“对应数字”列,将剩下的数据作为特征变量赋给X;第2行代码提取“对应数字”列作为目标变量赋给y。

3、划分训练集和测试集

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=123)

这里将test_size设置为0.2,即将20%的数据划分为测试集数据,并设置random_state为123(可以换成其他数字),使每次运行程序得到的数据划分结果保持一致。

4、模型搭建

from sklearn.neighbors import KNeighborsClassifier as KNN
knn = KNN(n_neighbors=5) 
knn.fit(X_train, y_train)

第1行代码从Scikit-Learn库引入K近邻算法分类模型(KNeighborsClassifier),并简写为KNN;第2行代码将KNN模型赋给变量knn,并设置n_neighbors为5,表示选择5个近邻点来决定新样本的分类;第3行代码用fit()函数进行模型的训练,其中传入的参数正是前面划分好的训练集数据X_train、y_train。

5、模型预测 - 预测数据结果

y_pred = knn.predict(X_test)
print(y_pred[0:100])

在这里插入图片描述

6、预测准确度评估

a = pd.DataFrame()  # 创建一个空DataFrame 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()
# 预测准确度评估
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
score

在这里插入图片描述
在这里插入图片描述
将此时获得的score打印输出,结果为0.979,也就是说模型的预测准确度达到了97.9%。

学习资源《Python大数据分析与机器学习商业案例实战》

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值