Background: 每个手写数字的图,对应于一张高*宽为28*28像素的图片,形成一个28*28pixel的矩阵,写成一维的1*784pixel的矩阵。每个像素有与之对应的像素值,为0~255之间的整数,表示该像素的亮暗,值越大像素越暗。每个像素值对应于一个特征,Digit recognizer 通过学习这个矩阵的特征来对数字进行分类。

【label 对应手写的数字,pixel0~pixel783为该数字的1*784pixel矩阵】文件格式csv

1.数据可视化。看看编号40的数字是什么~

2.分析原始数据。可见这是一个类别平衡的多分类问题。

3.检查数据,数据完整。

4.数据归一化处理

注意不同的算法对数据有不同的要求。

5.分类算法

这里以简单易懂的KNN为例,先选择合适的K值,以及为了避免过拟合,进行模型评估。

6.参数选择,模型评估——k折交叉验证法

Python sklearn.model_selection提供了

不同于k-fold的是,stratified采用分层采样。

def cross_validation(K,X,y):

knn=neighbors.KNeighborsClassifier(K,weights='distance')

score=cross_val_score(knn,X,y,cv=5,scoring='accuracy')

return np.array(score).mean()

接着对不同K值模型进行循环选择最优。

for K in k_range:

k_score.append(cross_validation(K,X,y))

最后得到最优k==3,再用全部数据训练模型,精度0.969。

7. PCA主成分分析进行特征降维,去除噪声。

def decomposition(n,matrice):

pca=PCA(n_components=n)

pca.fit(matrice)

matrice_pca=np.array(pca.transform(matrice))

return matrice_pca,sum(pca.explained_variance_ratio_)

n_score=[]

n_vr=[]

n_array=[5,10,15,20,25,50,100,200,500]

for n in n_array:

train_X,vr=decomposition(n,X)

n_score.append(cross_validation(3,train_X,y))

n_vr.append(vr)

plt.plot(n_array,n_score,'r',label='Accuracy')

plt.plot(n_array,n_vr,'g',label='Variance ratio')

plt.legend(loc='center',fontsize='large')

plt.xlabel('n_components',size=15)

#plt.xscale("log")

plt.show

将特征维度降至20的时候,保留大部分信息(Variance ratio),训练精度开始趋于饱和。

选n_components为60,精度提升到0.974。使用支持向量机,精度提升到0.982。

ps:CNN能达到0.99以上的精度。

