手写数字识别

关注公众号“轻松学编程”了解更多。

导包

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline #导入knn算法,决策树,逻辑斯蒂回归
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from IPython.display import display

获取数据

#导入数字图片
#特征数据
X = []
#目标数据
y =[]
#一共有10个文件夹(数字0-9),每个有500张图片
#图片命名格式为:0_1.bmp
for i in range(10):
for j in range(1,501):
#读取图片
digit = plt.imread('./digits/%d/%d_%d.bmp'%(i,i,j))
X.append(digit)
y.append(i) #把列表转成数组
X = np.array(X)
y = np.array(y)
#查看数组形状
X.shape

说明一共有5000张照片,像素为28*28。

#随机显示一张图片
index = np.random.randint(0,5000,size=1)[0]
digit = X[index]
#设置画布宽为1,高为1
plt.figure(figsize=(1,1))
#显示颜色为gray
plt.imshow(digit,cmap='gray')
print(y[index])

拆分数据

#拆分数据:训练数据和测试数据
from sklearn.model_selection import train_test_split
#测试数据占比为0.1
#一共有5000张照片,那么用来做测试的有500张
X_train,X_test,y_train,y_test = train_test_split(X,y,
test_size=0.1)
X_train.shape

使用knn算法

#使用knn算法
#使用5个点做比较
knn = KNeighborsClassifier(n_neighbors=5)
#训练数据要为二维数组
#如果不做转换会报如下错误,说3维数组不能做运算
#Found array with dim 3. Estimator expected <= 2
#训练模型
knn.fit(X_train.reshape(4500,-1),y_train)
#对训练后的模型进行评分
knn.score(X_test.reshape(500,-1),y_test)

#预测
y_ = knn.predict(X_test.reshape(500,-1))
display(y_[:20],y_test[:20])

使用决策树

# 784个像素---->784个属性-----> 数字不一样
X.reshape(5000,-1).shape

#使用决策树,深度为50
tree = DecisionTreeClassifier(max_depth=50)
#训练模型
tree.fit(X_train.reshape(4500,-1),y_train)
#对训练后的模型进行评分
tree.score(X_test.reshape(500,-1),y_test)

#使用决策树,深度为150
tree = DecisionTreeClassifier(max_depth=150)
#训练模型
tree.fit(X_train.reshape(4500,-1),y_train)
tree.score(X_test.reshape(500,-1),y_test)

使用逻辑斯蒂回归

#使用逻辑斯蒂回归
logistic = LogisticRegression()
logistic.fit(X_train.reshape(4500,-1),y_train)
logistic.score(X_test.reshape(500,-1),y_test)

图像可视化

#可视化
#画布大小10行10列
#每行高为1,每列宽为1.5
plt.figure(figsize=(10*1,10*1.5))
for i in range(30):
#绘制子图
axes = plt.subplot(10,10,i+1)
#测试数据为500张,绘制其中的30张
axes.imshow(X_test[i],cmap='gray')
#添加标题
t = y_test[i]
p = y_[i]
axes.set_title('True:%d\nPred:%d'%(t,p))
#不显示坐标刻度
axes.axis('off')

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python机器学习识别手写数字的更多相关文章

  1. python机器学习使用PCA降维识别手写数字

    PCA降维识别手写数字 关注公众号"轻松学编程"了解更多. PCA 用于数据降维,减少运算时间,避免过拟合. PCA(n_components=150,whiten=True) n ...

  2. 使用神经网络来识别手写数字【译】(三)- 用Python代码实现

    实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...

  3. python手写神经网络实现识别手写数字

    写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...

  4. 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

    TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...

  5. TensorFlow实战之Softmax Regression识别手写数字

         关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...

  6. 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

    笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&a ...

  7. 3 TensorFlow入门之识别手写数字

    ------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...

  8. 用BP人工神经网络识别手写数字

    http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb5 ...

  9. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

随机推荐

  1. Actor:人生如戏全靠演技--“三维度”逻辑编程语言的设计(3)

    在上一篇介绍了逻辑编程的作用,介绍了逻辑编程中的一些概念,包括逻辑程序的结构:事实.规则和问题:知识的表达方式:谓词演算.产生式规则,以及这些概念与三维度(角色+场景+时间)理论的契合关系,正式提出了 ...

  2. mysql-3-orderby

    #进阶3:排序查询 /* 语法: SELECT FROM WHERE ORDER BY ASC|DESC */ USE myemployees; #案例1:查询员工信息,按工资从高到低排 SELECT ...

  3. makefile实验三 理解make工作的基本原则

    代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的. 一,当前的makefile代码 root@ubuntu:~/Makefile_Test# r ...

  4. jvm优化案例

    案例1 survivor区太小,每次Minor GC存活的对象进入老年代,导致老年代可用空间不足,经常发生FULL GC,导致系统变慢 案例问题描述 有一个数据计算系统,从mysql和其他数据源提取数 ...

  5. 【学习笔记】Dirichlet前缀和

    题目戳我 \(\text{Solution:}\) 观察到一个\(a_i\)若对\(a_j\)有贡献,则必须\(i\)的所有质因子幂次小于等于\(j\)的质因子幂次. 于是,我们可以枚举质数的倍数并累 ...

  6. C#怎么从List集合中随机取出其中一个值

    1.首先在该命名空间下创建一个实体,和在Main方法下List集合,为后续做准备: /// <summary> /// 实体 /// </summary> public cla ...

  7. 极客 Play 玩 Terminal——GitHub 热点速览 Vol.40

    作者:HelloGitHub-小鱼干 多少人以为暗黑的终端便是一名程序员的工作台,其实上,终端可以不只是一个输入 command 的界面,也可以是本周特推 kb 一样,面向极客的极简命令行知识库管理器 ...

  8. RHSA-2018:0151-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  9. centos 6.4 配置本地yum源(iso镜像)

    1.先挂载 iso镜像  eg: mount -o loop /home/帐号/downloads/CentOS.iso /mnt/iso 2.用管理员帐号备份CentOS-Base.repo   e ...

  10. 利用Python求解二元一次方程

    本程序流程如下: (1)输入A.B.C (2)计算△ (3)判断解的个数 (4)计算解 (5)输出解 求:x2-3x+2=0的解 #输入A.B.C A=float(input("输入A:&q ...