前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法研习:支持向量机算法基本原理分析

算法研习:支持向量机算法基本原理分析

作者头像
深度学习与Python
发布2019-06-19 20:12:44
5100
发布2019-06-19 20:12:44
举报

支持向量机(SVM)是一种监督学习算法,可用于分类和回归问题。支持向量机是最常用也是大家最熟悉的算法,你可能不懂其算法原理,但你绝对听说过这种算法。今天算法研习第三节就来说说关于向量机的基本思想,具体有以下五个问题。

1、什么是SVM?

2、超平面和支持向量

3、SVM内核

4、特征选择

5、Python调用SVM

什么是SVM

支持向量机(SVM)是一种机器学习算法,可用于许多不同的任务。

SVM的主要目标是找到最佳超平面,以便在不同类的数据点之间进行正确分类。超平面维度等于输入特征的数量减去1(例如,当使用三个特征时,超平面将是二维平面)。

为了分离两类数据点,可以选择许多可能的超平面。我们的目标是找到一个具有最大边距的平面,即两个类的数据点之间的最大距离。最大化边距的目的是最大概率的对未知的数据点进行正确分类。

超平面和支持向量

超平面是决策边界,有助于对数据点进行分类。落在超平面两侧的数据点可归因于不同的类。此外,超平面的尺寸取决于特征的数量。如果输入要素的数量是2,则超平面只是一条线。如果输入要素的数量是3,则超平面变为二维平面。当特征数量超过3时,就超出我们的想象了。

最接近超平面的数据点称为支持向量。支持向量确定超平面的方向和位置,以便最大化分类器边界(以及分类分数)。SVM算法应该使用的支持向量的数量可以根据应用任意选择。

SVM内核

如果我们使用的数据不是线性可分的(因此导致线性SVM分类结果不佳),则可以应用称为Kernel Trick的技术。此方法能够将非线性可分离数据映射到更高维空间,使我们的数据可线性分离。使用这个新的维度空间SVM可以很容易地实现。

SVM中有许多不同类型的内核可用于创建这种更高维度的空间,例如线性,多项式,Sigmoid和径向基函数(RBF)。在Scikit-Learn中,可以通过添加内核参数来指定内核函数svm.SVC,也可以通过gamma参数来指定内核对模型的影响。如果特征数量大于数据集中的样本数量,则建议使用线性内核(否则RBF可能是更好的选择)。

特征选择

在SVM中,我们可以使用.coef_训练模型访问分类器系数 。这些权重表示与超平面正交的正交矢量坐标。他们的方向代表预测的阶级。于是通过将这些系数的大小相互比较来确定特征重要性。因此通过查看SVM系数,可以识别分类中使用的主要特征,并消除不重要的特征(保持较小的方差)。

减少机器学习中的功能数量起着非常重要的作用,尤其是在处理大型数据集时。实际上,这可以:加速训练,避免过度拟合,并最终通过降低数据噪音来获得更好的分类结果。例如下图中显示了在Pima Indians糖尿病数据库中使用SVM识别的主要特征。在绿色中显示对应于负系数的所有特征,而蓝色显示为正系数。

Python调用SVM

使用Scikit-Learn Python库在几行代码中轻松实现基本SVM分类。

代码语言:javascript
复制
from sklearn import svm 
trainedsvm = svm.SVC().fit(X_Train,Y_Train)
predictionsvm = trainedsvm.predict(X_Test)
print(confusion_matrix(Y_Test,predictionsvm))
print(classification_report(Y_Test,predictionsvm))

SVM算法在进行分类时可选择硬边距或软边距:

  • 硬边距:旨在找到最好的超平面而不会容忍任何形式的错误分类。
  • 软边距:我们在SVM中添加了一定程度的容差。通过这种方式,我们允许模型对一些数据点进行错误分类,从而增加模型的泛化性能。

软边距SVM可以通过在Scikit-Learn中的svm.SVC中添加C惩罚系数实现。C越大表示算法在进行错误分类时得到的惩罚越多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习与python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档