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

活动汪活动策划网站WordPress主题改变登录页面

活动汪活动策划网站,WordPress主题改变登录页面,wordpress 扫码付款,wordpress为什么感觉加载慢KNN算法 KNN(K-Nearest Neighbor,K最近邻)算法是一种用于分类和回归的非参数统计方法,尤其在分类问题中表现出色。在手写数字识别领域,KNN算法通过比较测试样本与训练样本之间的距离,找到最近的K个邻居&am…

KNN算法

KNN(K-Nearest Neighbor,K最近邻)算法是一种用于分类和回归的非参数统计方法,尤其在分类问题中表现出色。在手写数字识别领域,KNN算法通过比较测试样本与训练样本之间的距离,找到最近的K个邻居,并根据这些邻居的类别来预测测试样本的类别。

接下来,让我们详细了解了解,knn怎么进行手写数字识别:

数字识别

对于数字识别我们进行三个方面来完成它:

  1. 训练模型:得到模型
  2. 测试模型:测试模型识别的准确率
  3. 测试新的数据:查看实用效果

训练模型

  1. 收集数据

在这里插入图片描述

  1. 读取图片数据

使用opencv处理图片,将图片的像素数值读取进来,并返回的是一个三维(高,宽,颜色)numpy数组

 pip install opencv-python==3.4.11.45
import cv2
img = cv2.imread("digits.png")
  1. 转化灰度图

将图片转化为灰度图,从而让三维数组变成二位的数组:

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  1. 处理图像

对图片进行处理:将其先垂直切分(横向)成50份,再将每一份水平切分(竖向)成100份,这样我们的每份图片的像素值都为20*20(训练的图片比较规范)共500个,比如:

在这里插入图片描述

cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)] #列表生成式
  1. 装进array数组

将切分的每一份图片像素数据都装进array数组中:

x = np.array(cells)
  1. 分隔数据

将数据竖着分隔一半,一半作为训练集,一般作为测试集:

train = x[:,:50]
test = x[:,50:100]
  1. 调整数据结构

由于我们最后要将数据放在KNN算法中训练,我们得将数据结构调整为适合KNN算法训练的结构,KNN要求输入的数据为二维数组,那么我们就来改变每份图片数组的维度:reshape:

train_new = train.reshape(-1,400).astype(np.float32)
  1. 分配标签

我们训练着那么多的数据,却没有给他们具体的类别标签(图像的实际值),因为我们之前的图像处理都是在寻找图像特征,但是并没有给他们一个具体对应的类别,只有空荡荡的特征,无法分类,所以我们得给切分的每份图片打上它们对应的标签:

#repeat用于重复数组中数值,此处重复250次,因为训练集中表示每个类别的图片只有250个,要将它们一一对应打上标签
#np.newaxis用于在数组中创建一个新的维度,即将每个标签单独放
#原本[00000……1111……] ----> [[0][0]……[1][1]……]
k = np.arange(10)
train_mark = np.repeat(k,250)[:,np.newaxis]
  1. 训练模型

在训练时,将训练集与标签一一对应训练:

#通过cv2创建一个knn模型
knn = cv2.ml.KNearest_create()
#cv2.ml.ROW_SAMPLE:告诉opencv将训练的数据与类别按行一一对应训练
knn.train(train_new,cv2.ml.ROW_SAMPLE,train_mark)

这样我们就训练好的这份简单的数据内容,训练了一个可以识别数字0~9的模型,模型训练完了,我们总得知道它到底能不能识别数字吧?识别数字成功的准确率能达到多少呢?

测试模型

  1. 评估性能:测试模型帮助评估模型的准确性、效率、鲁棒性和其他性能指标。
  2. 识别问题:通过测试,可以及早发现和定位模型或产品中的缺陷、错误或不足之处。
  3. 优化和改进:测试模型提供的数据和反馈是优化和改进模型或产品的关键依据。基于测试结果,可以调整模型参数、改进算法设计、优化系统架构等,以提升模型或产品的性能和质量。

