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

免费建各种网站网站免费下载安装大全手机版

免费建各种网站,网站免费下载安装大全手机版,台州市建设厅网站,express网站开发文章目录 KNN算法介绍下载OpenCV库实验内容实验结果完整代码手写数字传入模型训练 KNN算法介绍 一、KNN算法的基本要素 K值的选择#xff1a;K值代表选择与新测试样本距离最近的前K个训练样本数#xff0c;通常K是不大于20的整数。K值的选择对算法结果有重要影响#xff0c… 文章目录 KNN算法介绍下载OpenCV库实验内容实验结果完整代码手写数字传入模型训练 KNN算法介绍 一、KNN算法的基本要素 K值的选择K值代表选择与新测试样本距离最近的前K个训练样本数通常K是不大于20的整数。K值的选择对算法结果有重要影响需要通过交叉验证等方法来确定最优的K值。距离度量常用的距离度量方式包括闵可夫斯基距离、欧氏距离、曼哈顿距离、切比雪夫距离、余弦距离等。其中欧氏距离在KNN算法中最为常用。分类决策规则一般采用多数投票法即选择K个最相似数据中出现次数最多的类别作为新数据的分类。 二、KNN算法的工作流程 准备数据对数据进行预处理包括收集、清洗和归一化等步骤以确保所有特征在计算距离时具有相等的权重。计算距离计算测试样本点到训练集中每个样本点的距离。排序与选择根据距离对样本点进行排序并选择距离最小的K个样本点作为测试样本的邻居。分类决策根据K个邻居的类别信息采用多数投票法确定测试样本的类别。 下载OpenCV库 pip install opencv-python # 后面可以加上指定版本和镜像文件 #如 pip install opencv-python3.4.18.65调用包和其他包有所不同 import cv2实验内容 实验目的 通过OpenCV库中的KNN算法对数据进行分类并验证。 实验流程 下面是一张已经经过一些初步处理过的图片其中含有0~9的手写数字且每一个数字都是5行100列共有5000个数字。本次通过对这张分辨率为2000*1000的图片进行切分。将其划分成独立的数字每个数字大小为20*20像素共计5000个并平均切分为左右两个等份一份作为训练集一份作为测试集。将训练集放到模型中训练后再传入测试集进行测试得到结果后通过与正确结果比较得出准确率。最后自己手写一些数字放入实验项目下并处理后放入模型测试出结果。 实验步骤 1、获取数据2、处理数据3、分配标签4、模型构建和训练5、测试6、通过测试集校验准确率 1.获取数据 本实验数据已经提供了只需要将图片拉入到项目目录中再用以下代码进行读取 # 通过opencv中的cv2.imread()方法进行读取 img cv2.imread(shu_zi.png)2.处理数据 通常在实验项目中获取数据和处理数据通常需要花费很长时间在此实验中要进行一下数据处理 首先给的图片是一个黑底白字的图片但是图片是一个三通道彩色图片为了简化图像数据和计算量故此我们要将图片转换成灰度图。再对图片进行切分分别首先将行切分成50份每一份20个像素值再将切分过一次的数据进行一次对列的切分切分100份每一份20个像素值。将切分得到的数据转化成数组。划分训练集和测试集对得到的数组进行划分从中间一分为二一份为训练集一份为测试集。对训练集和测试集中的数据构造为符合KNN的输入将每个数字的尺寸由20*20调整为1*400。 gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cells [np.hsplit(row,100) for row in np.vsplit(gray,50)] x np.array(cells)train x[:,:50] test x[:,50:100]# 将数据构造为符合KNN的输入将每个数字的尺寸由20*20调整为1*400 train_new train.reshape(-1,400).astype(np.float32) test_new test.reshape(-1,400).astype(np.float32) 注意.astype(np.float32): 是为了将reshape后的数组的数据类型转换为np.float32即32位浮点数。这是因为在机器学习或深度学习中通常会使用浮点数来表示特征或标签而np.float32相比于64位浮点数np.float64可以节省内存同时对于大多数应用来说其精度已经足够。 3.分配标签 分别为训练集、测试集分配标签。 # 分配标签分别为训练数据、测试数据分配标签 k np.arange(10) labels np.repeat(k,250) train_labels labels[:,np.newaxis] # np.newaxis是numpy库中一个特殊对象用于增加一个新的维度 test_labels np.repeat(k,250)[:,np.newaxis] 4.模型构建和训练 # # # 构建训练 knn cv2.ml.KNearest_create() # 通过cv2创建一个knn模型 knn.train(train_new,cv2.ml.ROW_SAMPLE,train_labels) # cv2.ml.ROW_SAMPLE是用来告诉模型一行是一组数据每一列是一个特征。5.测试 传入训练集并指定K的值可以更改不同的K值来找到最佳的测试结果 # findNearest测试方法 ret,result,neighbours,distknn.findNearest(test_new,k3) # # ret表示查找操作是否成功 # # result浮点数数组表示测试样本的预测标签 # # neighbours这是一个整数数组表示与测试样本最近的k个索引。 # # dist这是一个浮点数组表示测试样本与每一个最近邻居之间的距离。6、通过测试集校验准确率 matches resulttest_labels correct np.count_nonzero(matches) accuracy correct*100.0/result.size print(当前图片的准确率为,accuracy)matches result test_labels这行代码通过比较resultKNN算法预测的结果和test_labels测试集的真实标签来生成一个布尔数组matches。如果result中的某个预测值与test_labels中对应的真实标签相等则matches中对应位置的值为True否则为False。correct np.count_nonzero(matches)这行代码使用np.count_nonzero函数计算matches数组中True的数量即正确预测的数量。np.count_nonzero函数会统计数组中所有非零元素在这个场景下即True的数量。accuracy correct * 100.0 / result.size这行代码计算准确率。首先将正确预测的数量correct乘以100.0为了得到百分比然后除以result.size即预测结果的总数也就是测试集的大小。这样得到的accuracy就是准确率以百分比形式表示。print(“当前使用KNN识别手写数字的准确率为:”, accuracy)最后这行代码将计算得到的准确率打印出来。 实验结果 打印准确率 完整代码 import numpy as np import cv2 img cv2.imread(shu_zi.png) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cells [np.hsplit(row,100) for row in np.vsplit(gray,50)] x np.array(cells) train x[:,:50] test x[:,50:100] # 将数据构造为符合KNN的输入将每个数字的尺寸由20*20调整为1*400 train_new train.reshape(-1,400).astype(np.float32) test_new test.reshape(-1,400).astype(np.float32)# 分配标签分别为训练数据、测试数据分配标签 k np.arange(10) labels np.repeat(k,250) train_labels labels[:,np.newaxis] # np.newaxis是numpy库中一个特殊对象用于增加一个新的维度 test_labels np.repeat(k,250)[:,np.newaxis] knn cv2.ml.KNearest_create() # 通过cv2创建一个knn模型 knn.train(train_new,cv2.ml.ROW_SAMPLE,train_labels) ret,result,neighbours,distknn.findNearest(test_new,k3) matches resulttest_labels correct np.count_nonzero(matches) accuracy correct*100.0/result.size print(当前使用KNN识别手写数字的准确率为:,accuracy)手写数字传入模型训练 下图是通过电脑自带的画图工具写出的三个数字并且已经将大小调整为20*20像素大小的图片 将图片经过与实验中相同的处理方法加以处理并传入到模型中进行测试 import numpy as np import cv2 from numpy.ma.core import array img cv2.imread(shu_zi.png) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cells [np.hsplit(row, 100) for row in np.vsplit(gray, 50)] x np.array(cells) train x[:, :50] train_new train.reshape(-1, 400).astype(np.float32) i (a2.png, a1.png, a3.png) # wary (1,3,9) # for n in wary: for w in i:a1 cv2.imread(w)a2 cv2.cvtColor(a1, cv2.COLOR_BGR2GRAY)a3 a2.reshape(-1, 400).astype(np.float32)k np.arange(10)labels np.repeat(k, 250)train_labels labels[:, np.newaxis] # np.newaxis是numpy库中一个特殊对象用于增加一个新的维度knn cv2.ml.KNearest_create() # 通过cv2创建一个knn模knn.train(train_new, cv2.ml.ROW_SAMPLE, train_labels)ret, result, neighbours, dist knn.findNearest(a3, k3)matches result int(input(请输入猜测的数字))correct np.count_nonzero(matches)accuracy correct * 100.0 / result.sizeprint(f当前使用KNN识别手写数字{w}的准确率为:, accuracy)结果 由此可以看出此次实验的模型还是相对比较准确的
http://www.dnsts.com.cn/news/61060.html

