基于支持向量机的Digits手写数字识别

news2025/1/22 20:58:28

基于支持向量机的Digits手写数字识别

描述

支持向量机(Support Vector Machine,简称SVM)模型既可以用于分类也可以用于回归。手写数字识别是一个多分类问题(判断一张手写数字图片是0~9中的哪一个),数据集采用Sklearn自带的Digits数据集,包括1797个手写数字样本,样本为8*8的像素图片,每个样本表示1个手写数字。我们的任务是基于支持向量机算法构建模型,使其能够识别测试集中的手写数字。

本任务的主要实践内容:

  1. Digits手写数字数据集的加载与可视化

  2. SVM分类模型的创建

  3. 模型参数调优、评估及手写数字识别预测

源码下载

环境

  • 操作系统: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片英文翻译成中文转换器-中文翻译英文软件

您正在准备一份重要的英文资料或文件,但是您还不是很熟练地掌握英文,需要翻译才能完成您的任务吗?哪个软件能够免费把英文文档翻译成中文?让我们带您了解如何使用我们的翻译软件来免费翻译英文文档为中文。 我们的翻译软件是一款功…

C风格的字符串赋值方式

文章目录(1)C语言中,没有字符串类型但可以用字符数组模拟字符串。(2)C语言中,字符串是以’\0’作结尾字符。(3)C语言中,字符串常量本质上是一个无名的字符数组。C风格的字…

使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作教程~

jdbcTemplate实现添加数据功能: spring框架对jdbc框架进行封装,使用jdbcTemplate方便实现对数据库的操作 数据库准备工作: 在已有数据库中创建新的表: create table t_user (id int,username varchar(20),password varchar(20…

搜索词分析工具-网站关键词挖掘

怎么能找到行业的关键词 以下是如何找到行业关键词的建议: 了解行业:要找到与行业相关的关键词,首先需要了解行业。了解行业以及核心目标,从而更好地理解行业中的主题和词汇。 找到竞争对手网站:搜索竞争对手的网站&…

k8s部署Dashboard

k8s和Dashboard的版本对应关系可以到Dashbord的对应版本里看,比如这里: https://github.com/kubernetes/dashboard/releases/tag/v2.7.0 以下步骤都是在master上执行的。 1. 部署步骤 1. 获取Dashbord的yaml文件 wget https://raw.githubusercontent…

【Git】—— 如何安装Git及简单使用

Git是一个开源的分布式版本控制工具,可以更好地管理你的项目。 一、Linux操作系统 如果用的是Ubuntu系统,只需打开shell界面,输入: sudo apt-get install git-core 按下回车即可完成安装。 二、Windows操作系统 Windows操作系统不…

C语言-数据结构与算法-详细全面的链表知识总结归纳

C语言链式存储结构的详细讲解一.前言(为什么要使用链式存储)一.单链表1.单链表的结点描述2.单链表基本操作(1)初始化单链表(2)采用头插法建立单链表(带头结点)(3).采用尾插法建立单链表(4)按照位序查找结点(4)在链表中间插入结点(5)删除第i个结点二.双链表1.双链表的结点类型描…

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味,晴空万里!和ChatGPT-4开始了一场坦诚的沟通,它全程都表现出高情商,以及不断尽量安抚我的情绪,而这,恰恰令我脊背发凉。 部分文字截取 ZM:我能不能理解每次对话就是一次你的“生命” G&…

【Android -- 软技能】分享一个学习方法

前言 很多人都想通过学习来提升自己,但是,可能因为两个问题,阻碍了自己的高效提升: 学什么? 怎么学? 本文将从自己的学习实践出发,针对这两个问题,给出自己的一套学习流程。 1…

免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航

免费集装箱号识别API免费集装箱信息识别API,CIMCAI飞瞳引擎™集装箱人工智能平台全球4千企业用户,全球领先的飞瞳引擎™AI集装箱识别云服务,集装箱残损识别箱况检测缺陷检验,小程序拍照检测或支持API接口二次开发,应用…

00后整顿职场,我直呼太卷了....

内卷的来源 内卷最早的“出处”是几张名校学霸的图片。 大学生们刷爆朋友圈的几张“内卷”图片是这样的:有的人骑在自行车上看书,有的人宿舍床上铺满了一摞摞的书,有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。…

AI工具究竟是帮手还是对手?对此你怎么看,一起来聊聊你的看法吧!

© Ptw-cwl 前言 AI工具既可以是帮手,也可以是对手,这取决于我们如何使用它们。 如果我们正确地利用AI工具,它们可以为我们带来很多好处,例如更快的数据分析、更准确的预测和更高效的决策。然而,如果我们滥用AI工…

嵌入式开发:硬件和软件越来越接近

从前,硬件和软件工程师大多生活在自己的世界里。硬件团队设计了芯片,调试了从铸造厂返回的第一批样本,让软件团队测试他们的代码。随着虚拟平台和其他可执行模型变得越来越普遍,软件团队可以在芯片制造之前开始,有时甚…

贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单输出回归预测(Matlab完整程序)

贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单输出回归预测(Matlab完整程序) 目录 贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单输出回归预测(Matlab完整程序)预测结果基本介绍评价指标程序设计参考资料预测结果 基本介绍 贝叶斯优化 | BO-RF贝叶斯优化随机森林多输入单…

面试题

用 C写一个函数&#xff0c;交换两个整型变量 int a 5, b 10; cout << "Before swapping: a " << a << ", b " << b << endl; swapVars<int>(a, b); cout << "After swapping: a " << a …

半透明反向代理 (基于策略路由)

定义 半透明反向代理一般是指 代理本身对于客户端透明&#xff0c;对于服务端可见。 从客户端视角看&#xff0c;客户端访问的还是服务端&#xff0c;客户端不知道代理的存在。 从服务端视角看&#xff0c;服务端只能看到代理&#xff0c;看不到真实的客户端。 示意图 客户端…

【C语言】switch语句的理解

文章目录一. 基本语法结构二. 几点补充补充一&#xff1a;关于 default 分支补充二&#xff1a;多条匹配执行同一语句补充三&#xff1a;在 case 语句中定义变量的问题三. 几点建议建议一&#xff1a;按执行频率排列 case 语句细节二&#xff1a;简化每种情况对应的操作细节三&…

Node【四】内置模块 【fs模块】

文章目录&#x1f31f;前言&#x1f31f;fs模块&#x1f31f; 使用fs模块&#x1f31f; 异步编程和同步编程&#x1f31f; 异步编程&#x1f31f; 同步编程&#x1f31f;常用操作&#x1f31f; 文件操作&#x1f31f; readFile异步读取文件&#x1f31f; readFileSync同步读取文…

[数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化。GeoPandas是一个Python开源项目&#xff0c;旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型&#xff0c;并使用matplotlib进行绘图。GeoPandas官方仓库地址为&#xff1a;GeoPandas。G…

HTML5 <iframe> 标签、HTML5 <input> 标签

HTML5 <iframe> 标签 实例 使用HTML5 <iframe>标签来标记一个内联框架&#xff1a; <iframe src"http://www.w3cschool.cn"></iframe>尝试一下 浏览器支持 所有主流浏览器都支持 <iframe> 标签。 标签定义及使用说明 <iframe&g…