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

手机网站和电脑网站开发简单网站建设软件有哪些

手机网站和电脑网站开发,简单网站建设软件有哪些,郑州哪个网站建设最好,各大网站rss订阅源地址文章目录 KNN算法介绍下载OpenCV库实验内容实验结果完整代码手写数字传入模型训练 KNN算法介绍 一、KNN算法的基本要素 K值的选择:K值代表选择与新测试样本距离最近的前K个训练样本数,通常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-python==3.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,dist=knn.findNearest(test_new,k=3)
# # ret:表示查找操作是否成功
# # result:浮点数数组,表示测试样本的预测标签
# # neighbours:这是一个整数数组,表示与测试样本最近的k个索引。
# # dist:这是一个浮点数组,表示测试样本与每一个最近邻居之间的距离。
  • 6、通过测试集校验准确率
matches = result==test_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/result.size
print("当前图片的准确率为:",accuracy)
  • matches = result == test_labels:这行代码通过比较result(KNN算法预测的结果)和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,dist=knn.findNearest(test_new,k=3)
matches = result==test_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, k=3)matches = result ==int(input('请输入猜测的数字:'))correct = np.count_nonzero(matches)accuracy = correct * 100.0 / result.sizeprint(f"当前使用KNN识别手写数字{w}的准确率为:", accuracy)
  • 结果:
    在这里插入图片描述

  • 由此可以看出,此次实验的模型还是相对比较准确的

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

相关文章:

  • 找人做自建房图纸去哪个网站台州做微网站
  • 网站漂浮物怎么做专业建设网站公司排名
  • 帝国网站后台认证码错误网站建设误期违约金赔偿限额
  • 建设网站需要哪些域名网站建设哪方面最重要的呢
  • 企业网站建设犇类建筑分发平台
  • 泉州市住房与城乡建设网站汽车之家如何做团购网站
  • 毫州网站建设二手交易网站开发
  • 网站开发框架的作用网络优化工程师
  • 拼多多网站建设过程网站开发的检索速度在啥范围之内
  • 网站维护托管用asp做的几个大网站
  • 中国建设银行官网站e路护航营销网站优化推广
  • 淄博市建设档案馆网站flash成品网站
  • 江西省城乡建设厅网站手机app编程
  • 客户网站制作管理系统韩国设计交流网站
  • 义乌微信网站建设费用做电商从哪里入手
  • 上海有名的做网站的公司有哪些海口网站建设方面
  • 城固网站建设学建筑设计出来能干嘛
  • 做网站后期怎么维护网络培训seo
  • 30天网站建设 视频教程杭州网站优化排名
  • 网站做直播功能需要注册吗东明网站建设
  • 重庆信息门户网站wordpress海报生成器
  • seo计费管理系统株洲搜索引擎优化
  • 优化网站链接的方法广州做企业网站哪家好
  • 河南网站关键词优化代理微信小程序开发一般多少钱
  • 网站开发人员的岗位有网站架构的重要性
  • frp做网站长沙有什么好玩的地方
  • 如何查看网站的流量如何申请一个网站 做视频直播
  • linux 网站301什么是网络营销?网络营销的特点有哪些?
  • 建设银行网站-个人业务ui设计和网站开发
  • 免费外国网站浏览器wordpress企业建站视频教程