机器学习:knn算法实现图像识别

1、概述

使用K-近邻(K-Nearest Neighbors, KNN)算法对手写数字进行识别的过程。通过读取一张包含多个手写数字的图片,将其分割成单独的数字图像,并将其作为训练和测试数据集。

2、数据处理思路

1、图像分割该数据有50行100列,每个数字占据20*20个像素点,可以进行切分

2、划分出训练集和测试集

3、每个数据的像素点为20*20,将其全部变成一列1*400格式,转换成数值特征

4、最后使用KNN算法训练模型,使用测试集评估模型的性能

3、方法:

  1. 数据准备: 描述如何获取和准备"digits.png"图片数据。
  2. 图像预处理: 包括图像读取、灰度转换和图像分割。
  3. 数据集划分: 说明如何将图像分割后的小块划分为训练集和测试集。
  4. 特征提取: 描述如何将图像数据转换为适合KNN算法处理的数值特征。
  5. 模型训练: 详细说明如何使用KNN算法训练模型,包括参数设置和训练过程。
  6. 模型评估: 描述如何使用测试集评估模型的性能,包括准确率的计算方法。
  7. **数据检测:**输入数据进行判断。
python 复制代码
import cv2
import numpy as np#导入库
#数据准备
img=cv2.imread("digits.png")#cv2读取文件

#图像预处理
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将读取的文件变成灰度图
splited=[np.hsplit(i,100) for i in np.vsplit(gray,50)]#将该图切成50行100列

#数据集划分
x=np.array(splited)#将切好后的数据以数组的形式保存
train=x[:,:50]#前面50列定义为训练集
test=x[:,50:100]#后面50列定义为测试集

#特征提取
#每一个数据占据20*20的像素,将其转换成一列1*400格式重新塑形并转换为浮点数类型,以便用于K-近邻算法的输入。
train1=train.reshape(-1,400).astype(np.float32)
test1=test.reshape(-1,400).astype(np.float32)
#训练集中0-9,各有250个,是train1的结果,np.newaxis改变维度和上面训练集维度相同
train_result=np.repeat(np.arange(10),250)[:,np.newaxis]
test_result=np.repeat(np.arange(10),250)[:,np.newaxis]

#模型训练
#创建K-近邻算法的实例
knn=cv2.ml.KNearest_create()
#将train1按照1*400的格式为特征,train_result为标签进行训练,cv2.ml.ROW_SAMPLE(将数据一行行输出)
knn.train(train1,cv2.ml.ROW_SAMPLE,train_result)
#将测试集带入,k近邻设置为3(建议为奇数,尽量避免出现相同的数量)
ret,result,neighbours,dist=knn.findNearest(test1,k=3)
#ret:检测操作成功
#result: 这是存储搜索结果。
#neighbours: 这将是一个列表,包含每个测试点的最近邻的索引。
#dist: 这将是一个列表,包含每个测试点到其最近邻的距离

#模型评估
#比较测试结果和测试集结果
matches=result==test_result
#统计正确的数量
correct=np.count_nonzero(matches)
#求占比
accuracy=correct*100.0/result.size
print(accuracy)

#数据检测
imgn=cv2.imread("p6.png")
grayn=cv2.cvtColor(imgn,cv2.COLOR_BGR2GRAY)
xn=np.array(grayn)
testn=xn.reshape(-1,400).astype(np.float32)
ret,resultn,neighbours,dist=knn.findNearest(testn,k=5)
print(resultn)
相关推荐
Raink老师3 小时前
【AI面试临阵磨枪】详细解释 Transformer 架构的核心组件与工作流程。
人工智能·深度学习·transformer·ai 面试·ai 应用开发
qcx233 小时前
【AI Agent实战】OpenClaw 安全加固完全指南:安全攻击手段与五步防护实践(2026最新)
人工智能·安全
故事和你913 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__3 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
码农小白AI3 小时前
AI报告审核进入技术驱动时代:IACheck如何从规则引擎走向深度学习,构建检测报告审核“技术矩阵”
人工智能·深度学习
song150265372983 小时前
视觉检测设备:自动识别缺陷、尺寸、瑕疵、装配错误,一键全检
人工智能·计算机视觉·视觉检测
智能化咨询4 小时前
(163页PPT)某著名企业K3生产制造售前营销指导方案P164(附下载方式)
大数据·人工智能
Zzj_tju4 小时前
大语言模型技术指南:SFT、RLHF、DPO 怎么串起来?对齐训练与关键参数详解
人工智能·深度学习·语言模型
金智维科技官方4 小时前
RPA技术赋能电信运营商话单稽核:金智维如何驱动高精度自动化转型
人工智能·自动化·数字化·rpa·智能体·电信
脱氧核糖核酸__4 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode