精华内容
下载资源
问答
  • 支持向量机原理

    2013-07-12 20:46:58
    详细介绍了支持向量机原理以及应用.支持向量机广泛用于大量数据的处理,方便简洁
  • 支持向量机原理Abbreviated as SVM, support vector machine learning algorithm is commonly used for classification problems. It gives us a better way to understand a non-linear decision boundary. 支持...

    支持向量机原理

    Abbreviated as SVM, support vector machine learning algorithm is commonly used for classification problems. It gives us a better way to understand a non-linear decision boundary.

    支持向量机学习算法缩写为SVM,通常用于分类问题。 它为我们提供了一种更好的理解非线性决策边界的方法。

    Let’s begin by considering a scenario where one might want to classify the following data —

    让我们首先考虑一种情况,在这种情况下,您可能希望对以下数据进行分类-

    It is quite evident that the data can be separated into their respective classes using a simple linear decision boundary. However, there are multiple such decision boundaries that can be used to separate the two classes. In fact, there are an infinite number of linear decision boundaries that can be drawn to separate the red and the blue class. Consider the following decision boundaries —

    很明显,可以使用简单的线性决策边界将数据分为各自的类别。 但是,可以使用多个这样的决策边界来分隔两个类别。 实际上,可以绘制无限数量的线性决策边界来分离红色和蓝色类别。 考虑以下决策边界-

    Image for post
    Possible decision boundaries that can be used to classify the data.
    可用于对数据进行分类的可能决策边界。
    • The one on the left is too close to the blue class implying “whenever in doubt classify the point to be red”.

      左边的那个离蓝色等级太近了,暗示着“只要有疑问,就将红色等级分类”。
    • The decision boundary in the middle graph is closer to the red class. The decision boundary being close to the red class implies that if a model classifies a point as being red then it is more sure of its decision had it classified the same point as being blue, thereby following “whenever in doubt classify the point as blue”. Also, intuition says we can do better than a perfectly straight decision boundary.

      中间图中的决策边界更接近红色类别。 决策边界接近红色类别意味着,如果模型将一个点归类为红色,则如果将相同的点归类为蓝色,则可以更加确定其决策,因此遵循“只要有疑问,就将该点归类为蓝色”。 。 同样,直觉说我们可以做的比完全正确的决策边界要好。
    • In the last graph, the decision boundary is close to the instances of both the red and the blue classes.

      在最后一张图中,决策边界接近红色和蓝色类的实例。

    From the above discussion, we may conclude that we want a decision boundary that is not too close to either of the two classes. To help us find such a line, SVM is used.

    从上面的讨论中,我们可以得出结论,我们希望决策边界不太接近两个类别中的任何一个。 为了帮助我们找到这样一条线,使用了SVM。

    Support vector machine learning algorithm concentrates on those points of both the classes that are close to each other. The idea being that if a classifier does a good job of classifying challenging points it is likely to perform better on the data. SVM does this by looking up for the closest points from both the classes called the support vectors. Once SVM has found its support vectors it will try to find a line that is at maximal distance from these points. In case of two points the perpendicular bisector is the line that is equidistant and therefore at maximal distance from the two points. Any other line will be closer to one point than the other one.

    支持向量机学习算法集中在两个类的彼此接近的点上。 这样的想法是,如果分类器能够很好地对挑战点进行分类,则可能会在数据上表现更好。 SVM通过从称为支持向量的两个类中查找最接近的点来实现此目的 一旦SVM找到其支持向量,它将尝试找到距这些点最大距离的线。 在两点的情况下,垂直平分线是等距的线,因此与两点的距离最大。 其他任何一条线都将比另一条线更靠近一个点。

    We can also say that given the support vectors and multiple lines we will choose that line as our decision boundary whose distance is as large as possible from all support vectors.

    我们也可以说,在给定支持向量和多条线的情况下,我们将选择该线作为决策边界,该线与所有支持向量的距离应尽可能大。

    Image for post
    Support Vectors and the Hyperplane illustrating the SVM model.
    支持向量和超平面说明了SVM模型。

    So the take away is that SVM tries to find a hyper plane that separates the data into two classes, and while doing so it tries to maximise the distance between the hyper plane and the support vectors of the classes.

    因此,要解决的问题是SVM试图找到将数据分为两个类别的超平面,同时这样做会尝试使超平面与这些类别的支持向量之间的距离最大化。

    A hyper plane in an n-dimensional space is a n-1 dimensional subset of that space. It divides the space into two separate parts. In case of 1-D space a point is a hyper plane, in case of 2-D space a line is a hyper plane and in case of 3-D space a plane is a hyper plane and so on.

    n维空间中的超平面是该空间的n-1维子集。 它将空间分成两个独立的部分。 在1-D空间中, 是一个超平面,在2-D空间中, 线是一个超平面,而在3-D空间中, 平面是一个超平面,依此类推。

    In a practical scenario data is not as simple as to fit a linear decision boundary to it. Take a look at the following data set —

    在实际情况下,数据并不像适合线性决策边界那样简单。 看一下以下数据集-

    Image for post
    Data set with a non linear decision boundary.
    具有非线性决策边界的数据集。

    Using line as a decision boundary is definitely a bad choice for the data set.

    对于数据集,使用直线作为决策边界绝对是一个错误的选择。

    The solution here is to transform our 2 dimensional data to a higher 3 dimensional data so as to make it separable. Let’s add a third dimension z as z=x*y.

    这里的解决方案是将我们的2维数据转换为更高的3维数据,以使其可分离。 让我们添加第三个维度z作为z = x * y。

    The transformation applied here maps a 2 dimensional dataset to a higher 3 dimensional dataset to find an optimal hyper plane. These transformations are called as the SVM’s Kernel Trick. In kernel trick a function is used map data to higher dimension so that the data becomes separable and a decision boundary is found.

    此处应用的转换将2维数据集映射到3维更高数据集,以找到最佳超平面。 这些转换称为SVM的内核技巧。 在内核技巧中,使用一个函数将数据映射到更高的维度,以便数据变得可分离并找到决策边界。

    Image for post
    Transforming the data to a higher plane.
    将数据转换到更高的平面。

    Observe that by applying the kernel all the points of blue class have been confined to the x-y plane and all the points of green class are elevated to the x-y-z space thereby giving us a plane as our optimal hyper plane.

    观察到,通过应用内核,蓝色类的所有点都被限制在xy平面内,绿色类的所有点都被提升到xyz空间,从而为我们提供了一个作为最佳超平面的平面。

    For the sake of simplicity let’s assume z=1 is the optimal decision boundary. However, SVM will output a hyperplane such that it is at maximal distance from the support vectors of either classes.

    为了简单起见,假设z = 1是最佳决策边界。 但是,SVM将输出一个超平面,使其距任一类的支持向量最大距离。

    Image for post
    The hyperplane on transformed data.
    转换数据上的超平面。

    We mapped our 2D data to 3D data by using the transformation z=x*y. Now we will map the decision boundary z=1 from the 3D space to the 2D space. This gives us x*y=1. This is how SVM transforms data and outputs a decision boundary.

    我们使用变换z = x * y将2D数据映射到3D数据。 现在我们将决策边界z = 1从3D空间映射到2D空间。 这给我们x * y = 1。 这就是SVM转换数据并输出决策边界的方式。

    Image for post
    The mapped decision boundary.
    映射的决策边界。

    Linear, Radial Basis Filter, Polynomial, Sigmoid, and Laplace are few common used SVM kernels.

    线性,径向基滤波器,多项式,Sigmoid和Laplace是很少使用的SVM内核。

    A detailed discussion of kernels is outside the scope of the article. However, lets briefly address the two basic parameters of a SVM model —

    关于内核的详细讨论不在本文讨论范围之内。 但是,让我们简要介绍一下SVM模型的两个基本参数-

    正则化 (Regularisation)

    The regularisation parameter addresses the question, how much do you want to avoid misclassifying the training data. A higher value and the misclassification of the training data will be lesser. However, the model may overfit. It is represented by C in sklearn.

    正则化参数解决了这个问题,您要避免对训练数据进行错误分类的数量。 较高的值和训练数据的错误分类将较少。 但是,该模型可能过拟合。 它由sklearn中的C表示。

    Image for post
    Left: Smaller value of C gives a simple generalised boundary. Right: Larger value of C gives a boundary edging towards overfitting.
    左:较小的C值给出了简单的广义边界。 右:C的值越大,越趋于过度拟合。

    伽玛 (Gamma)

    Gamma decides how many examples are to be taken as support vectors. A smaller value means only instances that are closer to the probable hyper plane will be used to further fit it. However, a large value means that the instances which are far from the hyperplane are also used while fitting it.

    Gamma决定将多少个示例用作支持向量。 较小的值意味着将仅使用更接近可能的超平面的实例来进一步拟合该平面。 但是,较大的值意味着在装配超平面时也会使用距离超平面较远的实例。

    Image for post
    Left: Smaller value of Gamma uses less number of instances around decision boundary. Right: Larger value of gamma means more number of instances to be included while fitting the decision boundary.
    左:较小的Gamma值会在决策边界周围使用较少的实例。 右图:伽玛值越大,则在拟合决策边界时将包含更多实例。

    At first glance you might think that SVM is similar to logistic regression however the optimal hyperplane is governed by support vectors in SVM as opposed to all the data points which are taken into consideration in logistic regression. Moreover, logistic regression follows statistical approach and outputs probabilities however SVM is backed up by geometric approach. SVM aims at outputing the optimal hyperplane by maximizing distance between support vectors which reduces the error rate.

    乍一看,您可能会认为SVM与逻辑回归相似,但是最佳超平面是由SVM中的支持向量控制的,而不是逻辑回归中考虑的所有数据点。 此外,逻辑回归遵循统计方法并输出概率,但是SVM受几何方法支持。 SVM旨在通过最大化支持向量之间的距离来输出最佳超平面,从而减少错误率。

    It is advisiable to start with logistic regression and then proceed to SVM with linear kernel. Other kernels such as RBF can be tried out further while keeping the track of selected performance metric.

    建议从逻辑回归开始,然后使用线性核进行SVM。 在跟踪选定的性能指标的同时,还可以尝试其他诸如RBF的内核。

    Here is an example which classifies cancer as either malignant or benign. The example uses SVM with linear kernel and uses accuracy as performance metric. Feel free to try out different kernels and experiment with the hyper parameters of the model.

    这是将癌症分类为恶性或良性的示例。 该示例使用具有线性内核的SVM,并使用精度作为性能指标。 随意尝试不同的内核并使用模型的超参数进行实验。

    SVM has been discussed in detail in the following documentation —

    以下文档已详细讨论了SVM:

    I hope that the article helped you to develop a fair understanding of the intuition behind SVM and related parameters such as Kernel, Regularisation and Gamma.

    我希望本文能帮助您对SVM和相关参数(如内核,正则化和Gamma)的直觉有一个公正的了解。

    翻译自: https://towardsdatascience.com/support-vector-machine-4b2fb9d3e71c

    支持向量机原理

    展开全文
  • 支持向量机原理(一) 线性支持向量机  支持向量机原理(二) 线性支持向量机的软间隔最大化模型  支持向量机原理(三)线性不可分支持向量机与核函数  支持向量机原理(四)SMO算法原理  支持向量机原理(五)线性支持...

    支持向量机原理(一) 线性支持向量机

        支持向量机原理(二) 线性支持向量机的软间隔最大化模型

        支持向量机原理(三)线性不可分支持向量机与核函数

        支持向量机原理(四)SMO算法原理

        支持向量机原理(五)线性支持回归

        支持向量机(Support Vecor Machine,以下简称SVM)虽然诞生只有短短的二十多年,但是自一诞生便由于它良好的分类性能席卷了机器学习领域,并牢牢压制了神经网络领域好多年。如果不考虑集成学习的算法,不考虑特定的训练数据集,在分类算法中的表现SVM说是排第一估计是没有什么异议的。

        SVM是一个二元分类算法,线性分类和非线性分类都支持。经过演进,现在也可以支持多元分类,同时经过扩展,也能应用于回归问题。本系列文章就对SVM的原理做一个总结。本篇的重点是SVM用于线性分类时模型和损失函数优化的一个总结。

    一、回顾感知机模型

        在感知机原理小结中,我们讲到了感知机的分类原理,感知机的模型就是尝试找到一条直线,能够把二元数据隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。对于这个分离的超平面,我们定义为\(w^Tx + b = 0\),如下图。在超平面\(w^Tx + b = 0\)上方的我们定义为\(y=1\),在超平面\(w^Tx + b = 0\)下方的我们定义为\(y=-1\)。可以看出满足这个条件的超平面并不止一个。那么我们可能会尝试思考,这么多的可以分类的超平面,哪个是最好的呢?或者说哪个是泛化能力最强的呢?

     

        接着我们看感知机模型的损失函数优化,它的思想是让所有误分类的点(定义为M)到超平面的距离和最小,即最小化下式:
    \[ \sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b)\big / ||w||_2 \]

        当\(w和b\)成比例的增加,比如,当分子的\(w和b\)扩大N倍时,分母的L2范数也会扩大N倍。也就是说,分子和分母有固定的倍数关系。那么我们可以固定分子或者分母为1,然后求另一个即分子自己或者分母的倒数的最小化作为损失函数,这样可以简化我们的损失函数。在感知机模型中,我们采用的是保留分子,固定分母\(||w||_2 = 1\),即最终感知机模型的损失函数为:
    \[ \sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b) \]

        如果我们不是固定分母,改为固定分子,作为分类模型有没有改进呢?

        这些问题在我们引入SVM后会详细解释。

    二、函数间隔与几何间隔

        在正式介绍SVM的模型和损失函数之前,我们还需要先了解下函数间隔和几何间隔的知识。

        在分离超平面固定为\(w^Tx + b = 0\)的时候,\(|w^Tx + b |\)表示点x到超平面的相对距离。通过观察$w^Tx + b \(和y是否同号,我们判断分类是否正确,这些知识我们在感知机模型里都有讲到。这里我们引入函数间隔的概念,定义函数间隔\)\gamma^{'}$为:
    \[ \gamma^{'} = y(w^Tx + b) \]

        可以看到,它就是感知机模型里面的误分类点到超平面距离的分子。对于训练集中m个样本点对应的m个函数间隔的最小值,就是整个训练集的函数间隔。

        函数间隔并不能正常反应点到超平面的距离,在感知机模型里我们也提到,当分子成比例的增长时,分母也是成倍增长。为了统一度量,我们需要对法向量\(w\)加上约束条件,这样我们就得到了几何间隔\(\gamma\),定义为:
    \[ \gamma = \frac{y(w^Tx + b)}{||w||_2} =  \frac{\gamma^{'}}{||w||_2} \]

        几何间隔才是点到超平面的真正距离,感知机模型里用到的距离就是几何距离。

    三、支持向量

        在感知机模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,我们让它离超平面更远并没有意义。反而我们最关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点尽可能的远离超平面,那么我们的分类效果会好有一些。SVM的思想起源正起于此。

        如下图所示,分离超平面为\(w^Tx + b = 0\),如果所有的样本不光可以被超平面分开,还和超平面保持一定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。可以证明,这样的超平面只有一个。和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,如下图虚线所示。


        

         支持向量到超平面的距离为\(1/||w||_2\),两个支持向量之间的距离为\(2/||w||_2\)

    四、SVM模型目标函数与优化

        SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学式子表示为:
    \[ max \;\; \gamma = \frac{y(w^Tx + b)}{||w||_2}  \;\; s.t \;\; y_i(w^Tx_i + b) = \gamma^{'(i)} \geq \gamma^{'} (i =1,2,...m) \]

        一般我们都取函数间隔\(\gamma^{'}\)为1,这样我们的优化函数定义为:
    \[ max \;\; \frac{1}{||w||_2}  \;\; s.t \;\; y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m) \]

        也就是说,我们要在约束条件\(y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m)\)下,最大化\(\frac{1)}{||w||_2}\)。可以看出,这个感知机的优化方式不同,感知机是固定分母优化分子,而SVM是固定分子优化分母,同时加上了支持向量的限制。

        由于\(\frac{1}{||w||_2}\)的最大化等同于\(\frac{1}{2}||w||_2^2\)的最小化。这样SVM的优化函数等价于:
    \[ min \;\; \frac{1}{2}||w||_2^2  \;\; s.t \;\; y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m) \]

        由于目标函数\(\frac{1}{2}||w||_2^2\)是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,我们可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,这和最大熵模型原理小结中讲到了目标函数的优化方法一样。具体的,优化函数转化为:
    \[ L(w,b,\alpha) = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \; 满足\alpha_i \geq 0 \]

        由于引入了朗格朗日乘子,我们的优化目标变成:
    \[ \underbrace{min}_{w,b}\; \underbrace{max}_{\alpha_i \geq 0} L(w,b,\alpha) \]

        和最大熵模型一样的,我们的这个优化函数满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解。如果对凸优化和拉格朗日对偶不熟悉,建议阅读鲍德的《凸优化》。

        也就是说,现在我们要求的是:
    \[ \underbrace{max}_{\alpha_i \geq 0} \;\underbrace{min}_{w,b}\;  L(w,b,\alpha) \]

        从上式中,我们可以先求优化函数对于\(w和b\)的极小值。接着再求拉格朗日乘子\(\alpha\)的极大值。

        首先我们来求\(L(w,b,\alpha)\)基于\(w和b\)的极小值,即\(\underbrace{min}_{w,b}\;  L(w,b,\alpha)\)。这个极值我们可以通过对\(w和b\)分别求偏导数得到:
    \[ \frac{\partial L}{\partial w} = 0 \;\Rightarrow w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i \]

    \[ \frac{\partial L}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

         从上两式子可以看出,我们已经求得了\(w和\alpha\)的关系,只要我们后面接着能够求出优化函数极大化对应的\(\alpha\),就可以求出我们的\(w\)了,至于b,由于上两式已经没有b,所以最后的b可以有多个。

        好了,既然我们已经求出\(w和\alpha\)的关系,就可以带入优化函数\(L(w,b,\alpha)\)消去\(w\)了。我们定义:
    \[ \psi(\alpha) = \underbrace{min}_{w,b}\;  L(w,b,\alpha) \]

        现在我们来看将\(w\)替换为\(\alpha\)的表达式以后的优化函数\(\psi(\alpha)\)的表达式:

     
    \[ \begin{align} \psi(\alpha) & =  \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \\& = \frac{1}{2}w^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i  \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i  \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i  \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i  - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j  \end{align} \]

        其中,(1)式到(2)式用到了范数的定义\(||w||_2^2 =w^Tw\), (2)式到(3)式用到了上面的\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\), (3)式到(4)式把和样本无关的\(w^T\)提前,(4)式到(5)式合并了同类项,(5)式到(6)式把和样本无关的\(b\)提前,(6)式到(7)式继续用到\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\),(7)式到(8)式用到了向量的转置。由于常量的转置是其本身,所有只有向量\(x_i\)被转置,(8)式到(9)式用到了上面的\(\sum\limits_{i=1}^{m}\alpha_iy_i = 0\),(9)式到(10)式使用了\((a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…\)的乘法运算法则,(10)式到(11)式仅仅是位置的调整。

        从上面可以看出,通过对\(w,b\)极小化以后,我们的优化函数\(\psi(\alpha)\)仅仅只有\(\alpha\)向量做参数。只要我们能够极大化\(\psi(\alpha)\),就可以求出此时对应的\(\alpha\),进而求出\(w,b\).

        对\(\psi(\alpha)\)求极大化的数学表达式如下:
    \[  \underbrace{max}_{\alpha} -\frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) + \sum\limits_{i=1}^{m} \alpha_i \]

    \[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ \alpha_i \geq 0  \; i=1,2,...m \]

        可以去掉负号,即为等价的极小化问题如下:

    \[ \underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) -  \sum\limits_{i=1}^{m} \alpha_i \]

    \[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ \alpha_i \geq 0  \; i=1,2,...m \]

         只要我们可以求出上式极小化时对应的\(\alpha\)向量就可以求出\(w和b\)了。具体怎么极小化上式得到对应的\(\alpha\),一般需要用到SMO算法,这个算法比较复杂,我们后面会专门来讲。在这里,我们假设通过SMO算法,我们得到了对应的\(\alpha\)的值\(\alpha^{*}\)

        那么我们根据\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\),可以求出对应的\(w\)的值
    \[ w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i \]

        求b则稍微麻烦一点。注意到,对于任意支持向量\((x_x, y_s)\),都有
    \[ y_s(w^Tx_s+b) = y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1 \]

        假设我们有S个支持向量,则对应我们求出S个\(b^{*}\),理论上这些\(b^{*}\)都可以作为最终的结果, 但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的\(b_s^{*}\),然后将其平均值作为最后的结果。注意到对于严格线性可分的SVM,\(b\)的值是有唯一解的,也就是这里求出的所有\(b^{*}\)都是一样的,这里我们仍然这么写是为了和后面加入软间隔后的SVM的算法描述一致。

        怎么得到支持向量呢?根据KKT条件中的对偶互补条件\(\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1) = 0\),如果\(\alpha_i>;0\)则有\(y_i(w^Tx_i + b) =1\) 即点在支持向量上,否则如果\(\alpha_i=0\)则有\(y_i(w^Tx_i + b) \geq 1\),即样本在支持向量上或者已经被正确分类。

    五、线性可分SVM的算法过程

        这里我们对线性可分SVM的算法过程做一个总结。

        输入是线性可分的m个样本\({(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}\),其中x为n维特征向量。y为二元输出,值为1,或者-1.

        输出是分离超平面的参数\(w^{*}和b^{*}\)和分类决策函数。

        算法过程如下:

        1)构造约束优化问题
    \[ \underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) -  \sum\limits_{i=1}^{m} \alpha_i \]

    \[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ \alpha_i \geq 0  \; i=1,2,...m \]

        2)用SMO算法求出上式最小时对应的\(\alpha\)向量的值\(\alpha^{*}\)向量.

        3) 计算\(w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i\)

        4) 找出所有的S个支持向量,即满足\(\alpha_s >; 0对应的样本(x_s,y_s)\),通过 \(y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1\),计算出每个支持向量\((x_x, y_s)\)对应的\(b_s^{*}\),计算出这些\(b_s^{*} = y_s - \sum\limits_{i=1}^{s}\alpha_iy_ix_i^Tx_s\). 所有的\(b_s^{*}\)对应的平均值即为最终的\(b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}\)

         这样最终的分类超平面为:$w^{} \bullet x + b^{} = 0 \(,最终的分类决策函数为:\)f(x) = sign(w^{} \bullet x + b^{})$

        

        线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 我们在下一节的线性SVM的软间隔最大化里继续讲。

     

    (欢迎转载,转载请注明出处。欢迎沟通交流: 微信:nickchen121)

    转载于:https://www.cnblogs.com/nickchen121/p/11214876.html

    展开全文
  • 支持向量机原理.pdf

    2020-03-08 21:12:36
    个人总结的支持向量机原理,基本摘自其它图书,主要内容如下: 1.首先介绍了学习支持向量机所需要的准备知识,包括VC维的定义、经验风险最小化原则、结构风险最小化原则; 2.重点讲解了支持向量机的原理,首先深入...
  • 了解非线性支持向量机模型后,应该对支持向量机的原理与核技巧都有掌握,本文在传统非线性支持向量机基础上向大家介绍多核支持向量机,这里就不对支持向量机原理与核函数花费太多笔墨了,主要介绍将单核支持向量机...

    了解非线性支持向量机模型后,应该对支持向量机的原理与核技巧都有掌握,本文在传统非线性支持向量机基础上向大家介绍多核支持向量机,这里就不对支持向量机原理与核函数花费太多笔墨了,主要介绍将单核支持向量机转换为多核支持向量机的思想。原理介绍完之后会提供Python实现的思路。

    1. 核函数

    对于非线性问题,使用直线无法将正负实例分开,但是可以使用非线性模型将其分离。如果使用超曲面可以将正负实例则称这个问题是非线性问题,往往需要一个非线性变换将非线性问题转换为线性问题。可以通过映射函数,将原空间上的点映射到新空间上的点,然后在新空间中使用线性学习方法得到分类模型。通常情况下通过映射函数计算一个核函数不容易,而直接计算核函数是较为容易的方法,《统计学习方法》第一版中例7.3就可以帮助我们理解核函数与映射函数的关系。

    核函数为

    ,两个样本点分别为

    那么

    取映射

    容易验证

    上式中,原来的每个样本点二维表示,包含两个特征,而经过映射函数

    的变换后,由原来的两个特征变为三个特征,样本从二维升为三维。对偶函数的目标函数中内积
    可以用核函数
    。这个就是核函数的基本作用。可以得到支持向量展开式(support vector expansion),如下式所示。

    指核函数,上式显示模型的最优解可以通过训练样本的核函数展开,这里也是多核支持向量机程序实现的基础。

    2. 多核支持向量机

    多核支持向量机在传统支持向量机的基础上,将多个核函数使用线性组合方式进行融合,然后基于该核函数训练一个支持向量机分类器,解决了如下的凸二次优化问题。

    其中

    分别为第m个模态超平面方程
    中的法向量w

    、映射方程和改模态下的核函数融合系数,它的对偶形式如下。

    其中

    是第m个模态中两个训练样本之间的核函数形式。而在训练集中核函数的形式可以写为如下形式。

    其中

    表示测试集的样本,上式表示测试集中新样本和训练集中每一个样本的核函数计算形式。这样就可以得到决策方程为

    实际使用中,先计算各个模态的训练集核矩阵

    ,通过线性组合
    将不同模态的核函数进行融合。再计算各个模态的测试集核矩阵
    ,使用和训练集相同的核矩阵融合系数对核矩阵进行融合,同时要满足融合系数的和为1,即
    。支持向量展开式的结论中,分类器的最优解可以通过核函数展开,因此直接使用训练集得到的核矩阵作为支持向量机输入,即可学习一个多核支持向量机分类模型,对测试集样本进行分类时,直接将测试集核矩阵作为输入,就可以得到它们的分类结果了。关于核函数融合的过程见下图。

    a2d31ba42112952e1a81c184a63fe55a.png

    上图是论文Multimodal classification of Alzheimer's disease and mild cognitive impairment中的多模态核函数融合过程,由MRI、PET和CSF三种模态得到了三个核函数,然后使用线性组合方式将这三个核函数进行融合就得到了融合核矩阵,使用这个矩阵作为输入特征进行训练就可以得到一个多核支持向量机分类模型。

    3. 多核支持向量机的Python实现过程

    3.1 使用scikit-learn库实现多核支持向量机

    对于多核支持向量机当然起码得有两种核函数吧。这里列举较为常用的linear、poly和rbf核函数。这里假定已经得到由各个核函数计算得到的核矩阵kernel_mat,那么进行多核支持持向量机的过程如下。

    for 

    3.2 程序解释

    上面的程序使用网格搜索法,对每一种融合系数组合都进行svm的训练与分类,最后得到每种组合下的分类结果,进而可以使用skleaen.metrics中的函数计算各种分类指标。

    因为融合系数相加为1,所以每种融合系数的范围是0到1的,这里设定搜索参数的个数grid_num,然后使用循环对每种融合系数组合都进行多核SVM训练。

    mat1和mat2可以分别表示训练集和测试集的特征矩阵,维度分别为n×d和m×d。有了特征矩阵后就可以计算核矩阵了,我这里是自己写了calckernel函数直接就可以得到核矩阵,各位可以通过调库或者直接自己写来实现核函数的部分。对于训练集核矩阵,只需要传入训练集特征矩阵即可,测试集核矩阵的计算则同时需要训练集和测试集的特征矩阵。计算完每种模态的核矩阵后通过weight1和weight2对两种模态的核矩阵进行线性融合,得到的训练集核矩阵维度为n×n,测试集核矩阵为m×n。

    使用scikit-learn库训练时,参数设置这里除了SVM一般的超参数外还需要设置核函数的类型,参考https://scikit-learn.org/stable/modules/svm.html#kernel-functions。自定义kernel时有两种方式,一种是自定义核函数方程,单独写一个核函数后,同样使用fit()就能对数据进行学习了。另一种方式是定义Gram矩阵,也就是我们所使用的方法,需要将kernel设置为’precomputed’,然后SVM训练过程在fit()中将参数设置为上述的训练集核矩阵train_kernel和类别标签y_train,分类过程同样是用predict()函数,将参数设置为上述的测试集核矩阵test_kernel和类别标签y_test。Sklearn的官方文档的示例如下:

    >>> import numpy as np
    >>> from sklearn.datasets import make_classification
    >>> from sklearn.model_selection import train_test_split
    >>> from sklearn import svm
    >>> X, y = make_classification(n_samples=10, random_state=0)
    >>> X_train , X_test , y_train, y_test = train_test_split(X, y, random_state=0)
    >>> clf = svm.SVC(kernel='precomputed')
    >>> # linear kernel computation
    >>> gram_train = np.dot(X_train, X_train.T)
    >>> clf.fit(gram_train, y_train)
    SVC(kernel='precomputed')
    >>> # predict on training examples
    >>> gram_test = np.dot(X_test, X_train.T)
    >>> clf.predict(gram_test)
    array([0, 1, 0])

    参考

    [1] https://stats.stackexchange.com/questions/239008/rbf-kernel-algorithm-python

    [2] https://intellipaat.com/community/22796/how-to-use-a-custom-svm-kernel

    [3] https://stackoverflow.com/questions/2474460/precomputed-kernels-with-libsvm-in-python

    [4] https://scikit-learn.org/stable/modules/svm.html#kernel-functions

    [5] Zhang, Daoqiang, et al. "Multimodal classification of Alzheimer's disease and mild cognitive impairment." Neuroimage 55.3 (2011): 856-867.

    [6] 李航. 统计学习方法[M]. 清华大学出版社, 2012.

    [7] 周志华. 机器学习[M]. 清华大学出版社, 2016.

    展开全文
  • 支持向量机原理(一) 线性支持向量机  支持向量机原理(二) 线性支持向量机的软间隔最大化模型  支持向量机原理(三)线性不可分支持向量机与核函数  支持向量机原理(四)SMO算法原理  支持向量机原理(五)线性支持...

    支持向量机原理(一) 线性支持向量机

        支持向量机原理(二) 线性支持向量机的软间隔最大化模型

        支持向量机原理(三)线性不可分支持向量机与核函数

        支持向量机原理(四)SMO算法原理

        支持向量机原理(五)线性支持回归

       在支持向量机原理(一) 线性支持向量机中,我们对线性可分SVM的模型和损失函数优化做了总结。最后我们提到了有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分,本篇就对线性支持向量机如何处理这些异常点的原理方法做一个总结。

    一、线性分类SVM面临的问题

        有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离的,可以由于一个橙色和一个蓝色的异常点导致我们没法按照上一篇线性支持向量机中的方法来分类。

        另外一种情况没有这么糟糕到不可分,但是会严重影响我们模型的泛化预测效果,比如下图,本来如果我们不考虑异常点,SVM的超平面应该是下图中的红色线所示,但是由于有一个蓝色的异常点,导致我们学习到的超平面是下图中的粗虚线所示,这样会严重影响我们的分类模型预测效果。

        如何解决这些问题呢?SVM引入了软间隔最大化的方法来解决。

    二、2. 线性分类SVM的软间隔最大化

        所谓的软间隔,是相对于硬间隔说的,我们可以认为上一篇线性分类SVM的学习方法属于硬间隔最大化。

        回顾下硬间隔最大化的条件:
    \[ min\;\; \frac{1}{2}||w||_2^2  \;\; s.t \;\; y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m) \]

        接着我们再看如何可以软间隔最大化呢?

        SVM对训练集里面的每个样本\((x_i,y_i)\)引入了一个松弛变量\(\xi_i \geq 0\),使函数间隔加上松弛变量大于等于1,也就是说:
    \[ y_i(w\bullet x_i +b) \geq 1- \xi_i \]

        对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量\(\xi_i\), 对应了一个代价\(\xi_i\),这个就得到了我们的软间隔最大化的SVM学习条件如下:
    \[ min\;\; \frac{1}{2}||w||_2^2 +C\sum\limits_{i=1}^{m}\xi_i \]

    \[ s.t.  \;\; y_i(w^Tx_i + b)  \geq 1 - \xi_i \;\;(i =1,2,...m) \]

    \[ \xi_i \geq 0 \;\;(i =1,2,...m) \]

        这里,\(C>;0\)为惩罚参数,可以理解为我们一般回归和分类问题正则化时候的参数。\(C\)越大,对误分类的惩罚越大,\(C\)越小,对误分类的惩罚越小。

        也就是说,我们希望\(\frac{1}{2}||w||_2^2\)尽量小,误分类的点尽可能的少。C是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。

        这个目标函数的优化和上一篇的线性可分SVM的优化方式类似,我们下面就来看看怎么对线性分类SVM的软间隔最大化来进行学习优化。

    三、线性分类SVM的软间隔最大化目标函数的优化

        和线性可分SVM的优化方式类似,我们首先将软间隔最大化的约束问题用拉格朗日函数转化为无约束问题如下:
    \[ L(w,b,\xi,\alpha,\mu) = \frac{1}{2}||w||_2^2 +C\sum\limits_{i=1}^{m}\xi_i - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1 + \xi_i] - \sum\limits_{i=1}^{m}\mu_i\xi_i \]

        其中 \(\mu_i \geq 0, \alpha_i \geq 0\),均为拉格朗日系数。

        也就是说,我们现在要优化的目标函数是:
    \[ \underbrace{min}_{w,b,\xi}\; \underbrace{max}_{\alpha_i \geq 0, \mu_i \geq 0,} L(w,b,\alpha, \xi,\mu) \]

        这个优化目标也满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解如下:
    \[ \underbrace{max}_{\alpha_i \geq 0, \mu_i \geq 0,} \; \underbrace{min}_{w,b,\xi}\; L(w,b,\alpha, \xi,\mu) \]

        我们可以先求优化函数对于$w, b, \xi \(的极小值, 接着再求拉格朗日乘子\)\alpha$和 \(\mu\)的极大值。

        首先我们来求优化函数对于$w, b, \xi $的极小值,这个可以通过求偏导数求得:
    \[ \frac{\partial L}{\partial w} = 0 \;\Rightarrow w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i \]

    \[ \frac{\partial L}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ \frac{\partial L}{\partial \xi} = 0 \;\Rightarrow C- \alpha_i - \mu_i = 0 \]

        好了,我们可以利用上面的三个式子去消除\(w\)\(b\)了。

    \[ \begin{align} L(w,b,\xi,\alpha,\mu) & = \frac{1}{2}||w||_2^2 +C\sum\limits_{i=1}^{m}\xi_i - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1 + \xi_i] - \sum\limits_{i=1}^{m}\mu_i\xi_i  \\&= \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1 + \xi_i] + \sum\limits_{i=1}^{m}\alpha_i\xi_i \\& = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \\& = \frac{1}{2}w^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \end{align} \]

        其中,(1)式到(2)式用到了\(C- \alpha_i - \mu_i = 0\), (2)式到(3)式合并了同类项,(3)式到(4)式用到了范数的定义\(||w||_2^2 =w^Tw\), (4)式到(5)式用到了上面的\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\), (5)式到(6)式把和样本无关的\(w^T\)提前,(6)式到(7)式合并了同类项,(7)式到(8)式把和样本无关的\(b\)提前,(8)式到(9)式继续用到\(w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i\),(9)式到(10)式用到了向量的转置。由于常量的转置是其本身,所有只有向量\(x_i\)被转置,(10)式到(11)式用到了上面的\(\sum\limits_{i=1}^{m}\alpha_iy_i = 0\),(11)式到(12)式使用了\((a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…\)的乘法运算法则,(12)式到(13)式仅仅是位置的调整。

        仔细观察可以发现,这个式子和我们上一篇线性可分SVM的一样。唯一不一样的是约束条件。现在我们看看我们的优化目标的数学形式:
    \[ \underbrace{ max }_{\alpha} \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \]

    \[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ C- \alpha_i - \mu_i = 0 \]

    \[ \alpha_i \geq 0 \;(i =1,2,...,m) \]

    \[ \mu_i \geq 0 \;(i =1,2,...,m) \]

         对于$ C- \alpha_i - \mu_i = 0 , \alpha_i \geq 0 ,\mu_i \geq 0 \(这3个式子,我们可以消去\)\mu_i\(,只留下\)\alpha_i$,也就是说\(0 \leq \alpha_i \leq C\)。 同时将优化目标函数变号,求极小值,如下:
    \[ \underbrace{ min }_{\alpha}  \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j - \sum\limits_{i=1}^{m}\alpha_i \]

    \[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ 0 \leq \alpha_i \leq C \]

        这就是软间隔最大化时的线性可分SVM的优化目标形式,和上一篇的硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件\(0 \leq \alpha_i \leq C\)。我们依然可以通过SMO算法来求上式极小化时对应的\(\alpha\)向量就可以求出\(w和b\)了。

    四、软间隔最大化时的支持向量

        在硬间隔最大化时,支持向量比较简单,就是满足\(y_i(w^Tx_i + b) -1 =0\)就可以了。根据KKT条件中的对偶互补条件\(\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1) = 0\),如果\(\alpha_{i}^{*}>;0\)则有\(y_i(w^Tx_i + b) =1\) 即点在支持向量上,否则如果\(\alpha_{i}^{*}=0\)则有\(y_i(w^Tx_i + b) \geq 1\),即样本在支持向量上或者已经被正确分类。

        在软间隔最大化时,则稍微复杂一些,因为我们对每个样本\((x_i,y_i)\)引入了松弛变量\(\xi_i\)。我们从下图来研究软间隔最大化时支持向量的情况,第i个点到对应类别支持向量的距离为\(\frac{\xi_i}{||w||_2}\)。根据软间隔最大化时KKT条件中的对偶互补条件\(\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1 + \xi_i^{*}) = 0\)我们有:

        a) 如果\(\alpha = 0\),那么\(y_i(w^Tx_i + b) - 1 \geq 0\),即样本在间隔边界上或者已经被正确分类。如图中所有远离间隔边界的点。

        b) 如果\(0 <; \alpha <; C\),那么\(\xi_i = 0 ,\;\; y_i(w^Tx_i + b) - 1 =  0\),即点在间隔边界上。

        c) 如果\(\alpha = C\),说明这是一个可能比较异常的点,需要检查此时\(\xi_i\)

          i)如果\(0 \leq \xi_i \leq 1\),那么点被正确分类,但是却在超平面和自己类别的间隔边界之间。如图中的样本2和4.

          ii)如果\(\xi_i =1\),那么点在分离超平面上,无法被正确分类。

          iii)如果\(\xi_i >; 1\),那么点在超平面的另一侧,也就是说,这个点不能被正常分类。如图中的样本1和3.

         

    五、软间隔最大化的线性可分SVM的算法过程

        这里我们对软间隔最大化时的线性可分SVM的算法过程做一个总结。

        输入是线性可分的m个样本\({(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}\),其中x为n维特征向量。y为二元输出,值为1,或者-1.

        输出是分离超平面的参数\(w^{*}和b^{*}\)和分类决策函数。

        算法过程如下:

        1)选择一个惩罚系数\(C>;0\), 构造约束优化问题
    \[ \underbrace{ min }_{\alpha}  \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j - \sum\limits_{i=1}^{m}\alpha_i \]

    \[ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \]

    \[ 0 \leq \alpha_i \leq C \]

        2)用SMO算法求出上式最小时对应的\(\alpha\)向量的值\(\alpha^{*}\)向量.

        3) 计算\(w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i\)

        4) 找出所有的S个支持向量对应的样本\((x_s,y_s)\),通过 \(y_s(\sum\limits_{i=1}^{S}\alpha_iy_ix_i^Tx_s+b) = 1\),计算出每个支持向量\((x_x, y_s)\)对应的\(b_s^{*}\),计算出这些\(b_s^{*} = y_s - \sum\limits_{i=1}^{S}\alpha_iy_ix_i^Tx_s\). 所有的\(b_s^{*}\)对应的平均值即为最终的\(b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}\)

         这样最终的分类超平面为:$w^{} \bullet x + b^{} = 0 \(,最终的分类决策函数为:\)f(x) = sign(w^{} \bullet x + b^{})$

     

    六、合页损失函数

        线性支持向量机还有另外一种解释如下:
    \[ \underbrace{ min}_{w, b}[1-y_i(w \bullet x + b)]_{+} + \lambda ||w||_2^2 \]
     

        其中\(L(y(w \bullet x + b)) = [1-y_i(w \bullet x + b)]_{+}\)称为合页损失函数(hinge loss function),下标+表示为:

    \[ [z]_{+}= \begin{cases} z &amp; {z >;0}\\ 0&amp; {z\leq 0} \end{cases} \]
      

        也就是说,如果点被正确分类,且函数间隔大于1,损失是0,否则损失是\(1-y(w \bullet x + b)\),如下图中的绿线。我们在下图还可以看出其他各种模型损失和函数间隔的关系:对于0-1损失函数,如果正确分类,损失是0,误分类损失1, 如下图黑线,可见0-1损失函数是不可导的。对于感知机模型,感知机的损失函数是\([-y_i(w \bullet x + b)]_{+}\),这样当样本被正确分类时,损失是0,误分类时,损失是\(-y_i(w \bullet x + b)\),如下图紫线。对于逻辑回归之类和最大熵模型对应的对数损失,损失函数是\(log[1+exp(-y(w \bullet x + b))]\), 如下图红线所示。

         线性可分SVM通过软间隔最大化,可以解决线性数据集带有异常点时的分类处理,但是现实生活中的确有很多数据不是线性可分的,这些线性不可分的数据也不是去掉异常点就能处理这么简单。那么SVM怎么能处理中这样的情况呢?我们在下一篇就来讨论线性不可分SVM和核函数的原理。

     

    (欢迎转载,转载请注明出处。欢迎沟通交流: 微信:nickchen121)

    转载于:https://www.cnblogs.com/nickchen121/p/11214859.html

    展开全文
  • 支持向量机原理(一) 线性支持向量机 支持向量机原理(二)线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(一) 线性支持向量机、支持向量机原理(二)线性...
  • 支持向量机原理(一) 线性支持向量机  支持向量机原理(二) 线性支持向量机的软间隔最大化模型  支持向量机原理(三)线性不可分支持向量机与核函数  支持向量机原理(四)SMO算法原理  支持向量机原理(五)线性支持...
  • 支持向量机原理(一)线性支持向量机 支持向量机原理(二)线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 1. 线性分类SVM面临的问题 (1)、有时候数据可以用线性分类SVM...
  • 支持向量机原理讲解

    2013-11-17 23:02:10
    支持向量机原理讲解,很棒的PPT,适合初学者了解SVM的原理
  • 支持向量机原理(四)SMO算法原理 支持向量机原理(一) 线性支持向量机  支持向量机原理(二) 线性支持向量机的软间隔最大化模型  支持向量机原理(三)线性不可分支持向量机与核函数  支持向量机原理(四)SMO算法...
  • 支持向量机原理(一) 线性支持向量机  支持向量机原理(二) 线性支持向量机的软间隔最大化模型  支持向量机原理(三)线性不可分支持向量机与核函数  支持向量机原理(四)SMO算法原理  支持向量机原理(五)线性支持...
  • 了解非线性支持向量机模型后,应该对支持向量机的原理与核技巧都有掌握,本文在传统非线性支持向量机基础上向大家介绍多核支持向量机,这里就不对支持向量机原理与核函数花费太多笔墨了,主要介绍将单核支持向量机...
  • 支持向量机原理简析

    2019-07-12 18:17:11
    支持向量机原理简析 引言 本文介绍机器学习中的一个常见算法——支持向量机,文中对于运筹学方面的介绍较为简略,如有需要,还请读者自行查阅相关资料。 支持向量机的基本型 试想这样一个问题,在二维平面上有若干个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,447
精华内容 978
关键字:

支持向量机原理