基于支持向量机的Digits手写数字识别
基于支持向量机的Digits手写数字识别
描述
支持向量机(Support Vector Machine,简称SVM)模型既可以用于分类也可以用于回归。手写数字识别是一个多分类问题(判断一张手写数字图片是0~9中的哪一个),数据集采用Sklearn自带的Digits数据集,包括1797个手写数字样本,样本为8*8的像素图片,每个样本表示1个手写数字。我们的任务是基于支持向量机算法构建模型,使其能够识别测试集中的手写数字。
本任务的主要实践内容:
Digits手写数字数据集的加载与可视化
SVM分类模型的创建
模型参数调优、评估及手写数字识别预测
源码下载
环境
操作系统:Windows10、Ubuntu18.04
工具软件:Anaconda3 2019、Python3.7
硬件环境:无特殊要求
依赖库
matplotlib 3.3.4 numpy 1.19.5 pandas 1.1.5 scikit-learn 0.24.2 mglearn 0.1.9
分析
Digits数据集中样本数据data的形状为(1797,64),每一行是一个图片的像素数组(长度为64)。样本对应的标签(即每张图片对应的实际数字)存储在target数组中,其长度为1797,因为训练数据是有标签的,因此本实验是监督学习中的一个分类问题。
本任务涉及以下几个环节:
a)加载、查看Digits数据集
b)数据集拆分
d)构建模型拟合数据、评估并做出预测
e)使用其他分类模型做对比
步骤
步骤一、加载、查看Digits数据集
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import matplotlib.pyplot as plt# 加载Digits数据集
digits = load_digits()
data = digits.data # 样本数据
target = digits.target # 标签数据
print(data.shape, target.shape) # 输出数组形状# 使用Matplotlib,显示前20张图片
fig = plt.figure(figsize=(8, 8), facecolor='w')
for i in range(20):ax = fig.add_subplot(4, 5, i+1) # matshow方法将像素矩阵显示为图片# data中的图片像素为长度64的一维数组,需要转成8*8的二维数组来显示ax.matshow(data[i].reshape(8, 8))plt.show()
显示结果:
步骤二、数据集拆分、创建模型并预测
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.25, random_state=0)
print(X_train.shape, X_test.shape)# 创建模型,拟合训练数据
# model = SVC().fit(X_train, y_train) # 默认参数准确率不高
model = SVC(gamma='scale').fit(X_train, y_train) # 指定参数# 评估模型
score = model.score(X_test, y_test)
print('score: ', score)# 预测结果并与实际结果对比(预测测试集前20张图片)
y_pred = model.predict(X_test[:20])
print('预测数字:', y_pred)
print('实际数字:', y_test[:20])
输出结果:
(1347, 64) (450, 64)
score: 0.9911111111111112
预测数字: [2 8 2 6 6 7 1 9 8 5 2 8 6 6 6 6 1 0 5 8]
实际数字: [2 8 2 6 6 7 1 9 8 5 2 8 6 6 6 6 1 0 5 8]
步骤三、使用其他分类模型实现
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.neighbors import KNeighborsClassifier# 定义多个分类模型,加入字典中
models = {}
models['逻辑回归'] = LogisticRegression() # 逻辑回归
models['决策树'] = DecisionTreeClassifier() # 决策树
models['随机森林'] = RandomForestClassifier(100) # 集成算法-随机森林
models['K-最近邻'] = KNeighborsClassifier(n_neighbors=3) # K-最近邻
models['支持向量机'] = SVC(gamma='scale') # 支持向量机# 循环拟合数据,评估模型成绩
for key, value in models.items():model = value.fit(X_train, y_train)score = model.score(X_test, y_test)print('{} :{:0.2f}'.format(key, score))
输出结果:
逻辑回归 :0.95
决策树 :0.82
随机森林 :0.98
K-最近邻 :0.99
支持向量机 :0.99
基于支持向量机的Digits手写数字识别相关推荐
- Python,OpenCV基于支持向量机SVM的手写数字OCR
Python,OpenCV基于支持向量机SVM的手写数字OCR 1. 效果图 2. SVM及原理 2. 源码 2.1 SVM的手写数字OCR 2.2 非线性SVM 参考 上一节介绍了基于KNN的手写数 ...
- 基于SVM技术的手写数字识别
老师常说,在人工智能未发展起来之前,SVM技术是一统江湖的,SVM常常听到,但究竟是什么呢?最近研究了一下基于SVM技术的手写数字识别.你没有看错,又是手写数字识别,就是喜欢这个手写数字识别,没办法( ...
- 基于深度学习的手写数字识别算法Python实现
摘 要 深度学习是传统机器学习下的一个分支,得益于近些年来计算机硬件计算能力质的飞跃,使得深度学习成为了当下热门之一.手写数字识别更是深度学习入门的经典案例,学习和理解其背后的原理对于深度学习的理解有 ...
- 基于深度学习的手写数字识别、python实现
基于深度学习的手写数字识别.python实现 一.what is 深度学习 二.加深层可以减少网络的参数数量 三.深度学习的手写数字识别 一.what is 深度学习 深度学习是加深了层的深度神经网络 ...
- 基于K210的MNIST手写数字识别
基于K210的MNIST手写数字识别 项目已开源链接: Github. 硬件平台 采用Maixduino开发板 在sipeed官方有售 软件平台 使用MaixPy环境进行单片机的编程 官方资源可在这里 ...
- 基于深度学习的手写数字识别Matlab实现
基于深度学习的手写数字识别Matlab实现 1.网络设计 2. 训练方法 3.实验结果 4.实验结果分析 5.结论 1.网络设计 1.1 CNN(特征提取网络+分类网络) 随着深度学习的迅猛发展,其应 ...
- MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试
文章目录 MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试 一.题目要求 二.完整的目录结构说明 三.Mnist数据集及数据格式转换 四.BP神经网络相关知识 4.1 ...
- 基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明)
基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明) 配置环境 1.前言 2.问题描述 3.解决方案 4.实现步骤 4.1数据集选择 4.2构建网络 4.3训练网络 4.4测试网络 4.5图 ...
- 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)
机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...
最新文章
- Linux 01 Liunx目录结构及文件基本操作
- 【并发编程】Atomic与CAS
- 第一款鸿蒙摄像头,随时随地看一看!华为首款鸿蒙智能摄像头发布
- Makefile的重建与include指令
- 计算输入序列能组成三角形的个数
- 循环所有数据库执行脚本
- 山寨十年,东鹏特饮终于打败红牛!但却很尴尬
- PAT (Basic Level) Practice (中文)答案合集
- 跳频通信(梅文华)pdf
- Windows命令提示符中的别名
- utilities(matlab)—— 图像加噪
- 可靠性工程基础 修订版 课后答案 (刘品)
- 模拟电子技术基础笔记(2)——半导体基础知识
- 寻找肇事汽车车牌号C语言,北京交通大学C语言综合程序的设计(黄宇班).doc
- C++无法打开库文件/无法打开源文件
- 在switch时使用枚举类型
- php revel,Revel框架安装
- 解决Win10自动打开代理问题
- 也谈阻塞、非阻塞、同步、异步
- 直播延时是如何产生的?4G摄像头无插件播放视频流媒体服务器EasyDSS超低延时直播的实现方案
热门文章
- Mysql + Mybatis批量更新报错 BadSqlGrammarException
- 对未来计算机的畅想英语作文,你认为未来生活是什么样子的英语作文90词左右...
- Docker学习:外部浏览器访问容器 | 容器访问容器 | 访问容器的常用5种方式 | -p -P 详解
- LTE中小区选择流程及其S准则详解
- 查询部门人数大于2人的部门编号
- GBase 8c原位更新技术
- MySQL UPDATE语句
- spring boot中配置虚拟路径,用来映射显示图片
- Centos7 安装ELK/EFK 7.x 集群搭建实战攻略
- 有个学计算机的男朋友出轨,“男友发了一条朋友圈,我才知道他出轨了”