Python 深入浅出支持向量机(SVM)算法

2020-03-07 投稿人 : www.neuun.cn 围观 : 1272 次

与逻辑回归相比,在许多情况下,SVM算法可以计算数据以产生更好的精度。然而,传统的SVM只能应用于二进制分类操作,但是它可以通过核技术(核函数)应用于多分类任务。

本文仅介绍SVM原理和核心技术。最后,它将介绍sklearn svm的每个参数的功能和一个演示实战的内容,尽可能容易理解。至于公式的推导,网上的文章太多了,所以没什么可做的。引入SVM

支持向量机,它可以找到最明显的超平面,在N维平面上对数据进行分类!请看下面的图片:

在上面的图片中,在二维平面上有红色和蓝色的点。要对这两种类型的点进行分类,有许多分类方法,就像图中的绿线一样,可以将数据分为两部分。

但是SVM所做的是找到最好的线(二维空间),或者超平面(高维空间),来对数据进行分类。最佳标准是最大间距。

至于如何找到这个最大间距,以及如何找到这个最大间距,让我们简单地说,从两类数据到超平面的距离之和称为间隔。我们要做的就是找到最大间隔。

这最终会成为一个优化问题,使时间间隔最大化。

2。SVM的核技巧主要用于解决线性SVM不能进行多分类和SVM在某些线性不可分条件下不能分类的问题。

例如,下列数据:

此时您可以使用内核函数来转换数据。例如,在这里,我们手动定义一个新点,然后计算所有数据到这个新点的欧几里德距离,这样我们就可以得到一个新数据。其中,接近这个新点的数据被归入一类,否则就是另一类。这是内核函数。

这是最肤浅、最直观的介绍。通过以上介绍,它有点类似于乙状结肠吗?所有的数据都用一个函数进行转换,得到最终的结果。实际上,Sigmoid是一个时钟核函数,上述方法是高斯核函数。

这里还有几点:

1。上图中只有一个点,实际上可以有无限多个点,这就是为什么SVM可以将数据映射到多维空间。计算一个点的距离是1维,2个点是2维,3个点是3维,等等。

2。上例中的红点是直接手动指定的,这在实际情况下是不可能的。它通常是随机生成的,然后慢慢测试最佳点。

3。上面的例子属于高斯核函数,而常见的核函数包括多项式核函数、Sigmoid核函数等。

好,以上是内核技术(内核函数)的初步介绍。更先进的不会在这里发展。网上已经有很多教程了。

接下来我们将继续介绍SVM在sklearn中的应用。

3。sklearn

3.sklearn-SVM参数中的SVM参数,内核特征选择

内核:内核函数选择,字符串类型,可选“线性”,“多边形”,“径向基函数”,“sigmoid”,“计算的”和自定义内核函数,默认选择为“径向基函数”。每个核函数介绍如下:

“线性”:线性核函数,最基本的核函数,计算速度快,但它不能将数据从低维进化到高维

poly:多项式核函数,它使原本线性不可分的数据线性可分

径向基函数:高斯核函数,它可以映射到无限维。缺点是计算量相对较大“西格蒙德”:西格蒙德核函数,是的,它是逻辑回归中的西格蒙德函数。如果使用sigmoid,它实际上类似于使用逐层神经网络

“预计算”:提供计算的核函数矩阵,sklearn将不再计算。这不应该是常用的“定制核函数”:sklearn将使用提供的核函数来计算,然后给出一个不太严格的推荐

样本多,特征多,二分法,线性核函数

样本多,特征多,多类,多项式核函数

样本少,特征多,二分法/多类,高斯核函数

样本少,特征少,二分法/多类,高斯核函数

当然,在正常情况下,交叉验证通常用于选择功能。以上只是一个相对肤浅的建议。

sklearn-SVM参数,多分类方案

事实上,这已经在逻辑回归中提到过了,所以让我们在这里讨论更多。

最初的SVM基于两种分类,但有些要求肯定需要多种分类。那么SVM有没有办法实现多分类呢?一定有一些,不止一个。

事实上,二元分类可以很容易地扩展到多元逻辑回归。例如,我们总是认为某个类型是正的,其余的是零。

例如,如果你想分类为甲、乙、丙三类,那么你可以把甲当作正数据,把乙和丙当作负数据,这样你就可以用两种分类的方法来解决多重分类的问题,这是最常用的一对多,简称OvR。此外,这种方法可以很容易地扩展到其他二进制分类模型(当然,其他算法可能有更好的多分类方法)。

另一个多分类方案是多对多(MvM),它为两个分类选择一个类别的样本和另一个类别的样本。

这听起来不可思议,但这是可以做到的。例如,有三类数据:A、B和C。我们训练了一个子模型,其中A和B是正数据,C是负数据。然后以A和C为正数据,B为负数据,训练分类模型。最后,使用B和C作为正数据,C作为负数据来训练模型。

通过这三个模型可以实现多分类。当然,这里只是一个例子。实际使用中还有其他更好的MVM方法。受到空间的限制,它不会在这里扩展。最常见的

MVM是一对一(OvO)。OvO是MvM的一个特例。也就是说,一次选择两种样本进行二元逻辑回归。

与两种多分类方法相比,Ovr通常更简单、更快速,但模型的精度不如MvM。另一方面,MvM有很高的精度,但在速度上无法与Ovr相比。

我们仍然使用iris数据集,但是这次只有两个用于分类。首先准备数据:

我们仍然使用iris数据集,但是这次只有两个用于分类。首先准备数据:

然后用数据训练并生成最终图形

最终SVM分类结果如下:

同上~