import numpy as np
import matplotlib .pyplot as plt
from sklearn.neighbors import KNeighborsClassifier

读取样本数据,图片

样本数据的提取

  • 特征:每一张图片对应的numpy数组
  • 目标:0,1,2,3,4,5,6,7,8,9
feature = []
target = []
for i in range(10):#i:0-9表示的是文件夹的名称
for j in range(1,501):#j:1-500表示的是图片的名称的一部分
imgPath = './data/'+str(i)+'/'+str(i)+'_'+str(j)+'.bmp'
img_arr = plt.imread(imgPath)
feature.append(img_arr)
target.append(i)
feature = np.array(feature) #feature是一个三维的数组
target = np.array(target)
feature.shape
#(5000, 28, 28)

feature目前是三维的numpy数组。必须变形成二维的才可以作为特征数据

feature = feature.reshape(5000,784)

进行样本数据的打乱,并保证数据对应

np.random.seed(10)
np.random.shuffle(feature)
np.random.seed(10)
np.random.shuffle(target)
对样本数据进行拆分
测试数据
训练数据
knn = KNeighborsClassifier(n_neighbors=9)
knn.fit(x_train,y_train)
knn.score(x_test,y_test)
#对模型进行测试
print('真实的结果:',y_test)
print('模型分类的结果:',knn.predict(x_test))

保存训练好的模型

from sklearn.externals import joblib
#保存
joblib.dump(knn,'./knn.m')
#读取
knn = joblib.load('./knn.m')
knn
将外部图片带入模型进行分类的测试
img_arr = plt.imread('./数字.jpg')
plt.imshow(img_arr)

图片剪切

eight_arr = img_arr[175:240,85:135]
plt.imshow(eight_arr)
eight_arr.shape
#(65, 50, 3)
#模型只可以测试类似于测试数据中的特征数据
#将8对应的图片进行降维(65, 50, 3)降低成(784,)
eight_arr = eight_arr.mean(axis=2)
eight_arr.shape
#(65, 50)
#进行图片像素的等比例压缩
import scipy.ndimage as ndimage
eight_arr = ndimage.zoom(eight_arr,zoom=(28/65,28/50))
eight_arr = eight_arr.reshape(1,784)
eight_arr.shape
#(1, 784)
knn.predict(eight_arr)

代码以及样本数据查看连接:https://github.com/dylan3714/-

KNN手写数字识别的更多相关文章

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

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

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

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

  3. 10,knn手写数字识别

    # 导包 import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import KNeighborsClas ...

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

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

  5. KNN实现手写数字识别

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

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

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

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

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

  8. K近邻实战手写数字识别

    1.导包 import numpy as np import operator from os import listdir from sklearn.neighbors import KNeighb ...

  9. C#中调用Matlab人工神经网络算法实现手写数字识别

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

随机推荐

  1. 点format方式输出星号字典的值是键

    dic = {'a':123,'b':456} print("{0}:{1}".format(*dic)) a:b 2020-05-08

  2. MYSQL的事物四大特性

    MYSQL的事物四大特性(ACID) 1.什么是事物? 事务(Transaction)是并发控制的基本单位.所谓的事务,它是由单独单元的一个或者多个sql语句组成,在这个单元中,每个mysql语句是相 ...

  3. PHP preg_quote() 函数

    preg_last_error 函数用于转义正则表达式字符.高佣联盟 www.cgewang.com 语法 string preg_quote ( string $str [, string $del ...

  4. PHP mt_getrandmax() 函数

    实例 返回通过调用 mt_rand() 函数显示的随机数的最大可能值: <?phpecho(mt_getrandmax()); ?>高佣联盟 www.cgewang.com 定义和用法 m ...

  5. PHP vsprintf() 函数

    实例 把格式化字符串写入变量中: <?php高佣联盟 www.cgewang.com$number = 9;$str = "Beijing";$txt = vsprintf( ...

  6. PHP strspn() 函数

    实例 返回在字符串 "Hello world!" 中包含字符 "kHlleo" 的数目: <?php高佣联盟 www.cgewang.comecho st ...

  7. Logback日志格式优化,解决输出***@2b193f2d问题

    原文出处:Java之道 原文地址:http://www.hollischuang.com/archives/3689 我们在开发的时候,经常要打印日志,有的时候会在一些代码的关键节点处进行日志输出.使 ...

  8. Java自学-JDBC 数据库连接池

    数据库连接池 与线程池类似的,数据库也有一个数据库连接池. 不过他们的实现思路是不一样的. 本章节讲解了自定义数据库连接池类:ConnectionPool,虽然不是很完善和健壮,但是足以帮助大家理解C ...

  9. ipa包如何打包?ios打包ipa的四种方法分享

      今天带来的内容是ios打包ipa的四种方法.总结一下,目前.app包转为.ipa包的方法有以下几种,下面一起来看看吧!    1.Apple推荐的方式,即实用xcode的archive功能 Xco ...

  10. Python初学者的自我修养,找到自己的方向

    今天是 Python专题 的第22篇文章,原本今天是准备和大家继续Python当中多线程的使用的相关内容.然而前两天有一个读者在后台问我,学习Python有哪些适合新手入门的小项目推荐,所以今天这篇临 ...