900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > iris数据_针对iris数据集 支持向量机不同核函数的比较

iris数据_针对iris数据集 支持向量机不同核函数的比较

时间:2023-08-25 01:57:23

相关推荐

iris数据_针对iris数据集 支持向量机不同核函数的比较

思路为:利用不同的核函数来训练不同的分类器,再通过分类器的预测准确率和运行时间来比较分类器的优劣。

需要用到的库为:numpy,pandas,matplotlib,time,sklearn.svm

实现代码用的:jupyter

需要记住的函数为:

1.pd.Categorical().codes将文本数据转化为易分析的数字。

2.train_test_split(random_state,train_size)

#random_state设置随机次数,train_size设置train集和test集的分割点

3.accuracy_score来比较预测值和实际值的差距,并且返回一个准确率

**下面是关于matplotlib包的一些函数讲解**

plt.figure(figsize=,)自定义画布,相当于画图前的第一步,也是最初始的一步。

plt.subplot(number)将画布分为几个区域,如果是121意味着将画布分为1*2列

并且这一部分占据第一部分

plt.plot(x,y,color=,lw=,label=u'')label是图像所带的标签,可以通过plt.legend(loc='')来指定相应的位置来显示标签。

a.settitle(u'')可以通过对图设置标题

plt.suptitle(u'')可以设置画布的标题,但是任何字符串都需要在引号前面加上u.

plt.xlim()可以来设置x轴的坐标范围,plt,ylim()同样可以来设置y轴的坐标范围

import time import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as plt#SVC向量机from sklearn.svm import SVC#训练测试数据分割from sklearn.model_selection import train_test_split#准确率from sklearn.metrics import accuracy_score#乱码设置## 设置属性防止中文乱码mpl.rcParams['font.sans-serif'] = [u'SimHei']mpl.rcParams['axes.unicode_minus'] = Falsepath="./iris.data"data=pd.read_csv(path,header=None)x,y=data[list(range(4))],data[4]#将y转化为数字标签y=pd.Categorical(y).codes#数据分割,有两个参数,random_state,train_size#random_state随机抽样,train_size设置分割规模x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=88,train_size=0.7)#构建分类器/#kernel是不同的方法svm1 = SVC(C=1, kernel='linear')svm2 = SVC(C=1, kernel='rbf')svm3 = SVC(C=1, kernel='poly')svm4 = SVC(C=1, kernel='sigmoid')#分类器的训练t0=time.time()svm1.fit(x_train,y_train)t1=time.time()svm2.fit(x_train,y_train)t2=time.time()svm3.fit(x_train,y_train)t3=time.time()svm4.fit(x_train,y_train)t4=time.time()#训练完后做什么呢?当然是画图测试准确率svm1_train_score=accuracy_score(y_train,svm1.predict(x_train))svm1_test_score=accuracy_score(y_test,svm1.predict(x_test))svm2_train_score=accuracy_score(y_train,svm2.predict(x_train))svm2_test_score=accuracy_score(y_test,svm2.predict(x_test))svm3_train_score=accuracy_score(y_train,svm3.predict(x_train))svm3_test_score=accuracy_score(y_test,svm3.predict(x_test))svm4_train_score=accuracy_score(y_train,svm4.predict(x_train))svm4_test_score=accuracy_score(y_test,svm4.predict(x_test))#画图#设置X轴,y轴x_tmp=[0,1,2,3]y_train_tmp=[svm1_train_score,svm2_train_score,svm3_train_score,svm4_train_score]y_test_tmp=[svm1_test_score,svm2_test_score,svm3_test_score,svm4_test_score]y_score=[t1-t0,t2-t1,t3-t2,t4-t3]#设置尺寸和颜色plt.figure(facecolor='w',figsize=(12,6))#subplot是用来分割画布,分割成一行两列,用第一列的来画图a=plt.subplot(121)#绘图plt.plot(x_tmp,y_train_tmp,'r-',lw=2,label=u'训练集准确率')plt.plot(x_tmp,y_test_tmp,'g-',lw=2,label=u'测试集准确率')#设置两个图形的解释plt.legend(loc='lower left')#plt.title(u'模型预测准确率', fontsize=13)plt.xticks(x_tmp, [u'linear-SVM', u'rbf-SVM', u'poly-SVM', u'sigmoid-SVM'], rotation=0)#开启网格线plt.grid(b=True)#第二个图,分割成一行两列,第二列来画图b=plt.subplot(122)plt.plot(x_tmp, y_score, 'b-', lw=2, label=u'模型训练时间')#plt.title(u'模型训练耗时', fontsize=13)#给x赋予标签plt.xticks(x_tmp, [u'linear-SVM', u'rbf-SVM', u'poly-SVM', u'sigmoid-SVM'], rotation=0)plt.legend(loc='lower left')plt.grid(b=True)#大标题suptitleplt.suptitle(u'鸢尾花数据SVM分类器不同内核函数模型比较', fontsize=16)a.set_title(u'预测准确率')b.set_title(u'模型运行时间')plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。