机器学习实践:基于支持向量机算法对鸢尾花进行分类(代码片段)

华为云开发者联盟 华为云开发者联盟     2022-10-20     390

关键词:

摘要:List item使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类。

本文分享自华为云社区《支持向量机算法之鸢尾花特征分类【机器学习】》,作者:上进小菜猪。

一.前言

1.1 本文原理

支持向量机(SVM)是一种二元分类模型。它的基本模型是在特征空间中定义最大区间的线性分类器,这使它不同于感知器;支持向量机还包括核技术,这使得它本质上是一个非线性分类器。支持向量机的学习策略是区间最大化,它可以形式化为求解凸二次规划的问题,等价于正则化铰链损失函数的最小化。支持向量机的学习算法是求解凸二次规划的优化算法。Scikit learn(sklearn)是机器学习中常见的第三方模块。它封装了常见的机器学习方法,包括回归、降维、分类、聚类等。

1.2 本文目的

  1. List item使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类;
  2. 使用scikit-learn机器学习包的支持向量机算法,设置SVM对象的参数,包括kernel、gamma和C,分别选择一个特征、两个特征、三个特征,写代码对鸢尾花进行分类;
  3. 使用scikit-learn机器学习包的支持向量机算法,选择特征0和特征2对鸢尾花分类并画图,gamma参数分别设置为1、10、100,运行程序并截图,观察gamma参数对训练分数(score)的影响,请说明如果错误调整gamma参数会产生什么问题?

二.实验过程

2.1 支持向量机算法SVM

实例的特征向量(以2D为例)映射到空间中的一些点,如下图中的实心点和空心点,它们属于两个不同的类别。支持向量机的目的是画一条线来“最好”区分这两类点,这样,如果将来有新的点,这条线也可以很好地进行分类。

2.2List item使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类;

首先引入向量机算法svm模块:

from sklearn import svm

还是老样子,使用load_iris模块,里面有150组鸢尾花特征数据,我们可以拿来进行学习特征分类。
如下代码:

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
print(X.shape, X)
y = iris.target
print(y.shape, y)

下面使用sklearn.svm.SVC()函数。
C-支持向量分类器如下:

svm=svm.SVC(kernel='rbf',C=1,gamma='auto')

使用全部特征对鸢尾花进行分类

svm.fit(X[:,:4],y)

输出训练得分:

print("training score:",svm.score(X[:,:4],y))
print("predict: ",svm.predict([[7,5,2,0.5],[7.5,4,7,2]]))

使用全部特征对鸢尾花进行分类训练得分如下:

2.3 使用scikit-learn机器学习包的支持向量机算法,设置SVM对象的参数,包括kernel、gamma和C,分别选择一个特征、两个特征、三个特征,写代码对鸢尾花进行分类;

2.3.1 使用一个特征对鸢尾花进行分类

上面提过的基础就不再写了。如下代码:

使用一个特征对鸢尾花进行分类,如下代码:

svm=svm.SVC()
svm.fit(X,y)

输出训练得分:

print("training score:",svm.score(X,y))
print("predict: ",svm.predict([[7,5,2,0.5],[7.5,4,7,2]]))

使用一个特征对鸢尾花进行分类训练得分如下:

2.3.2 使用两个特征对鸢尾花进行分类

使用两个特征对鸢尾花进行分类,如下代码:

svm=svm.SVC()
svm.fit(X[:,:1],y)

输出训练得分:

print("training score:",svm.score(X[:,:1],y))
print("predict: ",svm.predict([[7],[7.5]]))

使用两个特征对鸢尾花进行分类训练得分如下:

2.3.3 使用三个特征对鸢尾花进行分类

使用三个特征对鸢尾花进行分类,如下代码:

svm=svm.SVC(kernel='rbf',C=1,gamma='auto')
svm.fit(X[:,1:3],y)

输出训练得分:

print("training score:",svm.score(X[:,1:3],y))
print("predict: ",svm.predict([[7,5],[7.5,4]]))

使用三个特征对鸢尾花进行分类训练得分如下:

2.3.4 可视化三个特征分类结果

