支持向量机在 R 语言中的实现和使用

支持向量机在 R 语言中的实现和使用

支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,如今被普遍用于解决多类非线性分类问题和回归问题。继续阅读本文,你将学习到支持向量机如何工做,以及如何利用R语言实现支持向量机。git

支持向量机如何工做?

简单介绍下支持向量机是作什么的:github

假设你的数据点分为两类,支持向量机试图寻找最优的一条线(超平面),使得离这条线最近的点与其余类中的点的距离最大。有些时候,一个类的边界上的点可能越过超平面落在了错误的一边,或者和超平面重合,这种状况下,须要将这些点的权重下降,以减少它们的重要性。dom

这种状况下,“支持向量”就是那些落在分离超平面边缘的数据点造成的线。机器学习

没法肯定分类线(线性超平面)时该怎么办?

此时能够将数据点投影到一个高维空间,在高维空间中它们可能就变得线性可分了。它会将问题做为一个带约束的最优化问题来定义和解决,其目的是为了最大化两个类的边界之间的距离。函数

个人数据点多于两个类时该怎么办?

此时支持向量机仍将问题看作一个二元分类问题,但此次会有多个支持向量机用来两两区分每个类,直到全部的类之间都有区别。学习

工程实例

让咱们看一下如何使用支持向量机实现二元分类器,使用的数据是来自MASS包的cats数据集。在本例中你将尝试使用体重和心脏重量来预测一只猫的性别。咱们拿数据集中20%的数据点,用于测试模型的准确性(在其他的80%的数据上创建模型)。测试

 

线性支持向量机

传递给函数svm()的关键参数是kernel、cost和gamma。Kernel指的是支持向量机的类型,它多是线性SVM、多项式SVM、径向SVM或Sigmoid SVM。Cost是违反约束时的成本函数,gamma是除线性SVM外其他全部SVM都使用的一个参数。还有一个类型参数,用于指定该模型是用于回归、分类仍是异常检测。可是这个参数不须要显式地设置,由于支持向量机会基于响应变量的类别自动检测这个参数,响应变量的类别多是一个因子或一个连续变量。因此对于分类问题,必定要把你的响应变量做为一个因子。优化

径向支持向量机

径向基函数做为一个受欢迎的内核函数,能够经过设置内核参数做为“radial”来使用。当使用一个带有“radial”的内核时,结果中的超平面就不须要是一个线性的了。一般定义一个弯曲的区域来界定类别之间的分隔,这也每每致使相同的训练数据,更高的准确度。spa

寻找最优参数

你可使用tune.svm()函数,来寻找svm()函数的最优参数。code

 

结果证实,当cost为100,gamma为0.001时产生最小的错误率。利用这些参数训练径向支持向量机。

 

 

网格图

一个2-色的网格图,能让结果看起来更清楚,它将图的区域指定为利用SVM分类器获得的结果的类别。在下边的例子中,这样的网格图中有不少数据点,而且经过数据点上的倾斜的方格来标记支持向量上的点。很明显,在这种状况下,有不少越过边界违反约束的点,但在SVM内部它们的权重都被下降了。

相关文章
相关标签/搜索