手写数字识别python_Python手写数字识别(KNN算法)

⼿写数字识别python_Python⼿写数字识别(KNN算法)
前⾔
⼿写数字识别作为机器学习中⼀个⽐较有趣的内容,结合 K210 芯⽚强⼤的 KPU 算⼒,可以蹦出很多好玩的点⼦。本次以通俗易懂的⽅式记录⼀波玩耍⼿写数字识别的案例。
⽬录
1. 相关理论
2. 基于 KNN 分类算法的模型搭建(代码展⽰)
3. 图⽚导⼊与分类预测(代码展⽰)
1、相关理论
1.1 图像⼆值化
如上图:是⼀个红⾊的数字4,像素尺⼨为 32*32,即⼀共有1024个像素点,每个像素点的⾊彩值范围是0-255,其中0代表⿊⾊,255代表⽩⾊,故本⽂以128为阈值进⾏划分。
令单个像素点的⾊彩值为 x ,则:x<=128 时,取 x = 1,反之 x = 0
经过上述变换,整张图⽚的⾊彩值就只有 0,1 两种了,此过程就是图⽚的⼆值化过程。
1.2 ⼆值化数据的存储
经过⼆值化的图⽚,仍然有1024个像素点,只是其值仅有0,1两种,那么,怎样将图⽚的信息和模型之间建⽴联系呢?
下图是⼀份包含多张⼿写图像信息的 EXCEL 表格。从第⼀⾏来看,其第⼀列代表图⽚中的数字,其它列为分别为1024个像素点的值。这样,每⼀⾏就包含了⼀张图⽚的信息。
所以后⾯需要做的⼯作就是训练模型,通过 1024 个像素点的信息推断出该⾏第⼀列所对应的信息。
当然啦,上图中的训练数据均有结果对应,⽤于训练模型和检验模型的有效性;⽽⼿写的数字只有1024个像素点信息,所以需要通过训练好的模型进⾏预测,推断出图⽚中对应的数字。
2、KNN 分类算法
KNN 分类算法就⽐较简单了。盯着下图,最中间的这个圆当中有2个三⾓形和⼀个⽅块,它们各属于⼀个阵营。突然新来了⼀个五⾓星,那怎么判断五⾓星是属于哪个阵营呢?
很明显,出 K 个距离五⾓星最近的形状,⽐如 K=3,那么就选中了刚刚提到的这2个三⾓形和1个⽅块。其中,三⾓形⽐正⽅形多,显然三⾓形更⽜逼,所以五⾓星跟它同阵营。这就是 KNN 分类的原理。
⾄于距离的计算,⾼中数学⾥的欧式距离公式就能搞定:
推⼴到多维变量,则有:
3、图⽚导⼊及分类预测
3.1 导⼊ EXCEL 中的训练数据
import pandas as pd
df = pd.read_excel('data.xlsx')
x = df.drop(columns = '对应数字')  # 抛弃第⼀列的因变量数据,保留⾃变量数据
y = df['对应数字']                # 第⼀列的因变量数据
3.2 训练 KNN 模型
del_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size = 0.2,random_state = 123)
ighbors import KNeighborsClassifier as KNN
knn = KNN(n_neighbors=5)          # 算法 K 参数设置 [1:8]
model = knn.fit(xtrain,ytrain)
print(model)
3.3 对预测模型进⾏评价
ics import accuracy_score
y_pred = knn.predict(xtest)
score2 = knn.score(xtest,ytest)    # 计算 knn 分类预测得分
print('KNN预测模型评分为: ' + str(score2))
3.4 图⽚数字导⼊及模型验证
from PIL import Image
img = Image.open('数字6.png')
img = size ((32,32))
img = vert('L')  # 转换为灰度图
# 图⽚⼆值化处理
import numpy as np
img_new = img.point (lambda x: 0 if x >128 else 1)  # 像素点控制,0为⿊,255为⽩,所以取中间128作为阈值,对像素点⼆值化处理arr = np.array(img_new)                              # arr 为 32*32 像素点矩阵
# 打印⼆值化图形
for i in range(arr.shape[0]):                        # shape[0]代表⾏数,1代表列数
print(arr[i])
arr1 = shape(1,-1)                            # arr 转换为 1 ⾏,(-1,1)为 1 列
result = knn.predict(arr1)
print('识别的数字为:' + str(result))
4、效果展⽰
4.1 KNN 模型评分情况
从下图可以看出, KNN 模型的预测精度 score 表现还是⾮常不错的!
4.2 图⽚⼆值化处理后的像素数据
不难看出,1代表⿊⾊部分,0代表⽩⾊部分;在像素矩阵中可以明显地体现 6 这个数字。
4.3 预测结果
其实,从 0 到 9 均测试了⼀遍,只有数字 8 ⽐较刁钻,好⼏次预测成了 9;最后发现是截图的⽅式有点⼩问题,纠正以后,所有的数字均能够精准识别。
5、结论
最后,接 4.3 涉及的问题,有⼀个注意事项:截图的时候尽可能⼩,让数字充满整张图⽚,这样才能够有效保证识别的准确度。

本文发布于:2024-09-20 14:42:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/89804.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   数字   像素点   识别   预测   数据   分类   值化
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议