使用plt.subplot()函数用于直接指定划分方式和位置进行绘图。

x_min,x_max=X[:,1].min()-1,X[:,1].max()+1
v_min,v_max=X[:,2].min()-1,X[:,2].max()+1
h=(x_max/x_min)/100
xx,vy =np.meshgrid(np.arange(x_min,x_max,h),np.arange(v_min,v_max,h))
plt.subplot(1,1,1)
Z=svm.predict(np.c_[xx.ravel(),vy.ravel()])
Z=Z.reshape(xx.shape)

绘图,输出可视化。如下代码

plt.contourf(xx,vy,Z,cmap=plt.cm.Paired,alpha=0.8)
plt.scatter(X[:, 1], X[:, 2], c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal width')
plt.vlabel('Petal length')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')
plt.show()

可视化三个特征分类结果图:

2.4使用scikit-learn机器学习包的支持向量机算法,选择特征0和特征2对鸢尾花分类并画图,gamma参数分别设置为1、10、100,运行程序并截图,观察gamma参数对训练分数(score)的影响,请说明如果错误调整gamma参数会产生什么问题?

2.4.1当gamma为1时:

讲上文的gamma='auto‘ 里的auto改为1,得如下代码:

svm=svm.SVC(kernel='rbf',C=1,gamma='1')
svm.fit(X[:,1:3],y)

运行上文可视化代码,得如下结果:

2.4.2当gamma为10时:

讲上文的gamma='auto‘ 里的auto改为10,得如下代码:

svm=svm.SVC(kernel='rbf',C=1,gamma='10')
svm.fit(X[:,:3:2],y)

运行上文可视化代码,得如下结果:

2.4.3当gamma为100时:

讲上文的gamma='auto‘ 里的auto改为100,得如下代码:

svm=svm.SVC(kernel='rbf',C=1,gamma='100')
svm.fit(X[:,:3:2],y)

运行上文可视化代码,得如下结果:

2.4.4 结论

参数gamma主要是对低维的样本进行高度度映射,gamma值越大映射的维度越高,训练的结果越好,但是越容易引起过拟合,即泛化能力低。通过上面的图可以看出gamma值越大,分数(score)越高。错误使用gamma值可能会引起过拟合,太低可能训练的结果太差。

点击关注,第一时间了解华为云新鲜技术~

支持向量机算法之鸢尾花特征分类机器学习(代码片段)

一.前言1.1本文原理支持向量机(SVM)是一种二元分类模型。它的基本模型是在特征空间中定义最大区间的线性分类器,这使它不同于感知器;支持向量机还包括核技术,这使得它本质上是一个非线性分类器。支持向量机的学习... 查看详情

02-32线性支持向量9-机(鸢尾花分类)

目录线性支持向量机(鸢尾花分类)一、导入模块二、获取数据三、构建决策边界四、线性可分支持向量机4.1训练模型4.2可视化五、线性支持向量机5.1训练模型(C=0.01)5.2可视化5.3训练模型(C=100)5.4可视化更新、更全的《机器学习》的... 查看详情

机器学习入门之四:机器学习的方法--svm(支持向量机)(转载)

...)    支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法。   支持向量机算法从某种意义上来说是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得... 查看详情

机器学习-支持向量机svm算法

文章目录简介原理硬间隔支持向量对偶问题软间隔核函数SMO算法小结多分类问题回归问题应用示例前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介支... 查看详情

机器学习:基于支持向量机(svm)进行人脸识别预测(代码片段)

机器学习:基于支持向量机(SVM)进行人脸识别预测文章目录机器学习:基于支持向量机(SVM)进行人脸识别预测一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.准备数据2.业务理解3.... 查看详情

机器学习:基于支持向量机(svm)进行人脸识别预测(代码片段)

机器学习:基于支持向量机(SVM)进行人脸识别预测文章目录机器学习:基于支持向量机(SVM)进行人脸识别预测一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.准备数据2.业务理解3.... 查看详情

什么是支持向量机?

