机器学习中的支持向量机(SVM)是一个非常强大的工具,可用于线性和非线性数据集的分类,回归和异常检测。在这篇文章中,我将讨论SVM算法如何执行分类和回归。
在这里,我们拟合了一条直线,它不仅将这两个类分开,而且与最近的点保持最大距离。支持向量就是位于边缘的实例。
需要注意的一件重要事情是SVM对scaling很敏感。因此在应用SVM之前需要进行scaling以获得更好的结果。
![1e5c9599a70519e2601aaa0db3b0efde.png](https://i-blog.csdnimg.cn/blog_migrate/278cf292ef3d8c9b7c67ffc56e14c1e0.jpeg)
硬间隔和软间隔分类
在硬间隔分类中,我们希望每个实例都严格地在正确的一面,最终会导致过度拟合,而且它只适用于线性可分数据。
软间隔分类使间street(两条虚线之间)保持较大,它可以容忍少数异常值,并且不会过度拟合数据。
如何控制street的宽度?
在SVM中, C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,约容易欠拟合。C过大或过小,泛化能力都会变差。
所以我们需要为'c'取一个最佳值。
![d26adea997ddfb28cea283869e11ad28.png](https://i-blog.csdnimg.cn/blog_migrate/fbe128d7547c81f068f7bdeddc1f7992.jpeg)
不同的c值及其对拟合线的影响
拟合线性SVM分类模型
我们可以使用Sklearn的LinearSVC模型来拟合线性模型。我们需要通过使用GridSearchCV来确定我们可以调整的c的值,并且损失函数将是“hinge”。Python代码如下:
![68388214a5feb8f6aad8e4f5bafb4f7a.png](https://i-blog.csdnimg.cn/blog_migrate/6d721b69ae9508d589dfef7c194a3809.jpeg)
我们也可以使用SVC模型,但速度要慢得多。
拟合非线性SVM分类模型
我们可以通过使用多项式特征来拟合非线性模型,这将为数据添加更多特征,然后应用linearSVC模型。但是这种技术的问题在于它可以通过添加更多特征来减慢模型的速度。
SVM在它的SVC模型中为我们提供了一个非常棒的工具,它是通过提供kernel= " poly "来实现的。
![0d334542a66dbf9ce0d49f06fe0b1dc8.png](https://i-blog.csdnimg.cn/blog_migrate/658283e60ef2235431e1fb6da61a8175.jpeg)
另外,我们也可以在相似函数的基础上增加一些特征,这是在SKlearn中使用高斯RBF核来实现的。它的实现类似于“Poly”核。
现在我们将讨论SVM如何拟合回归模型的回归部分。
拟合回归模型
到目前为止,我们都知道SVM算法的通用性使得它也能够拟合回归模型。
在这里,我们尝试拟合street,street上可以包含尽可能多的数据实例,并限制street外的实例(与我们在分类中所做的相反)。street的宽度由超参数epsilon(ε)控制。
![6a00f62171107aaa02c0aa35dce7559f.png](https://i-blog.csdnimg.cn/blog_migrate/27262f98599c195aeac75a0c6d087ea6.jpeg)
在SKLearn中,它由LinearSVR库实现,我们可以使用GridSearch调整epsilon的值。
![fb0df53d3a5afaad7e834694a2c9d888.png](https://i-blog.csdnimg.cn/blog_migrate/ff19eb3f190cf70b25bf3c9a1bdbd241.jpeg)
这就是如何使用SVM进行分类和回归。