那么我们来测试我们刚刚训练出的模型:

前面说了,图片中的数据一半作为训练集,一半作为测试集,将测试集数据也进行以上操作:

test_new = test.reshape(-1,400).astype(np.float32) #调整数据结构
test_labels = np.repeat(k,250)[:,np.newaxis] #分配标签

处理好测试集的数据之后,我们来测试模型:

#将测试集放入模型测试
ret,result,neighbours,dist = knn.findNearest(test_new,k=3)#ret:表示操作是否成功#result:表示测试样本的预测标签(浮点数组)#neighbours:表示与测试样本最近的k个邻居的索引(整数数组)#dist:表示测试样本与每个最近邻居之间的距离(浮点数组)
#通过测试集校验准确率
matches = result==test_labels #将模型对测试集的预测结果(result)与实际的测试标签(test_labels)进行比较。
correct = np.count_nonzero(matches) #计算 matches 数组中 True(即正确预测)的数量
accuracy = correct*100.0/result.size #result.size 返回 result 数组中的元素总数
print("当前准确率为:",accuracy)

模型测试完成后,我们要尝试它在实际中的使用效果,查看其实用性。

测试新的数据

在画图软件中,画几个像素值20*20的图片,让其进入模型看看测试结果:比如:

在这里插入图片描述

这个测试数据已经进行了一部分的处理:

#处理图片
try_img = cv2.imread("4.png")  #读取图片
try_gray = cv2.cvtColor(try_img,cv2.COLOR_BGR2GRAY) #转为灰度图,二维
z = np.array(try_gray) #装入二维数组
try_new = z.reshape(-1,400).astype(np.float32) #调整结构,适用于KNN
#测试结果
ret,result,neighbours,dist = knn.findNearest(try_new,k=3)
print(result)  #查看测试结果,显示分类类别
------------------
[[4.]]  #测试结果正确

总结

本篇介绍了如何使用KNN算法进行手写数字识别:

  1. 训练模型:收集数据 – 读取图片数据 – 转化灰度图 – 处理图像 – 装进array数组 – 调整数据结构 – 分配标签 – 训练模型

  2. 测试模型:评估性能 – 识别问题 – 优化和改进

  3. 测试数据:查看实用性

http://www.yayakq.cn/news/84478/

相关文章:

  • wordpress网站商务通做网站如何写代码
  • 网站建设优化学习网站企业备案改个人备案
  • 网站建设搜索代码灵台县门户网
  • 网站收录一般多久简单好看的logo图片
  • 北京做网站的大公司有哪些欧莱雅官方网站的建设
  • 做亚马逊网站的公司建议长春火车站官网
  • 网站架构拓扑图ucenter使用自己做的网站
  • 网站服务器租用还是托管呢wordpress后台地址更改
  • 爱站关键词挖掘工具网站制作出名的公司
  • php网站截图上海网页制作与设计电话
  • 那个大学业做网站wordpress缓存优化
  • 做网站需要企业佛山网站建设百家号
  • 企业服务网站建设需要多少钱昆明网站关键词优化
  • 驻马店做网站的公司网站制作的原因
  • 全球贸易平台济南seo整站优化价格
  • 网站建设与运营市场风险销售平台系统
  • 轻网站怎么建立建设网站案例分析
  • 建设部网站资质升级公示wordpress 查件
  • 动漫网站模板设计图wordpress step2
  • 徐州cms建站模板如何将项目发布到网上
  • 江门桂城网站建设东莞市网站建设分站公司
  • 成都网站设公司徐汇网站制作
  • 怎么做网站调研宁波cms建站
  • 中江县规划和建设局网站wordpress slider pro
  • 淘宝客网站搭建深圳平面设计招聘
  • 湖北网站推广策略天津进出口企业名录
  • 自己做的网站怎么打开深圳网页制作哪家好
  • 最新国内新闻50条简短网站关键词优化网站推广
  • 西安网站建设哪家强新人做网站盈利
  • 网站开发证书是什么广州地铁微博