#knn介绍 更多参考百度介绍


算法思想:给定一个带标检的训练数据集(就是带分类结果的样本),对于一个新的输入实例,我们在训练数据集中以某种距离度量方式找出与该输入实例距离最近邻的k个实例。
找出这k个实例(这也是knn中k的含义)中类别出现最多的那个类别,最后我们就将该新的输入实例划分为此类别
import numpy as np
# bmp 图片后缀
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier img_path = './data/3/3_100.bmp'
arr_img = plt.imread(img_path)
arr_img.shape #维度 #特征必须是二维
feature = [] #特征
target = [] #目标数据
for i in range(10):
for j in range(1,501):
#img_path = './data/'+str(i)+'/'+str(i)+'_'+str(j)+'.bmp'
#将图片数据读取到了numpy
img_arr = plt.imread('./data/%d/%d_%d.bmp'%(i,i,j)) #格式化替换
feature.append(img_arr)
target.append(i)
#将列表转numpy
feature = np.array(feature)
feature.shape #发现feature是三维,必须变形成二维的才可以作为特征数据
#获取了符合要求的特征数据(二维)
feature = feature.reshape((5000,784))
target = target
#将样本集拆分成训练数据和测试数据
np.random.seed(6)
np.random.shuffle(feature)
np.random.seed(6)
np.random.shuffle(target)
#训练数据
x_train = feature[0:4950]
y_train = target[0:4950]
#测试数据
x_test = feature[4950:]
y_test = target[4950:] x_train.shape #训练形状
knn = KNeighborsClassifier(n_neighbors=15)
knn.fit(x_train,y_train) #试数据
knn.score(x_test,y_test) #评分
print('模型分类结果:',knn.predict(x_test))
print('真实分类:',y_test)

#下面测试一张新的照片

#获取外部的一张数字图片,让模型进行分类
digist_img_arr = plt.imread('./数字.jpg')
digist_img_arr.shape
plt.imshow(digist_img_arr)
five_img_arr = digist_img_arr[95:150,90:125] #图片切割 行/列
plt.imshow(five_img_arr)
#检查切分出图片(即将被模型进行分类的图片)的形状
five_img_arr.shape #(55, 35, 3) #将图片的第三个维度删除(降维)
five_img_arr = five_img_arr.mean(axis=2) #任意的聚合方法都能降维 0-x 1-y 2-z
five_img_arr.shape
#对不满足像素要求的图片进行等比例压缩
import scipy.ndimage as ndimage
five_img_arr = ndimage.zoom(five_img_arr,zoom=(28/55,28/35)) #图片压缩
five_img_arr.shape #(28, 28)
five_img_arr = five_img_arr.reshape((1,784)) #1行784列
five_img_arr.shape #(1,784)
knn.predict(five_img_arr)[0] #X 未知分类的数据

#模型保存和运用

#保存模型
from sklearn.externals import joblib
joblib.dump(knn,'./knn.m') #写入模型 value, filename, compress=0, protocol=None, cache_size=None
kknn = joblib.load('./knn.m') #读取模型 kknn对象
print(kknn)
#KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
#metric_params=None, n_jobs=1, n_neighbors=15, p=2,
#weights='uniform')
kknn.predict(five_img_arr)[0] #测试模型 结果5

knn 数字识别的更多相关文章

  1. OpenCV 玩九宫格数独(二):knn 数字识别

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:刘潇龙 前言 首先需要说明,这里所说的数字识别不是手写数字识别! 但凡对机器学习有所了解的人,相信看到数 ...

  2. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...

  3. 机器学习(二)-kNN手写数字识别

    一.kNN算法是机器学习的入门算法,其中不涉及训练,主要思想是计算待测点和参照点的距离,选取距离较近的参照点的类别作为待测点的的类别. 1,距离可以是欧式距离,夹角余弦距离等等. 2,k值不能选择太大 ...

  4. KNN实现手写数字识别

    KNN实现手写数字识别 博客上显示这个没有Jupyter的好看,想看Jupyter Notebook的请戳KNN实现手写数字识别.ipynb 1 - 导入模块 import numpy as np i ...

  5. 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!

    1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...

  6. kaggle 实战 (1): PCA + KNN 手写数字识别

    文章目录 加载package read data PCA 降维探索 选择50维度, 拆分数据为训练集,测试机 KNN PCA降维和K值筛选 分析k & 维度 vs 精度 预测 生成提交文件 本 ...

  7. Kaggle竞赛丨入门手写数字识别之KNN、CNN、降维

    引言 这段时间来,看了西瓜书.蓝皮书,各种机器学习算法都有所了解,但在实践方面却缺乏相应的锻炼.于是我决定通过Kaggle这个平台来提升一下自己的应用能力,培养自己的数据分析能力. 我个人的计划是先从 ...

  8. 基于OpenCV的KNN算法实现手写数字识别

    基于OpenCV的KNN算法实现手写数字识别 一.数据预处理 # 导入所需模块 import cv2 import numpy as np import matplotlib.pyplot as pl ...

  9. 后端程序员之路 13、使用KNN进行数字识别

    尝试一些用KNN来做数字识别,测试数据来自:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgesh ...

随机推荐

  1. 占位 LR

    占位 LR include: LR403

  2. Vue 实例挂载的实现(六)

    Vue 中我们是通过 $mount 实例方法去挂载 vm 的,$mount 方法在多个文件中都有定义,如 src/platform/web/entry-runtime-with-compiler.js ...

  3. MarkDown图文编辑系列教程(一)

    MarkDown图文编辑系列教程(一) 一.写在前面 引言 如果你想作为博主发帖,markdown语法是你的基础操作.本教程分为三个部分,大体为基础操作与进阶操作(公式编辑).本篇为第一部分,对基础操 ...

  4. Docker最全教程——从理论到实战(十一)

    前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...

  5. MAC MAMP集成环境安装 PHP 扩展

    MAC MAMP集成环境安装 PHP扩展 开发环境中,对于需要维护很多 WEB 站点,以及可能会使用到很多不同的 PHP 版本,集成环境比较好用,在MAC 上 MAMP 集成环境是比较好用的,但是在安 ...

  6. 第一次个人编程作业·寒假

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy ...

  7. 《深入理解Java虚拟机》读书笔记五

    第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式——字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...

  8. VScode 编辑器快捷键被占用

    在家办公这个开发环境实在是让人受不鸟 .mysql .vscode 对连QQ都没有运行还是不行.排查最终发现了这个家伙—搜狗输入法.微软输入法 这两个把系统快捷键占得那个全 我这个全局搜索死活用不了, ...

  9. PHP随机生成名字 电话号码

    封装函数 随机生成电话号码 function generate_name($count,$type="array",$white_space=false) {$arr = arra ...

  10. wamp修改MySQL密码

    wamp默认密码为空 用户名为root: 左击wamp绿色小图标,打开phpMyAdmin ->执行 ->账号 ->找到用户名为root的修改权限&&点击修改权限 - ...