首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习100天-Day1602非线性支持向量机分类

说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。

第五章是对支持向量机SVM的系统介绍,阐述支持向量机的核心概念,怎么使用这个强大的模型,以及它是如何工作的。

这应该是第三次做这方面的内容了,贴出另一个比较全面的SVM进阶博客。

https://blog.csdn.net/v_JULY_v/article/details/7624837

支持向量机(SVM)是个非常强大并且有多种功能的机器学习模型,能够做线性或者非线性的分类,回归,甚至异常值检测。机器学习领域中最为流行的模型之一,是任何学习机器学习的人必备的工具。SVM特别适合应用于复杂但中小规模数据集的分类问题

本章使用数据为Sklearn中iris数据

源代码已经同步在github中

https://github.com/jwc19890114/-02-learning-file-100days

2. 非线性支持向量机分类

尽管线性SVM分类器在许多案例上表现得出乎意料的好,但是很多数据集并不是线性可分的。一种处理非线性数据集方法是增加更多的特征,例如多项式特征(正如你在第4章所做的那样);在某些情况下可以变成线性可分的数据。

下左图是一个只有一个特征x1的简单的数据集,该数据集不是线性可分的。但是如果你增加了第二个特征 x2=(x1)^2,产生的 2D 数据集就能很好的线性可分。

为了实施这个想法,通过Sklearn你可以创建一个流水线(Pipeline)去包含多项式特征(PolynomialFeatures)变换,然后一个StandardScaler和LinearSVC。

使用卫星数据集(moons datasets)测试一下效果。

可以看到,在pipeline里面已经完成了特征缩放和svm模型设置,在后面引入数据训练即可

多项式核

添加多项式特征会有不错的表现,但低次数多项式不能处理复杂数据集,高次数多项式会拖慢处理速率。

SVM中有核技巧,应用后得到的结果与高次数多项式类似。

同样使用卫星数据测试效果

可以使用网格搜索找到最优参数,先进行粗略的网格搜索,然后再最佳值的基础上再进行更细的。

添加相似特征

另一种解决非线性问题的方法是使用相似函数(similarity funtion)计算每个样本与特定地标(landmark)的相似度。例如,前面使用的一维数据集,在x1=-2和x1=1之间增加两个地标(图 5-8 左图)。接下来,我们定义一个相似函数,即高斯径向基函数(Gaussian Radial Basis Function,RBF),设置γ = 0.3。

何选择地标。最简单的方法是在数据集中的每一个样本的位置创建地标。这将产生更多的维度从而增加了转换后数据集是线性可分的可能性。但缺点是,m个样本,n个特征的训练集被转换成了m个实例,m个特征的训练集。这样一来,如果你的训练集非常大,你最终会得到同样大的特征。与前面多项式特征一样,过高的相似特证数会导致过大计算开销,这里使用高斯RBF核来处理。

训练模型

221图为目标模型,其他三张图显示了不同超参数gamma和C训练的模型。

增大γ值使钟型曲线更窄,导致每个样本的影响范围变得更小:即判定边界最终变得更不规则,在单个样本周围环绕。

较小γ值使钟型曲线更宽,样本有更大的影响范围,判定边界最终则更加平滑。

所以γ是可调整的超参数:模型过拟合,减小γ值,欠拟合,增大γ(与超参数C相似)。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190112A0RNUA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券