这是一个手写数字的识别实验,是一个sklearn在现实中使用的案例。原例网址里有相应的说明和代码。

首先实验的数据量为1797,保存在sklearn的dataset里。我们可以直接从中获取。每一个数据是有image,target两部分组成。Image是一个尺寸为8*8图像,target是图像的类别,在我们看来类别就是手写的数字0-9.

代码一开始,将数据载入。

# Standard scientific Python imports

import matplotlib.pyplot as plt

# Import datasets, classifiers and performance metrics

from sklearn import datasets, svm, metrics

# The digits dataset

digits = datasets.load_digits()

之后,抽取了前四个训练数据将他们画了出来。里面enumerate函数用法参见如下网址:

images_and_labels = list(zip(digits.images, digits.target))

for index, (image, label) in enumerate(images_and_labels[:4]):

plt.subplot(2, 4, index + 1)

plt.axis('off')

plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')

plt.title('Training: %i' % label)

然后训练器为向量机分类器SVC。

向量机的原理可以看一下这一篇博客:

这里它只规定了参数gamma

更多的可选参数在如下网址中:

在SVM中,我尝试变换了一下内核函数,除了kernel=’sigmoid‘效果比较差,其他的效果差别不大。

# To apply a classifier on this data, we need to flatten the image, to

# turn the data in a (samples, feature) matrix:

n_samples = len(digits.images)

data = digits.images.reshape((n_samples, -1))

# Create a classifier: a support vector classifier

classifier = svm.SVC(gamma=0.001,kernel='poly')

# We learn the digits on the first half of the digits

classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])

之后是训练和测试环节,在这里它将所有的数据分成了两部分。一半去做训练集,一半去做测试集。

# Now predict the value of the digit on the second half:

expected = digits.target[n_samples / 2:]

predicted = classifier.predict(data[n_samples / 2:])

print("Classification report for classifier %s:\n%s\n"

% (classifier, metrics.classification_report(expected, predicted)))

print("Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted))

这里说一下测试的参数。首先是precision,recall,f1-score,support这四个参数。

f1-score是通过precision,recall两者算出来的。计算公式如下图:

support为支持度,表示识别出来的数据个数。

其次是混淆矩阵:在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类像比较计算的。混淆矩阵的每一列代表了实际测得信息,每一列中的数值等于实际测得像元在分类图象中对应于相应类别的数量;混淆矩阵的每一行代表了数据的分类信息,每一行中的数值等于分类像元在实测像元相应类别中的数量。

之后将几个测试集中的数据画下来就好啦~

images_and_predictions = list(zip(digits.images[n_samples / 2:], predicted))

for index, (image, prediction) in enumerate(images_and_predictions[:4]):

plt.subplot(2, 4, index + 5)

plt.axis('off')

plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')

plt.title('Prediction: %i' % prediction)

原例网址

pythonsklearn做手写识别_Python scikit-learn 学习笔记—手写数字识别相关推荐

  1. 写给初学者的深度学习教程之 MNIST 数字识别

    一般而言,MNIST 数据集测试就是机器学习和深度学习当中的"Hello World"工程,几乎是所有的教程都会把它放在最开始的地方.这是因为,这个简单的工程包含了大致的机器学习流程,通过练习这个工程 ...

  2. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  3. IOS学习笔记04---编写第一个C语言程序-Hello World

    IOS学习笔记04---编写第一个C语言程序-Hello World --------------------------------------------------------         ...

  4. 如何写好科研论文(学习笔记2000字)

    如何写好科研论文(学习笔记2000字) 通过本课程的学习,我学习到了许多如何写好科研论文的方法,接下来我将具体阐述我的收获. 一.在第一章中,主要学习了如何造就一篇优秀的学术论文. (一)标题要起得好 ...

  5. opencv学习笔记八--答题卡识别

    opencv学习笔记八--答题卡识别 导入工具包 定义函数 扫描 自适应阈值处理 检测每一个选项的轮廓 对轮廓进行排序以获取序号 打印结果 参考 导入工具包 #导入工具包 import numpy a ...

  6. 最热网友收藏:写得蛮好的linux学习笔记(2007年第10周)

    2007年第10周最热网友收藏 上班人员必读:"五险一金"详解!(130),共376人收藏,liukang520236首先收藏 写得蛮好的linux学习笔记-(96),共159人收 ...

  7. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  8. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  9. python爬b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  10. python机器学习手写字体识别_Python 3 利用机器学习模型 进行手写体数字检测

    0.引言 介绍了如何生成手写体数字的数据,提取特征,借助 sklearn 机器学习模型建模,进行识别手写体数字 1-9 模型的建立和测试. 用到的几种模型: 1. LR,Logistic Regres ...

最新文章

  1. liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL
  2. 因果关系是通向强AI的阶梯or作用被夸大?
  3. 219个opencv常用函数汇总
  4. mysql 联合索引长度_MySQL 中索引的长度的限制
  5. 使用 Android Studio 进行测试 (二) UI 测试
  6. animate方法 jQuery中元素的创建 创建十个p标签 创建列表 动态创建列表
  7. how is SAP CRM One Order processType fragment initialized
  8. 类中函数模板 typeof_Julia中的typeof()函数
  9. 【Clickhouse】Clickhouse Live View
  10. Vue使用html2Canvas和canvas2Image下载二维码会模糊的问题解决方法
  11. Python 利用*args和**kwargs解决函数遇到不确定数量参数问题
  12. ML————朴素贝叶斯原理和SKlearn相关库
  13. php array函数 array_sum 求数组所有值和
  14. poj 1222 EXTENDED LIGHTS OUT 高斯消元
  15. 禾川伺服驱动器X2E-750调试记录
  16. TVS瞬态抑制二极管选型指南
  17. 基于 Elasticsearch 的站内搜索引擎实战
  18. 腾讯2018秋招笔试真题-小Q的歌单
  19. DIMM DDR 区别和联系
  20. matlab升幂降幂排列,升幂排列与降幂排列测试题及答案

热门文章

  1. QOpenGLWidget显示视频流数据
  2. JAVA消息系列:JMS详解
  3. Django中filer和get的区别
  4. 大多数的愤怒源于自己的无知——《Excel受保护视图》
  5. 拓扑结构计算机网络结构,计算机网络的常见的七种拓扑结构
  6. 蓝桥杯单片机之PCF8591模块的使用
  7. 用74ls90组成二十四进制计数器_减法计数器的组成以及原理
  8. 2020上海全国计算机一级考试时间,2020全国等级计算机考试时间(全国计算机一级报名时间)...
  9. 将被雪藏的AI算法,抛开快手和火山,YouTube的儿童APP值得学习吗?
  10. 采集HTTP与HTTPS