目录

支持向量机对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数据集 分类预测相关推荐

  1. 支持向量机鸢尾花Iris数据集的SVM线性分类练习

    支持向量机&鸢尾花Iris数据集的SVM线性分类练习 摘要 一.SVM基础 1.三种支持向量机 2.非线性支持向量机 二.鸢尾花实例 1.认识鸢尾花 2.鸢尾花实例演示 3.使用多项式特征和核 ...

  2. 支持向量机实现鸢尾花数据集分类matlab

    问题描述: 在进行感知机,以及逻辑斯蒂回归问题的讨论中,我们都以二分类问题为例.其中对于线性不可分的数据集,感知机和逻辑斯蒂回归已然失效,逻辑斯蒂回归对感知机进行的优化,是进行了一种思维上的" ...

  3. tensorflow2.0莺尾花iris数据集分类|超详细

    tensorflow2.0莺尾花iris数据集分类 超详细 直接上代码 #导入模块 import tensorflow as tf #导入tensorflow模块from sklearn import ...

  4. 【机器学习】决策树案例二:利用决策树进行鸢尾花数据集分类预测

    利用决策树进行鸢尾花数据集分类预测 2 利用决策树进行鸢尾花数据集分类预测 2.1 导入模块与加载数据 2.2 划分数据 2.3 模型创建与应用 2.4 模型可视化 手动反爬虫,禁止转载: 原博地址 ...

  5. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用

    1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...

  6. tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...

    iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This f ...

  7. 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)

    不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...

  8. iris数据集 分类

    1.向量机 from sklearn import svm#svm函数需要的 import numpy as np#numpy科学计算库 from sklearn import model_selec ...

  9. 【机器学习--朴素贝叶斯与SVM进行病情分类预测】

    贝叶斯定理由英国数学家托马斯.贝叶斯(Thomas Baves)在1763提出,因此得名贝叶斯定理.贝叶斯定理也称贝叶斯推理,是关于随机事件的条件概率的一则定理. 对于两个事件A和B,事件A发生则B也 ...

最新文章

  1. 使用Android Studio build tensorflow/examples/android——直接用android studio即可
  2. NFS网络文件系统服务
  3. arthas命令整理:基础命令、jvm相关、class相关命令
  4. shell脚本实现无密码交互的SSH自动登陆
  5. 当maven引用的jar在maven库中下载不到源代码
  6. 当退出python时是否释放全部内存_python如何释放内存
  7. Python单元测试介绍及单元测试理解,单元测试的自动生成(对函数进行测试)
  8. 第一章:Python的基本数据类型-第三节:Python中表示“无序”的数据类型
  9. 弹性文件服务解密 -- 块存储、文件存储、对象存储的区别
  10. 华为鸿蒙将比安卓快,任正非透露华为鸿蒙系统:将比安卓速度快60%
  11. 吴恩达 Drive.ai 因经营困难“卖身”苹果
  12. git 命令 —— checkout 与分支管理
  13. rk3399_android7.1调试串口uart功能和测试是否能通讯
  14. ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏...
  15. windows下使用linux terminal
  16. 入门级详细USB移植教程——致正在为USB烦恼的朋友
  17. 一文了解啤酒、葡萄酒、黄酒的种类
  18. 最重要的100個英文字首字根 -- 字根 (3)
  19. 大数据风控必看,挖掘学历数据中暗藏的还款意愿及还款能力
  20. php订阅号网页登录,微信订阅号怎么使用网页授权登录

热门文章

  1. python和java哪个好
  2. 安卓百度地图之步行路径规划
  3. JNI - JAVA 数据类型转换
  4. 找到了一个非常好的安卓开发技术栈导航
  5. ThinkPHP5企业新闻管理系统
  6. SPM空间金字塔匹配模型
  7. 谷歌(Chrome)浏览器插件开发教程
  8. 别把“新型啃老”误认为那是你向往的一种躺平生活!
  9. js-实现微信聊天界面
  10. [转载]我们是如何对一个网站进行优化的