python识别手写数字knn_手写数字识别以及Python sklearn KNN实现相关推荐

  1. 基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。

    本软件是基于TensorFlow深度学习框架,运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件. 具体实现如下: 1.读入数据:运用TensorFlow深度学习 ...

  2. 基于python的手写数字识别实验报告_联机手写数字识别实验报告

    1 联机手写数字识别设计 一.设计论述 模式识别是六十年代初迅速发展起来的一门学科. 由于它研究的是如何用机 器来实现人 ( 及某些动物 ) 对事物的学习. 识别和判断能力, 因而受到了很多科技 领域 ...

  3. python做神经网络识别车牌_Python与人工神经网络:使用神经网络识别手写图像介绍...

    人体的视觉系统是一个相当神奇的存在,对于下面的一串手写图像,可以毫不费力的识别出他们是504192,轻松到让人都忘记了其实这是一个复杂的工作. 实际上在我们的大脑的左脑和右脑的皮层都有一个第一视觉区域 ...

  4. 手写字体识别用python实现_利用贝叶斯算法实现手写体识别(Python)

    #!/usr/bin/python#-*- coding: utf-8 -*-##########################################Bayes : 用来描述两个条件概率之 ...

  5. Python与人工神经网络(2)——使用神经网络识别手写图像

    人体的视觉系统是一个相当神奇的存在,对于下面的一串手写图像,可以毫不费力的识别出他们是504192,轻松到让人都忘记了其实这是一个复杂的工作. 实际上在我们的大脑的左脑和右脑的皮层都有一个第一视觉区域 ...

  6. python实现手写笔迹,手写识别,语音识别,语音生成

    文章目录 1,先说思路 2,实现截图 3,祭出源代码 1,先说思路 1,应该实现对于手写笔迹的记录,生成字迹截图 1.1怎么实现呢?在定点和移动中的鼠标所在处画一条线,鼠标按住移动的话,线也会跟着移动 ...

  7. 人工智能入门第一课:手写字体识别及可视化项目(手写画板)(mnist)

    人工智能入门第一课:手写字体识别及可视化项目(手写画板)(mnist),使用技术(Django+js+tensorflow+html+bootstrap+inspinia框架) 直接上图,项目效果 1 ...

  8. wpf 切换搜狗输入法英文_搜狗输入法全新升级手写功能,中英数字自由写,告别切换丨本周新闻...

    搜狗AI合成主播雅妮 为您带来搜狗本周新闻播报 新 闻 原 文 .01. 2019搜狗全年营收超80亿人民币,创历史新高 近期,搜狗公布了2019年第四季度及全年未经审计的财务报告.财报显示,2019 ...

  9. 手写识别ocr java,怎么识别手写文字?迅捷OCR文字识别软件帮你快速完成!

    怎么识别手写文字?虽然现在手机.平板等设备已经普及开来,但是从小在学校养成的习惯,还是让大部分人选择会手写的方式.手写其实也有很大的缺陷,无论是在生活中还是在网络上进行分享都比较困难. 那么有没有将手 ...

  10. 手写识别字体的步骤是什么?怎么识别图片中的文字?

    手写识别字体的步骤是什么?怎么识别图片中的文字? 1. 打开信风工具网,点击拍照按钮,选择拍图识字模式,对准需要识别的文件进行拍摄。在线工具地址: https://ocr.bytedance.zj.c ...

最新文章

  1. selenium - webdriver常用方法
  2. SQL Server数据库锁的类型、用法及注意事项详解
  3. 7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!
  4. 尝试Office 2003 VSTO的开发、部署
  5. 用jquery写一个属于自己的音乐播放器
  6. Java使用继承的语法是,Java基础语法八 继承
  7. 比尔·盖茨退出微软董事会,回顾盖茨与微软的传奇故事
  8. 无线网络 设置网关和服务器,我家的网络连接的IP是 192.168.1.223 我想问网关是多少 服务器是...
  9. java中怎么实现大小写转换(利用阿斯克码)
  10. 日常一记(11)--word公式输入任意矩阵
  11. ALSA之Codec注册过程
  12. 在DW中制作网页中的表单
  13. 微信公众号关注自动回复得到小程序链接
  14. java 新浪短链接_新浪t.cn短链接如何生成?网址缩短api接口分享
  15. 爬虫 | Python爬取20000+猫眼影评实战
  16. python re 查找字符串中是否含有汉字
  17. tensorflow 版本列表_tensorflow各个版本的CUDA以及Cudnn版本对应关系
  18. linux操作系统下 c语言编程入门
  19. 让自己的QQ个人头像Tip也有彩色背景(转)
  20. java process 乱码_Java常见乱码原理及解决方案

热门文章

  1. 电视android怎么连接手机助手下载,投屏助手app下载 投屏助手(手机投屏到电视) for Android v2.0 安卓版 下载-脚本之家...
  2. matlab 运动控制系统设计与实现,电力传动控制系统:运动控制系统
  3. 快速傅里叶变换(蝶形算法)
  4. 网站开发的需求分析报告
  5. 计算机文化基础(高职高专版 第十一版)第六章 答案
  6. ecshop批量打印快递单
  7. 博客前端模板源码(力荐)
  8. 《微软System Center 2012 R2私有云部署实战》——第二章 微软私有云选型2.1 服务器选型...
  9. 实战Flash游戏开发
  10. Java 将Excel转为et和ett格式