iris数据集分析和svm分类预测绘制

1、导入一个iris数据集

from sklearn.datasets import load_iris
iris=load_iris()
print(iris)

iris数据集其实是一个集合
在这里插入图片描述
在这里插入图片描述

2、处理iris数据集

#取集合元素注意加‘’
#iris_data = (iris['data'] + iris['target'])
#iris_target = iris['target']
#矩阵转置
#np.transpose(iris_target)
#iris_target = iris['target'].T
iris_target = iris['target'].reshape(150,1)
#print(iris_target)
#iris_data = (iris['data'] + iris_target)  这样会数组广播
#在矩阵后面添加一行
iris_data = np.c_[iris['data'],iris_target]
print(iris_data)

在这里插入图片描述

在这里插入图片描述

3、将data分为训练集和测试集

#将Iris分为训练集和测试集
#split(数据,分割位置,轴=1(水平分割) or 0(垂直分割))
#分割位置是指分x,y
x,y = np.split(iris_data,(4,),axis=1)
#x = x[:, :2]是为方便后期画图更直观,故只取了前两列特征值向量训练
x = x[:,:2]
#sklearn.model_selection.train_test_split随机划分训练集与测试集
#train_test_split(train_data,train_target,test_size=数字, random_state=0)
#train_data:所要划分的样本特征集
#train_target:所要划分的样本结果
#test_size:样本占比,如果是整数的话就是样本的数量
#random_state:是随机数的种子。
x_train,x_test,y_train,y_test = sklearn.model_selection.train_test_split
		(x,y,random_state=1,train_size=0.6)

4、训练svm分类器

#训练svm分类器
#kernel='linear'时,为线性核,C越大分类效果越好,但有可能会过拟合(defaul C=1)。
#kernel='rbf'时(default),为高斯核,gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。
#decision_function_shape='ovr'时,为one v rest,即一个类别与其他类别进行划分,
#decision_function_shape='ovo'时,为one v one,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果。
clf = svm.SVC(C=0.8,kernel='rbf',gamma=20,decision_function_shape='ovr')
#ravel()将多维数组降位一维
clf.fit(x_train,y_train.ravel())

5、计算svc分类器的准确率

def show_accuracy(y_hat,y_train,str):
    if str=='训练集':
        print("SVM-输出训练集的准确率为:",clf.score(y_hat,y_train))
    elif str=='测试集':
        print("SVM-输出测试集的准确率为:",clf.score(y_hat,y_train))
#计算svc分类器的准确率
#精度
print(clf.score(x_train,y_train))
#y_hat = clf.predict(x_train)
#show_accuracy(y_hat,y_train,'训练集')
print(clf.score(x_test,y_test))
#y_hat = clf.predict(x_test)
#show_accuracy(y_hat,y_test,'测试集')

在这里插入图片描述

print('decision_function:')
print(clf.decision_function(x_train))
print((clf.decision_function(x_train)).shape)

在这里插入图片描述
在这里插入图片描述

print('predict:')
print(clf.predict(x_train))
print((clf.predict(x_train)).shape)

在这里插入图片描述
6、绘制
在这里插入图片描述

#绘制图像
#确定坐标轴范围,x,y轴分别表示两个特征
#第0列的范围
x1_min,x1_max = x[:,0].min(),x[:,0].max()
#第1列的范围
x2_min,x2_max = x[:,1].min(),x[:,1].max()
#生成网格采样点
x1,x2 = np.mgrid[x1_min:x1_max:200j,x2_min:x2_max:200j]
#numpy.stack(arrays, axis=0) 沿着新轴连接数组的序列
grid_test = np.stack((x1.flat,x2.flat),axis=1)
# 预测分类值
grid_hat = clf.predict(grid_test)
# 使之与输入的形状相同
grid_hat = grid_hat.reshape(x1.shape)
#自定义配置文件和绘图风格
#指定默认字体
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
#绘制
cm_light = mpl.colors.ListedColormap(['#A0FFA0','#FFA0A0','#A0A0FF'])
cm_dark = mpl.colors.ListedColormap(['g','r','b'])
#plt.pcolormesh(x, y, y_hat, cmap=cm_light)#此处的xx,yy必须是网格采样点
#plt.pcolormesh()会根据grid_hat的结果自动在cmap里选择颜色,作用在于能够直观表现出分类边界
plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light) # 预测值的显示
#plt.scatter(x[:,0],x[:,1],c=y,edgecolors='k',s=50,cmap=cm_dark)  #样本
# scatter中edgecolors是指描绘点的边缘色彩,s指描绘点的大小,cmap指点的颜色
plt.scatter(x_test[:, 0], x_test[:, 1], s=120, facecolors='none', zorder=10)  # 圈中测试集样本
plt.xlabel(u'花萼长度', fontsize=13)
plt.ylabel(u'花萼宽度', fontsize=13)
plt.xlim(x1_min, x1_max)
plt.ylim(x2_min, x2_max)
plt.title(u'鸢尾花SVM二特征分类', fontsize=15)
# plt.grid()
plt.show()
  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值