svm python_Python机器学习之SVM的使用

支持向量分类

如果想更好地理解该算法的工作原理,可以先来研究二维空间线性分类的问题,其决策边界是一条直线,它把决策区域一分为二。我们用一个简单的训练集举个例子,它里面的数据点分属两个类别。训练集共包含11个数据点(观察到的数据),有取值范围均为0~4的两个不同属性。这些数据点的属性值存放在叫作x的NumPy数组中。数据点所属的类别用0或1表示,类别信息存储在数组y中。

把这些数据点绘制成散点图,观察它们在空间上的分布情况,该空间可以被称为决策空间。

6f061d950a7b0208ab7039cf0bcc44d7572cc879.png?token=d8518fc4b712fd4efec2a63906a52618&s=61F2836652B68E6D4E75A4010300E0C3

58ee3d6d55fbb2fbc373fa18265f96a04623dc7e.png?token=e341bba672968230d662641ac90d1948&s=5FAA3C62132B412848DD10DA030080B1

既然定义好了训练集,我们就可以使用SVC算法进行训练了。该算法会创建一条直线(决策边界),把决策区域分成两部分,直线所处位置应该使得训练集中距离直线最近的几个数据点到直线的距离最大化。使用该条件,应该能将数据点分成两部分,每一部分中所有数据点的类别相同。

用训练集训练SVC算法之前,先用svc( )构造函数定义模型,我们使用线性内核。(内核指的是用于模式分析的一类算法。)然后调用fit( )函数,传入训练集作为参数。模型训练完成后,用decision_function( )函数绘制决策边界。绘制散点图时,注意决策空间的两部分使用不同的颜色。

77094b36acaf2edd34a1bda3e405b7ed380193c6.png?token=c96527bed49c687417e2c06daa8c4ff0&s=59F283445AA6B44F16E5DD090300E0C3

cf1b9d16fdfaaf51fb3edd08e54122eaf11f7a45.png?token=8149dddc5db5993c8e39c98868d56f94&s=DFA8306261C7454D98513DDD03001060

由上图可见,两块决策区域各包含一个类别。可以说分类基本是比较成功的,除了有个别紫色的点被分到黄色的区域。

模型一旦训练完成,理解模型是如何进行预测的就很容易了。我们拿图来说,新观察到的数据点该分到哪一部分,取决于数据点在图中的位置。

反之,从偏程序设计的角度来说,predict( )函数将会以数值形式返回数据点所属的类别(0为用紫色表示的类,1为用黄色表示的类)。

f636afc379310a552c28d750de50f5ad8226101b.png?token=3aedc6eea7d52ab0568544217868888f&s=59F283445AA4A44F06E5DD090300E0C1

342ac65c10385343dd51ac6afb06067acb8088fc.png?token=e711c94b3fcb6009e09a418d7c8bb2f5&s=2BC213662FA0AB604E7D7C030300A0C1

正则化是一个与SVC算法相关的概念,用参数C来设置:C值较小,表示计算间隔时,将分界线两侧的大量甚至全部数据点都考虑在内(泛化能力强);C值较大,表示只考虑分界线附近的数据点(泛化能力弱)。若不指定C值,默认它的值为1。你可以通过support_vectors数组获取到参与计算间隔的数据点,为其添加高亮效果。

00e93901213fb80eb66bc6655fc4992ab83894e0.png?token=7c0cbb19b41878f5e4dee57dc8be4a7e&s=59F28344DAA6B44F4E75540D0300E0C1

0824ab18972bd407ef920ef8129c28550fb3097c.png?token=8e1bf0dd125474f2655e62632c545fbe&s=3EA87023E1D7E5CC98713DDD03008060

为了理解参数C对决策边界的影响,我们可以给C赋一个很小的值,比如0.1。我们来看一下计算的结果。

359b033b5bb5c9ea55efceb1bc2c00043af3b35a.png?token=1cd099aa5f7ecaa776c243e6f976af5c&s=D9F283445AA4B54F4EF5DC090300A0C1

bd3eb13533fa828b9326fdee8d0af730970a5a4b.png?token=d0ba5fd52f645fee234f185bda4be946&s=1FAA70226187454D9A713DDD0300C060

我们可以看到边界的界限明显有很大区别了,所使用的数据点增加了不少,分界线(决策边界)的位置也随着改变。但是现在有两个数据点处于错误的决策区域。

非线性SVC

至此,我们已经见识过了SVC线性算法,它旨在定义一条把数据分为两类的分界线。还有一些更为复杂的SVC算法,它们能够建立曲线(2D)或曲面(3D),所依据的原则依然是最大化离表面最近的数据点之间的距离。下面我们将会接触一个使用多项式内核的系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值