基于SVM模式识别系统的设计与实现
1.1题目的主要研究内容
(1)工作的主要描述
本报告设计了基于SVM模式识别系统的设计与实现,本文的运行环境是windows+Pycharm+python3.10。主要采取python中⾃带的数据集:鸢尾花数据集,有三个类别且每个类别具有4个属性,先建⽴三个⼆分类向量机,采⽤train_test_split对数据集进⾏划分,获取训练数据和测试数据,计算准确率。最后再将测试集分别带⼊三个向量机,得出最终分类结果。
(2)系统流程图
⽀持向量机,因其英⽂名为support vector machine,故⼀般简称SVM,通俗来讲,它是⼀种⼆类分类模型,其基本模型定义为特征空间上的间隔最⼤的线性分类器,其学习策略便是间隔最⼤化,最终可转化为⼀个凸⼆次规划问题的求解。最基础的便是⼆分类问题,给定⼀个数据集,含有多个属性,通过这些属性,建⽴超平⾯,使得这些点分为2类,定义标签1与-1,然后对其他的点进⾏预测。本⽂进⾏了⼀些相关的实验,实现svm分类程序对鸢尾花数据集进⾏分类,并分析结果与得出相关的结论。
根据上述原理,本报告设计的分类系统主要有以下流程:
①首先下载鸢尾花数据集,将数据集拆分为训练集和测试集,训练集占比60%,测试集占比40%。
②根据多项逻辑回归模型,编写代码,输入数据集,训练得到相应参数并作出预测
③对预测出的数据的分类结果和原始数据进行可视化展示
具体系统程序工作流程图如下所示:
图1系统工作流程图
1.2题目研究的工作基础或实验条件
软件环境:Pycharm编译器程序语言:python
1.3数据集描述
本次数据集是从sklearn库中导入的load_iris()数据集,数据分四列,分别代表花萼长度、花萼宽度、花瓣长度、花瓣宽度,标签列或者说是target 列有三种花种的类别数据表示分别是:'setosa','versicolor','virginica';在数据集中以0,1,2的形式展示。
鸢尾花数据集(部分数据效果如下)介绍
1.4特征提取过程描述
本次主要是在二分类的基础上实现一个多分类问题,即鸢尾花的分类。使用一对多的方法,训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。有三类要划分(也就是3个Label),记
为0、1、2。于是抽取训练集的时候,分别抽取
(1)0所对应的向量作为正集,1,2所对应的向量作为负集;
(2)1所对应的向量作为正集,0,2所对应的向量作为负集;
(3)2所对应的向量作为正集,0,1所对应的向量作为负集;
使用这三个训练集分别进行训练,然后的得到三个训练结果文件。在测试的时候,把对应的测试向量分别利用这三个训练结果文件进行测试。最后每个测试都有一个结果f1(x),f2(x),f3(x)。最终的结果便是这三个值中最大的一个作为分类结果。
1.5分类过程描述
将鸢尾花的属性以坐标形式表示,建立以下支持向量机模型:
参数C代表的是在线性不可分的情况下,对分类错误的惩罚程度。C值越大,分类器就越不愿意允许分类错误(“离点”)。如果C值太大,分类器就会竭尽全力地在训练数据上少犯错误,造成过拟合实际上这是没有意义的。而C值过小时,分类器就会过于“不在乎”分类错误,于是分类性能就会较差。本次实验使用的是径向核函数。
1.6主要程序代码
from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
python语言可以应用在哪些方面import matplotlib
import sklearn
del_selection import train_test_split
#define converts(字典)
def Iris_label(s):
it={b'Iris-setosa':0,b'Iris-versicolor':1,b'Iris-virginica':2}
return it[s]
#1.读取数据集
path='D:/yuanweihuashujuji/Iris.data'
data=np.loadtxt(path,dtype=float,delimiter=',',converters={4:Iris_label})
#converters={4:Iris_label}中“4”指的是第5列:将第5列的str转化为label(number)
#print(data.shape)
#2.划分数据与标签
系统总体结构图x,y=np.split(data,indices_or_sections=(4,),axis=1)#x为数据,y为标签
x=x[:,0:2]
train_data,test_data,train_label,test_label=train_test_split(x,y,random_state=1,
train_size=0.6,test_size=0.4)#del_selection.
#print(train_data.shape)
#3.训练svm分类器scripture可以组成什么单词
classifier=svm.SVC(C=2,kernel='rbf',gamma=10,decision_function_shape='ovo')#ovr:一对多策略
classifier.fit(train_data,train_label.ravel())#ravel函数在降维时默认是行序优先
#4.计算svc分类器的准确率
娜美源代码领取print("训练集:",classifier.score(train_data,train_label))
print("测试集:",classifier.score(test_data,test_label))
#也可直接调用accuracy_score方法计算准确率
ics import accuracy_score
tra_label=classifier.predict(train_data)#训练集的预测标签
tes_label=classifier.predict(test_data)#测试集的预测标签
print("训练集:",accuracy_score(train_label,tra_label))
print("测试集:",accuracy_score(test_label,tes_label))
#查看决策函数
print('train_decision_function:\n',classifier.decision_function(train_data))#(90,3)
print('predict_result:\n',classifier.predict(train_data))
#5.绘制图形
#确定坐标轴范围
x1_min,x1_max=x[:,0].min(),x[:,0].max()#第0维特征的范围
x2_min,x2_max=x[:,1].min(),x[:,1].max()#第1维特征的范围
如果订单超时未支付x1,id[x1_min:x1_max:200j,x2_min:x2_max:200j]#生成网络采样点
grid_test=np.stack((x1.flat,x2.flat),axis=1)#测试点
#指定默认字体
#设置颜
cm_lors.ListedColormap(['#A0FFA0','#FFA0A0','#A0A0FF'])
cm_lors.ListedColormap(['g','r','b'])
grid_hat=classifier.predict(grid_test)#预测分类值
grid_hat=shape(x1.shape)#使之与输入的形状相同
plt.pcolormesh(x1,x2,grid_hat,cmap=cm_light)#预测值的显示
plt.scatter(x[:,0],x[:,1],c=y[:,0],s=30,cmap=cm_dark)#样本
plt.scatter(test_data[:,0],test_data[:,1],c=test_label[:,0],s=30,edgecolors='k',zorder=2,cmap=cm_da rk)#圈中测试集样本点
plt.xlabel('花萼长度',fontsize=13)
python基础代码大全下载plt.ylabel('花萼宽度',fontsize=13)
plt.xlim(x1_min,x1_max)
plt.ylim(x2_min,x2_max)
plt.title('鸢尾花SVM二特征分类')
plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论