这首歌是 CCNU 2018年毕业歌曲,挺好听。
毕业了,不忘初心,往后的日子倍加努力!
理论SVM 的套路超平面Code参数调整
机器学习涉及到预测和分类数据,为此我们根据数据集采用不同的机器学习算法。
是分类和回归问题的线性模型。它可以解决线性和非线性问题,并且适用于许多实际问题。
SVM的思想很简单:
该算法创建一个将数据分类的行或超平面。
本文将讨论SVM背后的理论,它是非线性可分数据集的应用,也是Python中SVM实现的一个快速示例。
理论
可以这么说,。SVM算法主要是将数据作为输入并在可能的情况下输出分隔这些类的line。
让我们从一个问题开始。假设你有一个数据集,如下所示,你需要从蓝色椭圆中分类出红色的矩形。所以你的任务是找到一个理想的线,将这个数据集分为两类(也就是红色一类,蓝色一类)。
这其实不难,对吧。但是,仔细想想看,我们可以找到无数条线将这两类分开,那么SVM是怎么找到最理想的那条线(或超平面)?
上图我们存在2条这样的线,那哪一条才是最优的呢?答案很明显,就是黄色的那条线。
虽然红色的那条线也将数据分割好了,但在机器学习中,我们的目标是
SVM 的套路
根据SVM算法,我们从两个类中找到最接近线的点,这些点称为支持向量。现在我们计算线和支持向量之间的距离,这个距离被称为。
我们的目标是最大化margin,在这种情况下的超平面是最优超平面
因此,支持向量机试图以这样一种方式制定决策边界,即两个类(在上图好像两条街道)之间的距离尽可能宽。
接下来考虑下线性不可分的数据集:
这些数据显然不是线性可分的。我们不能画出一条可以对这些数据进行分类的直线。但是,这些数据可以转换为更高维度的线性可分数据。让我们再添加一个维度并称之为z轴。让z轴上的坐标受制于下面的约束条件:
z = x²+y²
所以,z坐标基本上是从原点开始的距离的平方。在z轴上绘制数据:
现在的数据显然是线性可分的。设紫色线将高维数据分隔为z = k,其中k为常数。由于z = x 2 + y 2,我们得到x 2 + y 2 = k;这是个圆的方程。因此,我们可以使用此转换将此线性分割以较高的维度投影回原始尺寸。
我们可以通过向其添加额外的维度来对数据进行分类,以便它可以线性分离,然后使用数学变换将决策边界投影回原始维度。
超平面
定义:
A hyperplane in an n-dimensional Euclidean space is a flat, n-1 dimensional subset of that space that divides the space into two disconnected parts.
举个栗子说明:
假设一条线是我们的一维欧几里德空间(也就是说数据集位于一条线上)。现在选择一个点,这一点将该线为两部分。这条线为一维,而该点为0维。所以这一个点就是该线的超平面。
对于两维,我们看到分界线是超平面。类似地,对于三个维度,具有二维的平面将三维空间分成两个部分,并因此用作超平面。因此,对于一个n维的空间,我们有一个n-1维的超平面把它分成两部分。
Code
现在我们用上面的数据集来训练我们的SVM模型。对于这个例子使用了一个linear kernel。
预测新数据集的类别:
参数调整
它控制平滑决策边界和正确分类训练点之间的trade off。C值很大意味着你可以正确地获得更多的训练点数。
如上图所示,我们可以为这个数据集绘制一些决策边界。
考虑一个非常简单的直线(绿色)决策边界,但其代价是几个点被错误分类,这些错误分类被称为。
我们也可以做出更扭曲(天蓝色的)的决策边界,但我们可能会让所有的训练点都正确分类。
C值大意味着您将得到更复杂的决策曲线,试图适应所有点。计算出你想要一个平滑的决策边界与一个正确的决策边界是机器学习技巧的一部分。因此在实际操作数据集时,尝试不同的C值,以获得完美平衡的曲线并避免过度拟合。
gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,。支持向量的个数影响训练与预测的速度。
多多关注哈!