使用SVM对手写体数字图片分类

2023-12-23 22:52

本文主要是介绍使用SVM对手写体数字图片分类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.实验目的

  1. 会用Python创建多分类SVM模型;
    2.使用多分类SVM模型对手写体数字图片分类;
    3.会对分类结果进行评价。

2. 设备与环境

Jupyter notebook

3.实验原理

加粗样式

4.实验内容

使用sklearn.svm类对手写体数字图片进行分类
训练数据:digits_training.csv
测试数据:digits_testing.csv
第1列是类别,其他列是特征属性。
先对1类和2类的数据进行计算,得到1类和2类的分割超平面,然后对2类和3类的数据进行计算,以此类推,直到两两类别分别完成计算。
在用模型做预测时,对两两类别之间的分割超平面分别进行匹配,统计有多少次判别将其华分类1类,多少次判别为2类…,判定所属类别次数最多的就是最后预测的类别。

  1. 载入训练数据、分出特征属性和类别,对特征属性标准化,显示读入数据的行数
    xTrain = trainData[:,1:Ntrain]
    yTrain = trainDta[:,0]
    标准化函数
    Def normalizeData(X):
    Return (X – X.mean())/X.max()
    2.训练多分类SVM模型
    Model = svm.SVC(decision_function_shape=’ovo’)
    3.保存训练模型名字为“svm_classifier_modell.m”
    4.载入测试数据,分出特征属性和类别,对特征属性标准化,显示读入是数据的行数
    5.使用模型对测试集进行预测,显示预测错误数据的数目、预测数据的准确率和模型内建正确率

5.实验结果分析

在这里插入图片描述

6.代码

import pandas as pd
from sklearn import svm
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCAprint("载入训练数据,对数据进行标准化处理.....")
# 1. 载入训练数据、分出特征属性和类别,对特征属性标准化,显示读入数据的行数
train_data = pd.read_csv(r'D:\D\Download\360安全浏览器下载\digits_training.csv')N_train = train_data.shape[1]   # 特征数量
x_train = train_data.iloc[:, 1:N_train].values  # 特征属性
y_train = train_data.iloc[:, 0].values  # 类别# # 标准化函数
# def normalize_data(X):
#     return (X - X.mean()) / X.max()# x_train = StandardScaler().fit_transform(x_train)  # 标准化特征属性
# 标准化特征属性
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train)# PCA降维
pca = PCA(n_components=0.85)  # 保留85%的方差
x_train_pca = pca.fit_transform(x_train_scaled)
print("训练数据:", len(train_data), "条")
# 2. 训练多分类SVM模型
print("训练模型...")
model = svm.SVC(decision_function_shape='ovo')
model.fit(x_train_pca, y_train)print("保存模型...")
# 3. 保存训练模型名字为“svm_classifier_model.m”
model_name = "svm_classifier_model.m"
import joblib
joblib.dump(model, model_name)print("加载测试数据,对数据进行标准化处理...")
# 4. 载入测试数据,分出特征属性和类别,对特征属性标准化,显示读入数据的行数
test_data = pd.read_csv(r'D:\D\Download\360安全浏览器下载\digits_testing.csv')N_test = test_data.shape[1] - 1  # 特征数量
x_test = test_data.iloc[:, 1:N_test + 1].values  # 特征属性
y_test = test_data.iloc[:, 0].values  # 类别# x_test = StandardScaler().fit_transform(x_test)  # 标准化特征属性
# 标准化测试数据并进行PCA转换
x_test_scaled = scaler.transform(x_test)
x_test_pca = pca.transform(x_test_scaled)
print("测试数据:", len(test_data), "条")print("加载训练好的模型,进行预测....")
# 5. 使用模型对测试集进行预测,显示预测错误数据的数目、预测数据的准确率和模型内建正确率
loaded_model = joblib.load(model_name)  # 加载模型predictions = loaded_model.predict(x_test_pca)
wrong_predictions = (predictions != y_test).sum()
accuracy = 1 - wrong_predictions / len(y_test)
model_accuracy = loaded_model.score(x_test_pca, y_test)print(f"预测错误数据: {wrong_predictions} 条\n测试数据正确率: {accuracy:.2f}\n模型内建的正确率估计: {model_accuracy:.2f}\n")

这篇关于使用SVM对手写体数字图片分类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529746

相关文章

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J