什么是支持向量机?支持向量机基本概念SVM算法是一种学习机制,是由Vapnik提出的旨在改善传统神经网络学习方法的理论弱点,最先从最优分参考技术A什么是支持向量机?支持向量机基本概念SVM算法是一种学习机制,是由Vapnik... 查看详情

python机器学习实战(代码片段)

...章目录基于逻辑回归实现乳腺癌预测基于k-近邻算法实现鸢尾花分类基于决策树实现葡萄酒分类基于朴素贝叶斯实现垃圾短信分类基于支持向量机实现葡萄酒分类基于高斯混合模型实现鸢尾花分类基于主成分分析实现鸢尾花数据... 查看详情

机器学习——perceptron实践(代码片段)

一、题目:使用自己写的感知机Perceptron实现对鸢尾花数据的分类。  数据来源:fromsklearn.datasetsimportload_irisdataSet=load_iris()二、注意事项:  1)该数据中一共有三类,而感知机是个二分类器,因此,可以将该数据两两分成三... 查看详情

python机器学习之svm(支持向量机)实例(代码片段)

其实在很早以前写过一期SVM,只不过当时对SVM只是初步的了解,现在重新来看,其实SVM还是有很多值得学习的地方。1.SVM介绍SVM可以理解为:使用了支持向量的算法,支持向量机是一种基于分类边界分界的方法。以... 查看详情

机器学习100天(四十):040线性支持向量机-公式推导

《机器学习100天》完整目录:目录机器学习100天,今天讲的是:线性支持向量机-公式推导!首先来看这样一个问题,在二维平面上需要找到一条直线划分正类和负类。我们找到了A、B、C三条直线。这三条直线都能正确分类所有... 查看详情

机器学习06:支持向量机3(代码片段)

本文来自同步博客。看原博客地址会有更好的体验。前面两篇文章介绍了支持向量机SVM的基本原理,并利用Python实践了分割超平面的求解过程。本篇文章将介绍SVM如何对非线性可分的数据进行分类。基本原理SVM处理线性不可分数... 查看详情

机器学习支持向量机svm(上)

...ctorMachine)指的是支持向量机,是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。Vapnik等人在多年研究统计学习理论基础上对线性分类器提出了另一种设计最佳准则... 查看详情

第八篇:支持向量机(svm)

...用R语言中e1071包中的SVM函数进行分类操作,并以一个关于鸢尾花分类的实例演示具体分类步骤。分析总体流程1.载入并了解数据集;2.对数据集进行训练并生成模型;3.在此模型之上调用测试数据集进行分类测试;4.查看分类结果... 查看详情

机器学习实验五六—支持向量机新闻分类聚类(代码片段)

机器学习实验五—svm新闻分类参考博客:svm新闻分类机器学习实验六-聚类机器学习-聚类参考博客基于划分kmeanshttps://zhuanlan.zhihu.com/p/136498094基于dbscan:参考博主:胡言欢代码:1、导入相关库fromsklearn.clusterimportDBSCANfroms... 查看详情

优化分类基于matlab遗传算法优化支持向量机分类(多输入多分类)含matlab源码qf003期(代码片段)

一、遗传算法优化支持向量机简介1支持向量机分类器支持向量机算法的思想是,对给定的样本集,求一个超平面,将样本集按照的不同分开,同时要求该超平面能够将未见测试集正确地分成两类。2参数选取对分类器模型的影响由于错... 查看详情

优化分类基于matlab遗传算法结合爬山算法优化极限学习机分类含matlab源码1660期(代码片段)

一、遗传算法优化支持向量机简介1支持向量机分类器支持向量机算法的思想是,对给定的样本集,求一个超平面,将样本集按照的不同分开,同时要求该超平面能够将未见测试集正确地分成两类。2参数选取对分类器模型的影响由于错... 查看详情

机器学习算法及代码实现–支持向量机(代码片段)

机器学习算法及代码实现–支持向量机1、支持向量机SVM希望通过N-1维的分隔超平面线性分开N维的数据,距离分隔超平面最近的点被叫做支持向量,我们利用SMO(SVM实现方法之一)最大化支持向量到分隔面的距离,这样当新样... 查看详情