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. Azure AD(五)使用多租户应用程序模式让任何 Azure Active Directory 用户登录

    一,引言 距离上次分享关于 “Azure AD" 的知识过去差不多2个多月了, 今天最近刚好也是学习,分享一下关于Azure AD 使用多租户应用程序模式让任何 Azure Active D ...

  2. Jmeter 中 CSV 如何参数化测试数据并实现自动断言

    当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化.此种情况下,很多测试工程师 ...

  3. PHP rename() 函数

    定义和用法 rename() 函数重命名文件或目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 rename(oldname,newname,context) 参数 描述 ...

  4. PHP stripslashes() 函数

    实例 删除反斜杠: <?php高佣联盟 www.cgewang.comecho stripslashes("Who's Peter Griffin?");0.000.00.. ...

  5. CF习题集一

    CF习题集一 一.CF915E Physical Education Lessons 题目描述 \(Alex\)高中毕业了,他现在是大学新生.虽然他学习编程,但他还是要上体育课,这对他来说完全是一个意 ...

  6. 数据分析学习 third week (7.29~8.4)

    概率分布简介 简单地介绍下常用概率分布的理论知识. 基础概念 1.概率 概率直观上是指一个事件发生可能性大小的数量指标 概率的统计定义:在不变的条件下,重复进行$n$次试验,事件$A$发生的频率稳定在 ...

  7. python 把多个list合并为dataframe并输出到csv文件

    import pandas as pd a = [1,2,3] b = ['a','b','c'] test = pd.DataFrame({'a_list':a,'b_list':b}) 将两个列表 ...

  8. 构建一个拥有sshd服务的docker镜像

    不直接描述结果,通过一个过程探究如何写一个 Dockerfile 一.环境 虚拟机CentOS7.4,Docker1.13.1 二.尝试步骤 1.下载基础镜像 docker pull alpine:3 ...

  9. 2019.12.9Java课堂总结

    今天在课堂上进行了练习.现进行成果及不足汇报: 1.完成了登录界面的设计 2.完成了数据库的连接. 3.完成了数据库表的设计   4.完成了变量的定义与初始化以及get.set的设立. 5.对整体框架 ...

  10. 12、Decorator 装饰器 模式 装饰起来美美哒 结构型设计模式

    1.Decorator模式 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式(Decorator Pattern)允许向一个现 ...