相关文章:

  • 哪个企业的网站做的比较好网站建设公司运营
  • 易语言可以做网站么a032网站模版
  • 合肥高端网站开发公司手游网络游戏排行榜
  • 工信部网站备案登陆网页设计 做网站的代码
  • 做酒类网站网站建设 域名 数据库
  • 专业网站优化外包威海人社app下载官网2022
  • 最佳线上网站制作模板首页关键词排名代发
  • 网站视频打不开什么原因宽带
  • 做多站发布信息的网站老版51个人空间找照片
  • 重庆高端网站设计标书制作培训机构
  • 成都高端网页开发公司天津网站的优化
  • 网站建设 电子商务网站开发做网站应该注意
  • 福田做棋牌网站建设哪家技术好软件之家
  • 淄博网站建设优化上汽如何构建自己的网站
  • 江门网站关键词推广我要表白网app
  • 怎样建个自己的网站烟台制作网站的公司
  • 湖南做网站 地址磐石网络电子商城建设
  • 建立企业网站的缺点在哪个网站可以学做衣服
  • 建立个人网站费用win7可以做网站吗
  • asp.net怎么做登录网站公司网站首页导航html
  • 网站制作和设计需要多少钱wordpress多个置顶
  • 用mediawiki做的网站网站建设 400电话 广告
  • 怎么样建网站卖东西宝坻做网站
  • 做超市dm的网站美颂雅庭装饰公司电话
  • 罗湖医院网站建设专注网站平台推广公司
  • 泉州网站建设-泉州网站建设做音乐网站的目地
  • 齐河县建设局网站四川住建局和城乡建设厅
  • 天津住房和城乡建设建造师网站网页设计表单注册代码
  • 那家建网站宝盒好用网站建设的课程设计报告
  • 阿里巴巴网站网络营销的影响网站建设全过程及如何赚钱