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

没有我分不开的东西——可以进行超平面分割的“支持向量机”

今天我会介绍一个机器学习中很重要的算法——支持向量机(Support Vector Machine,SVM)。

SVM

那么到底什么是支持向量机?我来画一个图你就明白了:

如上图,SVM的目的,就是找到一条分割线,使得分割开的两部分数据之间的距离达到最大,也就是图中的k值达到最大。

其中,正好落在边界上的点我们称之为支持向量,这也就是SVM名字的由来。

SVM一般包括SVC和SVR,前者用于分类,后者用于回归,这里我们主要介绍分类的应用。

实战

首先,加载SVC模型

使用我们的乳腺癌数据集

然后用该数据集训练模型

最后分别看下SVC在训练集和测试集上的精度

可以看出,SVC在训练集上的精度达到了完美的100%,而在测试集上却只有59%,说明模型的泛化能力很差,存在严重的过拟合现象。

那么为什么会出现这种情况呢?

原因就在于SVC对于数据的尺度是很敏感的,也就是说,要求我们所有的特征都在同样的范围内波动才可能会有好的效果。

这就需要我们对数据进行预处理,这里进行0-1缩放,也就是把所有的数据都缩放到0和1之间。

0-1缩放

具体的操作步骤如下:

1.计算出每个特征的最小值

2.计算每个特征值的范围,用最大值减去最小值

3.将数据减去最小值,再除以范围,就得到0-1之间的数字

4.对测试集也进行相同的变换,使用训练集的最小值和范围

到此为止,我们的数据预处理就完成了。

然后,我们用缩放后的数据重新进行模型的训练

再来看看SVC在训练集和测试集上的精度

可以看出,进行数据缩放后,SVC的泛化能力从59.4%提升到了93.7%,得到了极大的提升,说明数据预处理的重要性。

模型的重要参数

1.gamma

该参数控制高斯核的宽度,gamma越大,核半径越小,生成的模型越复杂

2.C

C参数是正则化参数,它控制每个点的重要性程度。C值越大,模型越复杂

模型的优缺点

SVM可以处理特征数特别多的数据,也可以处理特征很少的数据,可以说适用于各种类型的数据集。

但由于它极其依赖于数据的预处理,因此当数据量过大时,可能在运行速度方面会受到限制。

另一方面,SVM也需要进行复杂的调参,可能还具有一定的黑盒性质。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券