支持向量机SVM Iris数据集 分类预测
目录
支持向量机对iris数据集进行分类预测
1. 基础概念
2. 实验步骤与分析
2.1 数据理解
2.2 数据读入
2.3 训练集和测试集划分
2.4 支持向量机
2.5 预测
2.6 分析
2.7 调整参数,提高预测准确率
3. 总结
支持向量机对iris数据集进行分类预测
1. 基础概念
SVM的主要思想是:建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。SVM也是结构风险最小化方法的近似实现。
2. 实验步骤与分析
序号 |
任务名称 |
任务具体要求 |
1 |
数据理解 |
理解数据集背景以及数据含义。 |
2 |
数据读入 |
可使用sklearn中自带的iris数据集:datasets.load_iris() |
3 |
训练集和测试集划分 |
随机抽取总数据集70%作为训练集,测试集占30% |
4 |
支持向量机 |
构建SVM模型,并进行训练 |
5 |
预测 |
对测试集进行分类预测,输出预测值及准确率 |
6 |
分析 |
调整参数,对比分析实验结果,体现在实验报告中 |
2.1 数据理解
由Fisher在1936年整理,包含4个特征(Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)、Petal.Width(花瓣宽度)),特征值都为正浮点数,单位为厘米。目标值为鸢尾花的分类(Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),Iris Virginica(维吉尼亚鸢尾))。
2.2 数据读入
from sklearn import datasets
iris = datasets.load_iris() #加载数据集
2.3 训练集和测试集划分
from sklearn.model_selection import train_test_split
X = iris.data[:,:2]
y = iris.target #标签
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)
2.4 支持向量机
lin_svc = svm.SVC(kernel='linear').fit(X_train,y_train) # 核函数kernel为线性核函数
rbf_svc = svm.SVC(kernel='rbf').fit(X_train,y_train) # kernel为径向基核函数
poly_svc = svm.SVC(kernel='poly',degree=3).fit(X_train,y_train) #kernel为多项式核函数
图1. SVM常用核函数
2.5 预测
lin_svc_pre = lin_svc.predict(X_test) # linear核函数的svm进行预测
rbf_svc_pre = rbf_svc.predict(X_test) # 径向基rbf核函数 预测
poly_svc_pre = poly_svc.predict(X_test) #多项式核函数 预测
2.6 分析
# score函数,根据给定数据与标签返回正确率的均值
acc_lin_svc = lin_svc.score(X_test,y_test)
acc_rbf_svc = rbf_svc.score(X_test,y_test)
acc_poly_svc = poly_svc.score(X_test,y_test)
图2. 花萼的长宽和目标的关系图
图2. 花萼的长宽和目标,在 #sepal 和 target 的关系 代码块中画出。
图3. 准确率acc_lin/rbf/poly_svc和三种不同kernel的预测值
图3. 准确率acc_lin_svc = 0.8 #表示以kernel为线性函数时,准确率为0.8
acc_lin_predicted: #表示预测值
其余类似.
图4. 三种核函数对应的SVM分类结果图
图4,将分类结果可视化,不过这是超平面分类后投影的结果。分类边界参考图2.目标关系图,便可以了解分类的情况。可以发现在训练数据集X = iris.data[:,:2]时,使用svm的不同核函数预测准确性都不高。
2.7 调整参数,提高预测准确率
调整训练和测试数据集的大小,只需要在训练集和测试集那里进行调整
使用径向基函数rbf作为核函数来进行对比,
svm.SVC(C=1.0, kernel = 'rbf', gamma = 'auto')
#output
#X = iris.data[:,:4]
#SVM模型准确率: 0.9777777777777777
#X = iris.data[:,:3]
#SVM模型准确率: 0.9555555555555556
#X = iris.data[:,:2]
#SVM模型准确率: 0.8
很明显,数据集的增大提供了更精准的预测。
3. 总结
这里列出的都是简单库函数,也就是调包就可以完成的,但是真正要理解还是得从数学原理推导,详见《统计学习方法》。有时间我也会把推导好的编辑好发出来,现在是初学入门阶段,自己写一些实验有一些感性的认识,不过也不能缺少理性的认识,就是从数学原理上的推导。
完整代码:
from sklearn import datasets
from sklearn import svm
from sklearn.model_selection import train_test_split
import numpy as np#一、iris数据获取
iris = datasets.load_iris() #加载数据集
print(type(iris),dir(iris)) #打印数据集属性y = iris.target
#可视化
#sepal 和 target 的关系
X = iris.data[:,:2] #取所有行的前两位元素
plt.scatter(X[y==0,0],X[y==0,1],color = 'r',marker='o') #X中y==0的,索引为0的元素(共50个) ,即第一个元素为横坐标,索引为1的为
plt.scatter(X[y==1,0],X[y==1,1],color = 'b',marker='*')
plt.scatter(X[y==2,0],X[y==2,1],color = 'g',marker='+')
plt.title('the relationship between sepal and target classes')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.show()#二、数据预处理
#pass#三、模型的训练
X = iris.data[:,:2]
y = iris.target #标签
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)
lin_svc = svm.SVC(decision_function_shape='ovo', kernel = 'rbf', gamma = 'auto') #ovo,one versus one 一对一的分类器,这时对K个类别需要构建K * (K - 1) / 2个分类器
lin_svc.fit(X_train,y_train) #ovr:one versus rest,一对其他,这时对K个类别只需要构建K个分类器。
rbf_svc = svm.SVC(decision_function_shape='ovo',kernel='linear')
rbf_svc.fit(X_train, y_train)
poly_svc = svm.SVC(decision_function_shape = 'ovo', kernel = 'poly',degree = 3)
poly_svc.fit(X_train, y_train)#四、模型的评估#分类结果可视化#可视化分类结果
# the step of the grid
h = .02
# to create the grid , so that we can plot the images on it
x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))# the title of the graph
titles = ['LinearSVC (linear kernel)','SVC with RBF kernel','SVC with polynomial (degree 3) kernel']for i, clf in enumerate((lin_svc, rbf_svc, poly_svc)):# to plot the edge of different classes# to create a 2*2 grid , and set the i image as current imageplt.subplot(2, 2, i + 1) # set the margin between different sub-plotplt.subplots_adjust(wspace=0.4, hspace=0.4)# SVM input :xx and yy output: an arrayZ = clf.predict(np.c_[xx.ravel(), yy.ravel()]) # to plot the resultZ = Z.reshape(xx.shape) #(220, 280)plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)plt.xlabel('Sepal length')plt.ylabel('Sepal width')plt.xlim(xx.min(), xx.max())plt.ylim(yy.min(), yy.max())plt.xticks(())plt.yticks(())plt.title(titles[i])plt.show()acc_lin_svc = lin_svc.score(X_test,y_test) #根据给定数据与标签返回正确率的均值
acc_rbf_svc = rbf_svc.score(X_test,y_test)
acc_poly_svc = poly_svc.score(X_test,y_test)
lin_svc_pre = lin_svc.predict(X_test)
rbf_svc_pre = rbf_svc.predict(X_test)
poly_svc_pre = poly_svc.predict(X_test)
print('acc_lin_svc: ',acc_lin_svc)
print('acc_lin_predicted: ',lin_svc_pre)
print('acc_rbf_svc: ',acc_rbf_svc)
print('acc_rbf_predicted: ',rbf_svc_pre)
print('acc_poly_svc: ',acc_poly_svc)
print('acc_poly_predicted: ',poly_svc_pre)
#五、模型的优化
#pass#六、模型持久化
#pass
支持向量机SVM Iris数据集 分类预测相关推荐
- 支持向量机鸢尾花Iris数据集的SVM线性分类练习
支持向量机&鸢尾花Iris数据集的SVM线性分类练习 摘要 一.SVM基础 1.三种支持向量机 2.非线性支持向量机 二.鸢尾花实例 1.认识鸢尾花 2.鸢尾花实例演示 3.使用多项式特征和核 ...
- 支持向量机实现鸢尾花数据集分类matlab
问题描述: 在进行感知机,以及逻辑斯蒂回归问题的讨论中,我们都以二分类问题为例.其中对于线性不可分的数据集,感知机和逻辑斯蒂回归已然失效,逻辑斯蒂回归对感知机进行的优化,是进行了一种思维上的" ...
- tensorflow2.0莺尾花iris数据集分类|超详细
tensorflow2.0莺尾花iris数据集分类 超详细 直接上代码 #导入模块 import tensorflow as tf #导入tensorflow模块from sklearn import ...
- 【机器学习】决策树案例二:利用决策树进行鸢尾花数据集分类预测
利用决策树进行鸢尾花数据集分类预测 2 利用决策树进行鸢尾花数据集分类预测 2.1 导入模块与加载数据 2.2 划分数据 2.3 模型创建与应用 2.4 模型可视化 手动反爬虫,禁止转载: 原博地址 ...
- 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用
1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...
- tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...
iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This f ...
- 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)
不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...
- iris数据集 分类
1.向量机 from sklearn import svm#svm函数需要的 import numpy as np#numpy科学计算库 from sklearn import model_selec ...
- 【机器学习--朴素贝叶斯与SVM进行病情分类预测】
贝叶斯定理由英国数学家托马斯.贝叶斯(Thomas Baves)在1763提出,因此得名贝叶斯定理.贝叶斯定理也称贝叶斯推理,是关于随机事件的条件概率的一则定理. 对于两个事件A和B,事件A发生则B也 ...
最新文章
- 使用Android Studio build tensorflow/examples/android——直接用android studio即可
- NFS网络文件系统服务
- arthas命令整理:基础命令、jvm相关、class相关命令
- shell脚本实现无密码交互的SSH自动登陆
- 当maven引用的jar在maven库中下载不到源代码
- 当退出python时是否释放全部内存_python如何释放内存
- Python单元测试介绍及单元测试理解,单元测试的自动生成(对函数进行测试)
- 第一章:Python的基本数据类型-第三节:Python中表示“无序”的数据类型
- 弹性文件服务解密 -- 块存储、文件存储、对象存储的区别
- 华为鸿蒙将比安卓快,任正非透露华为鸿蒙系统:将比安卓速度快60%
- 吴恩达 Drive.ai 因经营困难“卖身”苹果
- git 命令 —— checkout 与分支管理
- rk3399_android7.1调试串口uart功能和测试是否能通讯
- ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏...
- windows下使用linux terminal
- 入门级详细USB移植教程——致正在为USB烦恼的朋友
- 一文了解啤酒、葡萄酒、黄酒的种类
- 最重要的100個英文字首字根 -- 字根 (3)
- 大数据风控必看,挖掘学历数据中暗藏的还款意愿及还款能力
- php订阅号网页登录,微信订阅号怎么使用网页授权登录