当前位置: 首页>編程日記>正文

基于KNN的手写数字识别

基于KNN的手写数字识别

1.KNN原理

机器学习的原理

是通过大量的数据,训练出一个能处理此类数据的模型。使得这个模型可以根据已知的数据,准确率很高的判断出未知的数据,从而使得人类能够采取正确的方法去处理某些事情。

传统机器学习算法主要包括以下五类:

回归:建立一个回归方程来预测目标值,用于连续型分布预测
分类:给定大量带标签的数据,计算出未知标签样本的标签取值
聚类:将不带标签的数据根据距离聚集成不同的簇,每一簇数据有共同的特征
关联分析:计算出数据之间的频繁项集合
降维:原高维空间中的数据点映射到低维度的空间中
在这里插入图片描述

  1. 线性回归:找到一条直线预测目标值
  2. 逻辑回归:找到一条直线来分类数据
  3. KNN:用距离度量最相近邻的分类标签
  4. NB:选着后验概率最大的类为分类标签
  5. 决策树:构造一科熵值下降最快的分类树
    决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输出,每个叶结点代表一种类别。采用的是自顶向下的递归方法,选择信息增益最大的特征作为当前的分裂特征。
  6. SVM:构造超平面,分类非线性数据
  7. k-means:计算质心,聚类无标签数据
  8. 关联分析: 在大规模数据集中寻找有趣的关系
  9. PCA降维:减少数据维度,降低数据复杂度

K-近邻算法(KNN)是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

如下图,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
在这里插入图片描述
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离:
在这里插入图片描述
同时,KNN通过依据k个对象中占优的类别进行决策,而不是单一的对象类别决策。这两点就是KNN算法的优势。

就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类。

1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

2.基于KNN的手写数字识别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.代码

import numpy as np
from PIL import Image
import random
from sklearn.neighbors import KNeighborsClassifier def img2vec(fname):'''将jpg等格式的图片转为向量'''im = Image.open(fname).convert('L')     #转为灰度图像tmp = np.array(im)                                #将灰度图像转化为数组vec = tmp.ravel()                               #将多维数组转换为一维数组return vecdef generate_data():     '''36张图片作为训练集'''X = []y = []name=[1,2,3,4,5,6]for i in range(1,len(name)):for j in range(1,7):y.append(name[i])X.append(img2vec('data'+'/'+str(name[i])+'-'+str(j)+'.jpg'))return X,yx_test=[]
x_test.append(img2vec('data/myTest1.jpg'))           #将手写测试图像放入x_test列表'''构建分类器'''
knn_classifier = KNeighborsClassifier(6)
X_train,y_label = generate_data()
knn_classifier.fit(X_train,y_label)                #训练模型
y_predict=knn_classifier.predict(x_test)     # 预测分类print(y_predict)

结果:

在这里插入图片描述

预测出,myTest1.jpg为数字3

数据和代码:百度网盘
提取码:tian
–来自百度网盘超级会员V7的分享

如果这篇文章帮助到你了,那就点个赞,给个关注吧!


https://www.fengoutiyan.com/post/14864.html

相关文章:

  • 手写数字识别实现 毕设
  • 在线手写识别
  • 手写数字识别优化
  • 手写数字1
  • 扫描手写数字识别软件
  • 识别手写数字的软件
  • knn图像识别
  • 手写体识别软件
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機