机器学习实践:基于支持向量机算法对鸢尾花进行分类
本文分享自华为云社区《支持向量机算法之鸢尾花特征分类【机器学习】》,作者:上进小菜猪。
一.前言
1.1 本文原理
支持向量机(SVM)是一种二元分类模型。它的基本模型是在特征空间中定义最大区间的线性分类器,这使它不同于感知器;支持向量机还包括核技术,这使得它本质上是一个非线性分类器。支持向量机的学习策略是区间最大化,它可以形式化为求解凸二次规划的问题,等价于正则化铰链损失函数的最小化。支持向量机的学习算法是求解凸二次规划的优化算法。Scikit learn(sklearn)是机器学习中常见的第三方模块。它封装了常见的机器学习方法,包括回归、降维、分类、聚类等。
1.2 本文目的
List item 使用 scikit-learn 机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类;
使用 scikit-learn 机器学习包的支持向量机算法,设置 SVM 对象的参数,包括 kernel、gamma 和 C,分别选择一个特征、两个特征、三个特征,写代码对鸢尾花进行分类;
使用 scikit-learn 机器学习包的支持向量机算法,选择特征 0 和特征 2 对鸢尾花分类并画图,gamma 参数分别设置为 1、10、100,运行程序并截图,观察 gamma 参数对训练分数(score)的影响,请说明如果错误调整 gamma 参数会产生什么问题?
二.实验过程
2.1 支持向量机算法 SVM
实例的特征向量(以 2D 为例)映射到空间中的一些点,如下图中的实心点和空心点,它们属于两个不同的类别。支持向量机的目的是画一条线来“最好”区分这两类点,这样,如果将来有新的点,这条线也可以很好地进行分类。

2.2List item 使用 scikit-learn 机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类;
首先引入向量机算法 svm 模块:
还是老样子,使用 load_iris 模块,里面有 150 组鸢尾花特征数据,我们可以拿来进行学习特征分类。
如下代码:
下面使用 sklearn.svm.SVC()函数。
C-支持向量分类器如下:
使用全部特征对鸢尾花进行分类
输出训练得分:
使用全部特征对鸢尾花进行分类训练得分如下:

2.3 使用 scikit-learn 机器学习包的支持向量机算法,设置 SVM 对象的参数,包括 kernel、gamma 和 C,分别选择一个特征、两个特征、三个特征,写代码对鸢尾花进行分类;
2.3.1 使用一个特征对鸢尾花进行分类
上面提过的基础就不再写了。如下代码:

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

2.3.2 使用两个特征对鸢尾花进行分类
使用两个特征对鸢尾花进行分类,如下代码:
输出训练得分:
使用两个特征对鸢尾花进行分类训练得分如下:

2.3.3 使用三个特征对鸢尾花进行分类
使用三个特征对鸢尾花进行分类,如下代码:
输出训练得分:
使用三个特征对鸢尾花进行分类训练得分如下:

2.3.4 可视化三个特征分类结果
使用 plt.subplot()函数用于直接指定划分方式和位置进行绘图。
绘图,输出可视化。如下代码
可视化三个特征分类结果图:

2.4 使用 scikit-learn 机器学习包的支持向量机算法,选择特征 0 和特征 2 对鸢尾花分类并画图,gamma 参数分别设置为 1、10、100,运行程序并截图,观察 gamma 参数对训练分数(score)的影响,请说明如果错误调整 gamma 参数会产生什么问题?
2.4.1 当 gamma 为 1 时:
讲上文的 gamma='auto‘ 里的 auto 改为 1,得如下代码:
运行上文可视化代码,得如下结果:


2.4.2 当 gamma 为 10 时:
讲上文的 gamma='auto‘ 里的 auto 改为 10,得如下代码:
运行上文可视化代码,得如下结果:


2.4.3 当 gamma 为 100 时:
讲上文的 gamma='auto‘ 里的 auto 改为 100,得如下代码:
运行上文可视化代码,得如下结果:


2.4.4 结论
参数 gamma 主要是对低维的样本进行高度度映射,gamma 值越大映射的维度越高,训练的结果越好,但是越容易引起过拟合,即泛化能力低。通过上面的图可以看出 gamma 值越大,分数(score)越高。错误使用 gamma 值可能会引起过拟合,太低可能训练的结果太差。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/d214f01667cea119d30ce542b】。文章转载请联系作者。
评论