@ -6,14 +6,14 @@
< div align = center > < img src = "./img/1024.jpg" , height = "250" / > < / div >
< div align = center > < img src = "./img/1024.jpg" , height = "250" / > < / div >
图中的绿线与黄线都能很好的将图中的红点与蓝点给区分开。但是,哪条线的泛化性更好呢?可能你不太了解泛化性,也就是说,我们的 这条直线,不仅需要在训练集 ** (已知的数据)** 上能够很好的将红点跟蓝点区分开来,还要在测试集 ** (未知的数据)** 上将红点和蓝点给区分开来。
图中的绿线与黄线都能很好的将图中的红点与蓝点给区分开。但是,哪条线的泛化性更好呢?可能你不太了解泛化性,也就是说,这条直线,不仅需要在训练集 ** (已知的数据)** 上能够很好的将红点跟蓝点区分开来,还要在测试集 ** (未知的数据)** 上将红点和蓝点给区分开来。
假如经过训练,我们得到了黄色的这条决策边界用来区分我们的 数据,这个时候又来了一个数据,即黑色的点,那么你觉得黑色的点是属于红的这一类,还是蓝色的这一类呢?
假如经过训练,我们得到了黄色的这条决策边界用来区分数据,这个时候又来了一个数据,即黑色的点,那么你觉得黑色的点是属于红的这一类,还是蓝色的这一类呢?
< div align = center > < img src = "./img/1025.jpg" , height = "250" / > < / div >
< div align = center > < img src = "./img/1025.jpg" , height = "250" / > < / div >
如上图,根据黄线的划分标准,黑色的点应该属于红色这一类。可是,我们 肉眼很容易发现,黑点离蓝色的点更近,它应该是属于蓝色的点。这就说明,黄色的这条直线它的泛化性并不好,它对于未知的数据并不能很好的进行分类。那么,如何得到一条泛化性好的直线呢?这个就是支持向量机考虑的问题。
如上图,根据黄线的划分标准,黑色的点应该属于红色这一类。可是,肉眼很容易发现,黑点离蓝色的点更近,它应该是属于蓝色的点。这就说明,黄色的这条直线它的泛化性并不好,它对于未知的数据并不能很好的进行分类。那么,如何得到一条泛化性好的直线呢?这个就是支持向量机考虑的问题。
### 基本思想
### 基本思想
@ -43,7 +43,7 @@ $$
< / center >
< / center >
< br >
< br >
其中$$w=(w_1,w_2,..,w_d)$$为法向量,决定了决策边界的方向。$$b$$为位移项,决定了决策边界与原点之间的距离。显然,决策边界可被法向量和位移确定,我们将其表示为$$(w,b)$$。样本空间中的任意一个点$$x$$, 到决策边界$$(w,b)$$的距离可写为:
其中$$w=(w_1,w_2,..,w_d)$$为法向量,决定了决策边界的方向。$$b$$为位移项,决定了决策边界与原点之间的距离。显然,决策边界可被法向量和位移确定,可以将其表示为$$(w,b)$$。样本空间中的任意一个点$$x$$, 到决策边界$$(w,b)$$的距离可写为:
< center >
< center >
$$
$$
@ -52,7 +52,7 @@ $$
< / center >
< / center >
< br >
< br >
假设决策边界$$(w,b)$$能够将训练样本正确分类,即对于任何一个样本点$$(x_i,y_i)$$, 若它为正类,即$$y_i=+1$$时,$$w^Tx+b\geq +1$$。若它为负类,即$$y_i=-1$$时,$$w^Tx+b\leq -1$$。
假设决策边界$$(w,b)$$能够将训练样本正确分类,即对于任何一个样本点$$(x_i,y_i)$$, 若它为正类,即$$y_i=+1$$时,$$w^Tx+b\geq +1$$。若它为负类,即$$y_i=-1$$时,$$w^Tx+b\leq -1$$。
< div align = center > < img src = "./img/1028.jpg" , height = "250" / > < / div >
< div align = center > < img src = "./img/1028.jpg" , height = "250" / > < / div >
@ -69,7 +69,7 @@ $$
< div align = center > < img src = "./img/1029.jpg" , height = "150" / > < / div >
< div align = center > < img src = "./img/1029.jpg" , height = "150" / > < / div >
显然,为了最大化间隔,仅需最大化$$||w||^{-1}$$, 这等价于最小化$$||w||^2$$,于是,条件可以重写为:
显然,为了最大化间隔,仅需最大化$$||w||^{-1}$$, 这等价于最小化$$||w||^2$$,于是,条件可以重写为:
< center >
< center >
$$
$$
@ -157,7 +157,7 @@ $$
< / center >
< / center >
< br >
< br >
从对偶问题解出的$$\alpha_i$$是拉格朗日乘子,它恰对应着训练样本$$(x_i,y_i)$$, 由于原问题有不等式的约束, 因此上述过程需满足KKT(Karush-Kuhn-Tucker)条件, 即要求:
从对偶问题解出的$$\alpha_i$$是拉格朗日乘子,它恰对应着训练样本$$(x_i,y_i)$$, 由于原问题有不等式的约束, 因此上述过程需满足KKT(Karush-Kuhn-Tucker)条件, 即要求:
< center >
< center >
$$
$$
@ -181,7 +181,7 @@ $$
所谓的软间隔,是相对于硬间隔说的,刚刚在间隔与支持向量中提到的间隔就是硬间隔。
所谓的软间隔,是相对于硬间隔说的,刚刚在间隔与支持向量中提到的间隔就是硬间隔。
接着我们再看如何可以软间隔最大化呢? SVM 对训练集里面的每个样本$$(x_i,y_i)$$引入了一个松弛变量$$\xi_i\geq0$$, 使函数间隔加上松弛变量大于等于$$1$$,也就是说:
接着我们再看如何可以软间隔最大化呢? SVM 对训练集里面的每个样本$$(x_i,y_i)$$引入了一个松弛变量$$\xi_i\geq0$$, 使函数间隔加上松弛变量大于等于$$1$$,也就是说:
< center >
< center >
$$
$$
@ -215,7 +215,7 @@ $$
< / center >
< / center >
< br >
< br >
这里,$$C>0$$为惩罚参数,可以理解为我们 一般回归和分类问题正则化时候的参数。$$C$$越大,对误分类的惩罚越大,$$C$$越小,对误分类的惩罚越小。也就是说,我们 希望权值的二范数尽量小,误分类的点尽可能的少。$$C$$是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。
这里,$$C>0$$为惩罚参数,可以理解为一般回归和分类问题正则化时候的参数。$$C$$越大,对误分类的惩罚越大,$$C$$越小,对误分类的惩罚越小。也就是说,希望权值的二范数尽量小,误分类的点尽可能的少。$$C$$是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。
同样的,使用拉格朗日函数将软间隔最大化的约束问题转化为无约束问题,利用相同的方法得到数学模型:
同样的,使用拉格朗日函数将软间隔最大化的约束问题转化为无约束问题,利用相同的方法得到数学模型:
@ -248,7 +248,7 @@ $$
##smo算法
##smo算法
序列最小优化算法($$smo$$算法)是一种启发式算法, $$SVM$$中的模型参数可以使用该算法进行求解。其基本思路是:如果所有变量的解都满足此最优化问题的$$KKT$$条件,那么这个最优化问题的解就得到了。因为$$KKT$$条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量, 一个是违反$$KKT$$条件最严重的那一个,另一个由约束条件自动确定。如此,$$smo$$算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体如下:
序列最小优化算法($$smo$$算法)是一种启发式算法, $$SVM$$中的模型参数可以使用该算法进行求解。其基本思路是:如果所有变量的解都满足此最优化问题的$$KKT$$条件,那么这个最优化问题的解就得到了。因为$$KKT$$条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量, 一个是违反$$KKT$$条件最严重的那一个,另一个由约束条件自动确定。如此,$$smo$$算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体如下:
选择两个变量$$\alpha_1,\alpha_2$$,其它变量$$\alpha_i,i=3,4,..m$$是固定的。
选择两个变量$$\alpha_1,\alpha_2$$,其它变量$$\alpha_i,i=3,4,..m$$是固定的。
于是,$$smo$$的最优化问题的子问题可以写成:
于是,$$smo$$的最优化问题的子问题可以写成:
@ -281,9 +281,9 @@ $$
< div align = center > < img src = "./img/1032.jpg" , height = "200" / > < / div >
< div align = center > < img src = "./img/1032.jpg" , height = "200" / > < / div >
由于$$\alpha_1,\alpha_2$$的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们 假设最终是$$\alpha_2$$的优化问题。由于我们 采用的是启发式的迭代法,假设我们 上一轮迭代得到的解是$$\alpha^{old}_1,\alpha^{old}_2$$,假设沿着约束方向$$\alpha_2$$未经剪辑的解是$$\alpha_2^{new,unc}$$。本轮迭代完成后的解为$$\alpha^{new}_1,\alpha^{new}_2$$。
由于$$\alpha_1,\alpha_2$$的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨假设最终是$$\alpha_2$$的优化问题。由于采用的是启发式的迭代法,假设上一轮迭代得到的解是$$\alpha^{old}_1,\alpha^{old}_2$$,假设沿着约束方向$$\alpha_2$$未经剪辑的解是$$\alpha_2^{new,unc}$$。本轮迭代完成后的解为$$\alpha^{new}_1,\alpha^{new}_2$$。
由于$$\alpha_2^{new}$$必须满足上图中的线段约束。假设$$L$$和$$H$$分别是上图中$$\alpha_2^{new}$$所在的线段的边界。那么很显然我们 有:
由于$$\alpha_2^{new}$$必须满足上图中的线段约束。假设$$L$$和$$H$$分别是上图中$$\alpha_2^{new}$$所在的线段的边界。那么很显然有:
< center >
< center >
$$
$$
@ -292,7 +292,7 @@ $$
< / center >
< / center >
< br >
< br >
而对于$$L$$和$$H$$, 我们 也有限制条件如果是上面左图中的情况,则:
而对于$$L$$和$$H$$,也有限制条件如果是上面左图中的情况,则:
< center >
< center >
@ -302,7 +302,7 @@ $$
< / center >
< / center >
< br >
< br >
如果是上面右图中的情况,我们 有:
如果是上面右图中的情况,有:
< center >
< center >
$$
$$
@ -311,7 +311,7 @@ $$
< / center >
< / center >
< br >
< br >
也就是说,假如我们 通过求导得到的$$\alpha_2^{new,unc}$$,则最终的$$\alpha_2^{new}$$应该为:
也就是说,假如通过求导得到的$$\alpha_2^{new,unc}$$,则最终的$$\alpha_2^{new}$$应该为:
< center >
< center >
$$
$$
@ -324,7 +324,7 @@ $$
< / center >
< / center >
< br >
< br >
那么如何求出$$\alpha_2^{new}$$呢?很简单,我们 只需要将目标函数对$$\alpha2$$求偏导数即可。首先我们 整理下我们的目标函数。为了简化叙述,我们 令:
那么如何求出$$\alpha_2^{new}$$呢?很简单只需要将目标函数对$$\alpha2$$求偏导数即可。首先整理下我们的目标函数。为了简化叙述,令:
< center >
< center >
$$
$$
@ -360,15 +360,15 @@ $$
$$smo$$算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?
$$smo$$算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?
一般来说,我们 首先选择违反$$0 < \alpha_i < C $$这个条件的点。如果这些支持向量都满足$$ KKT $$条件,再选择违反$$ \alpha_i = 0$$和$$ \alpha_i=C$$的点。
一般来说,首先选择违反$$0 < \alpha_i < C $$这个条件的点。如果这些支持向量都满足$$ KKT $$条件,再选择违反$$ \alpha_i = 0$$和$$ \alpha_i=C$$的点。
$$smo$$算法称选择第二一个变量为内层循环,假设我们 在外层循环已经找到了$$\alpha_1$$, 第二个变量$$\alpha_2$$的选择标准是让$$E_1$$-$$E_2$$有足够大的变化。由于$$\alpha_1$$定了的时候, $$E_1$$也确定了,所以要想$$E_1$$-$$E_2$$最大,只需要在$$E_1$$为正时,选择最小的$$E_i$$作为$$E_2$$, 在$$E_1$$为负时,选择最大的$$E_i$$作为$$E_2$$,可以将所有的$$E_i$$保存下来加快迭代。
$$smo$$算法称选择第二一个变量为内层循环,假设在外层循环已经找到了$$\alpha_1$$, 第二个变量$$\alpha_2$$的选择标准是让$$E_1$$-$$E_2$$有足够大的变化。由于$$\alpha_1$$定了的时候, $$E_1$$也确定了,所以要想$$E_1$$-$$E_2$$最大,只需要在$$E_1$$为正时,选择最小的$$E_i$$作为$$E_2$$, 在$$E_1$$为负时,选择最大的$$E_i$$作为$$E_2$$,可以将所有的$$E_i$$保存下来加快迭代。
如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做$$\alpha_2$$, 直到目标函数有足够的下降, 如果所有的支持向量做$$\alpha_2$$都不能让目标函数有足够的下降,可以跳出循环,重新选择$$\alpha_1$$。
如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做$$\alpha_2$$, 直到目标函数有足够的下降, 如果所有的支持向量做$$\alpha_2$$都不能让目标函数有足够的下降,可以跳出循环,重新选择$$\alpha_1$$。
### 计算阈值b和差值Ei
### 计算阈值b和差值Ei
在每次完成两个变量的优化之后,需要重新计算阈值$$b$$。当$$0< \alpha_1 ^{ new }< C $$时, 我们 有:
在每次完成两个变量的优化之后,需要重新计算阈值$$b$$。当$$0< \alpha_1 ^{ new }< C $$时, 有:
< center >
< center >
$$
$$