机器学习笔记-Support Vector Regression(SVR)
Support Vector Regression(SVR)上一篇中的内容是KLR(kernel logistic regression)KLR(kernel\ logistic\ regression)。这个问题的出发点是我们想要把SVMSVM这个强大的工具用在soft binary classificationsoft\ binary\ classification上,我们有两种选择: 第一种
Support Vector Regression(SVR)
上一篇中的内容是 KLR(kernel logistic regression) <script type="math/tex" id="MathJax-Element-1">KLR(kernel\ logistic\ regression)</script>。这个问题的出发点是我们想要把 SVM <script type="math/tex" id="MathJax-Element-2">SVM</script>这个强大的工具用在 soft binary classification <script type="math/tex" id="MathJax-Element-3">soft\ binary\ classification</script>上,我们有两种选择: 第一种方法可以称之为 two level learning <script type="math/tex" id="MathJax-Element-4">two\ level\ learning</script>:第一阶段做 SVM <script type="math/tex" id="MathJax-Element-5">SVM</script>;第二阶段将 SVM <script type="math/tex" id="MathJax-Element-6">SVM</script>的结果使用 logistic regression <script type="math/tex" id="MathJax-Element-7">logistic\ regression</script>进行微调。第二种方法是使用 representer theorem <script type="math/tex" id="MathJax-Element-8">representer\ theorem</script>理论直接将 logistic regression <script type="math/tex" id="MathJax-Element-9">logistic\ regression</script>转换为一个 kernel <script type="math/tex" id="MathJax-Element-10">kernel</script>的形式。这篇将简单讲述如何将一般的 regression <script type="math/tex" id="MathJax-Element-11">regression</script>变为 kernel <script type="math/tex" id="MathJax-Element-12">kernel</script>的形式。
Kernel Ridge Regression
回顾Representer Theorem
如果求解的问题是带有 regularized <script type="math/tex" id="MathJax-Element-13">regularized</script>( L2 <script type="math/tex" id="MathJax-Element-14">L2</script>- regularization <script type="math/tex" id="MathJax-Element-15">regularization</script>)的 linear model <script type="math/tex" id="MathJax-Element-16">linear\ model</script>,那么最佳的 w <script type="math/tex" id="MathJax-Element-17">w</script>将是
线性回归
在线性回归中我们使用平方误差来衡量真实值和预测值之间的 error( <script type="math/tex" id="MathJax-Element-25">error(</script>称为 square error) <script type="math/tex" id="MathJax-Element-26">square\ error)</script>,然后通过最小化这个 error <script type="math/tex" id="MathJax-Element-27">error</script>来得到最佳的解。
如果在线性回归的基础上加上 regularization <script type="math/tex" id="MathJax-Element-29">regularization</script>的话得到的模型我们称之为 ridge regression <script type="math/tex" id="MathJax-Element-30">ridge\ regression</script>,即有 regularization <script type="math/tex" id="MathJax-Element-31">regularization</script>的 linearregression <script type="math/tex" id="MathJax-Element-32">linear regression</script>的形式。这节将讲述的是, 怎么把 ridge regression <script type="math/tex" id="MathJax-Element-33">ridge\ regression</script>加上 kernel <script type="math/tex" id="MathJax-Element-34">kernel</script>得到我们想要的 kernel ridge regression <script type="math/tex" id="MathJax-Element-35">kernel\ ridge\ regression</script>。
在 linear regression <script type="math/tex" id="MathJax-Element-36">linear\ regression</script>或者是 ridge regression <script type="math/tex" id="MathJax-Element-37">ridge\ regression</script>中,我们可以得到问题的 analytic solution <script type="math/tex" id="MathJax-Element-38">analytic\ solution</script>。即解析解。同样我们希望 kernel ridge regression <script type="math/tex" id="MathJax-Element-39">kernel\ ridge\ regression</script>也可以有 analytic solution <script type="math/tex" id="MathJax-Element-40">analytic\ solution</script>。
Kernel Ridge Regression问题
ridge regression <script type="math/tex" id="MathJax-Element-41">ridge\ regression</script>问题可以由如下的 (1) <script type="math/tex" id="MathJax-Element-42">(1)</script>式描述:
因为已经知道了最佳解的形式,所以我们可以将最佳解带入原始的问题当中,这样就将问题从求解 w <script type="math/tex" id="MathJax-Element-44">w</script>变为求解
这样就可以使用 核技巧得到如下的 Kernel Ridge Regression <script type="math/tex" id="MathJax-Element-47">Kernel\ Ridge\ Regression</script>问题:
原来要求解的是一个关于 w <script type="math/tex" id="MathJax-Element-49">w</script>的问题,现在根据
可以将 kernel ridge regression <script type="math/tex" id="MathJax-Element-59">kernel\ ridge\ regression</script>看做是 β <script type="math/tex" id="MathJax-Element-60">\beta</script>的线性模型,其中 □ <script type="math/tex" id="MathJax-Element-61">\square</script>和 β <script type="math/tex" id="MathJax-Element-62">\beta</script>的复杂度有关; ◯ <script type="math/tex" id="MathJax-Element-63">\bigcirc</script>则是 β <script type="math/tex" id="MathJax-Element-64">\beta</script>的线性组合,组合的项是经过 kernel <script type="math/tex" id="MathJax-Element-65">kernel</script>转换之后的特征。所以 □ <script type="math/tex" id="MathJax-Element-66">\square</script>是 β <script type="math/tex" id="MathJax-Element-67">\beta</script>的一个 regularizer <script type="math/tex" id="MathJax-Element-68">regularizer</script>, ◯ <script type="math/tex" id="MathJax-Element-69">\bigcirc</script>是 error <script type="math/tex" id="MathJax-Element-70">error</script>的部分。
化简为矩阵的形式:
如果我们可以求得这个问题的解,那么就可以将之前学到过的 kernel <script type="math/tex" id="MathJax-Element-72">kernel</script>(多项式核,高斯核等)用在 ridge regression <script type="math/tex" id="MathJax-Element-73">ridge\ regression</script>上,
如何求解Kernel Ridge Regression
Kernel Ridge Regression
这个问题是一个无约束的最优化问题,所以先求梯度
我们想要求解 β <script type="math/tex" id="MathJax-Element-77">\beta</script>使得梯度为0,即 ▽Eaug(β)=0 <script type="math/tex" id="MathJax-Element-78">\triangledown E_{aug}(\beta) = 0</script>,所以可以使得 (λI+K)β−y=0 <script type="math/tex" id="MathJax-Element-79">(\lambda I + K)\beta - y = 0</script>, 解得:
- 当 λ>0 <script type="math/tex" id="MathJax-Element-81">\lambda>0</script>时 (⋅)−1 <script type="math/tex" id="MathJax-Element-82">(\centerdot)^{-1}</script>总是存在的,因为 K <script type="math/tex" id="MathJax-Element-83">K</script>是半正定的(根据Mercer’s condition),
λI+K <script type="math/tex" id="MathJax-Element-84">\lambda I+K</script>是正定的。
这样就可以求出最佳的 β <script type="math/tex" id="MathJax-Element-85">\beta</script>,这样就得到了 ridge regression <script type="math/tex" id="MathJax-Element-86">ridge\ regression</script>在 Z <script type="math/tex" id="MathJax-Element-87">Z</script>空间中的解。
所以理论上,我们现在可以很轻易的做
最终得到的
实例结果对比
- 左边是 linear ridge regression <script type="math/tex" id="MathJax-Element-370">linear\ ridge\ regression</script>的解
- w=(λI+XTX)−1XTy <script type="math/tex" id="MathJax-Element-371">w = (\lambda I + X^TX)^{-1}X^Ty</script>
- 右边是 kernel ridge regression <script type="math/tex" id="MathJax-Element-372">kernel\ ridge\ regression</script>的解
- β=(λI+K)−1y <script type="math/tex" id="MathJax-Element-373">\beta = (\lambda I + K)^{-1}y</script>
在 linear ridge regression <script type="math/tex" id="MathJax-Element-374">linear\ ridge\ regression</script>中 (λI+XTX) <script type="math/tex" id="MathJax-Element-375"> (\lambda I + X^TX)</script>是 d×d <script type="math/tex" id="MathJax-Element-376">d\times d</script>的,该算法时间复杂度可以记为 O(d3+d2N) <script type="math/tex" id="MathJax-Element-377">O(d^3+d^2N)</script>;在 kernel ridge regression <script type="math/tex" id="MathJax-Element-378">kernel\ ridge\ regression</script>中 (λI+K) <script type="math/tex" id="MathJax-Element-379"> (\lambda I + K)</script>是 N×N <script type="math/tex" id="MathJax-Element-380">N\times N</script>的。时间复杂度为 O(N3) <script type="math/tex" id="MathJax-Element-381">O(N^3)</script>。
小结
所以当 N>d <script type="math/tex" id="MathJax-Element-109">N>d</script>的时候,使用 linear ridge regression <script type="math/tex" id="MathJax-Element-110">linear\ ridge\ regression</script>比较有效;当资料量 N <script type="math/tex" id="MathJax-Element-111">N</script>很大的时候,
Support Vector Regression Primal
软间隔SVM和LSSVM
linear regression <script type="math/tex" id="MathJax-Element-421">linear\ regression</script>可以用来做 classification <script type="math/tex" id="MathJax-Element-422">classification</script>,所以 kernel ridge regression <script type="math/tex" id="MathJax-Element-423">kernel\ ridge\ regression</script>也可以用来做 classification <script type="math/tex" id="MathJax-Element-424">classification</script>。用于 classification <script type="math/tex" id="MathJax-Element-425">classification</script>的 kernel ridge regression <script type="math/tex" id="MathJax-Element-426">kernel\ ridge\ regression</script>有一个特别的名字叫做 least squares SVM(LSSVM) <script type="math/tex" id="MathJax-Element-427">least\ squares\ SVM(LSSVM)</script>, least squares <script type="math/tex" id="MathJax-Element-428">least\ squares</script>在强调的是,它所使用的是 error <script type="math/tex" id="MathJax-Element-429">error</script>是 square error <script type="math/tex" id="MathJax-Element-430">square\ error</script>。
对同样的资料分别利用使用 soft margin Gaussian SVM <script type="math/tex" id="MathJax-Element-431">soft\ margin\ Gaussian\ SVM</script>和 Gaussian LSSVM <script type="math/tex" id="MathJax-Element-432">Gaussian\ LSSVM</script>进行分类的结果如下:
从图中可以看出,分隔边界没有几乎是一致的,但是相比 soft margin Gaussian SVM <script type="math/tex" id="MathJax-Element-433">soft\ margin\ Gaussian\ SVM</script>来说, Gaussian LSSVM <script type="math/tex" id="MathJax-Element-434">Gaussian\ LSSVM</script>得到的支持向量 SV <script type="math/tex" id="MathJax-Element-435">SV</script>(使用方框框起来的点)会更多一些,右图中的每一个都是 support vector <script type="math/tex" id="MathJax-Element-436">support\ vector</script>。为什么会有这样的结果呢? kernel ridge regression <script type="math/tex" id="MathJax-Element-437">kernel\ ridge\ regression</script>中的 β <script type="math/tex" id="MathJax-Element-438">\beta</script>是使用 β=(λI+K)−1y <script type="math/tex" id="MathJax-Element-439">\beta = (\lambda I+K)^{-1}y</script>算出来,并没有通过加什么限制条件使得这些 β <script type="math/tex" id="MathJax-Element-440">\beta</script>很稀疏。所以得到的每一个 β <script type="math/tex" id="MathJax-Element-441">\beta</script>几乎都不是0,那么所有的点就都是 support vector <script type="math/tex" id="MathJax-Element-442">support\ vector</script>。当 support vector <script type="math/tex" id="MathJax-Element-443">support\ vector</script>很多的时候,在做 predict <script type="math/tex" id="MathJax-Element-444">predict</script>的时候,靠的是和每一个 SV <script type="math/tex" id="MathJax-Element-445">SV</script>算出 kernel <script type="math/tex" id="MathJax-Element-446">kernel</script>然后和 β <script type="math/tex" id="MathJax-Element-447">\beta</script>的乘积和,即, g(x)=∑Nn=1βnK(xn,x) <script type="math/tex" id="MathJax-Element-448">g(x) = \sum_{n=1}^{N}\beta_nK(x_n, x)</script>, 会多花很多的时间。
kernel logistic regression <script type="math/tex" id="MathJax-Element-449">kernel\ logistic\ regression</script>和 kernel ridge regression <script type="math/tex" id="MathJax-Element-450">kernel\ ridge\ regression</script>求出来的都是很 dense <script type="math/tex" id="MathJax-Element-451">dense</script>的 β <script type="math/tex" id="MathJax-Element-452">\beta</script>。而 soft margin SVM <script type="math/tex" id="MathJax-Element-453">soft\ margin\ SVM</script>就具有比较好的性质,最后得到的 α <script type="math/tex" id="MathJax-Element-454">\alpha</script>就是 sparse <script type="math/tex" id="MathJax-Element-455">sparse</script>的,即很多是0,只有少数不是0。这是从 KKT condition <script type="math/tex" id="MathJax-Element-456">KKT\ condition</script>得到的结果。
现在我们想要做的事情是, regression <script type="math/tex" id="MathJax-Element-457">regression</script>能不能像 SVM <script type="math/tex" id="MathJax-Element-458">SVM</script>一样得到比较 sparse <script type="math/tex" id="MathJax-Element-459">sparse</script>的解?
Tube Regression
在使用平方误差 square error <script type="math/tex" id="MathJax-Element-153">square\ error</script>的时候,不管真实值 y <script type="math/tex" id="MathJax-Element-154">y</script>和预测值
也就是说:
- 如果 |s−y|≤ϵ,⟶error=0 <script type="math/tex" id="MathJax-Element-159">|s - y| \le \epsilon, \longrightarrow error = 0</script>
- 如果 |s−y|>ϵ,⟶error=|s−y|−ϵ <script type="math/tex" id="MathJax-Element-160">|s - y| > \epsilon, \longrightarrow error = |s-y|-\epsilon</script>
结合以上的讨论得到,如果错的超过了我们的阈值,不计较,此时 |s−y|−ϵ<0 <script type="math/tex" id="MathJax-Element-161">|s - y| - \epsilon < 0</script>,即 err=0 <script type="math/tex" id="MathJax-Element-162">err = 0</script>;如果错的超过了我们的阈值,就将 err <script type="math/tex" id="MathJax-Element-163">err</script>记为超过的部分。
这个 error <script type="math/tex" id="MathJax-Element-472">error</script>通常被称为 ϵ insensitive error <script type="math/tex" id="MathJax-Element-473">\epsilon\ insensitive\ error</script>,形式很像在 SVM <script type="math/tex" id="MathJax-Element-474">SVM</script>中的 hinge error <script type="math/tex" id="MathJax-Element-475">hinge\ error</script>。这样做也是为了让 regression <script type="math/tex" id="MathJax-Element-476">regression</script>和有 sparse <script type="math/tex" id="MathJax-Element-477">sparse</script>解的 SVM <script type="math/tex" id="MathJax-Element-478">SVM</script>取得关联。
我们现在要做的事情是,将带有 L2 regularized <script type="math/tex" id="MathJax-Element-479">L2\ regularized</script>的 tube regression <script type="math/tex" id="MathJax-Element-480">tube\ regression</script>进行一系列的推到得到它的稀疏的解 β <script type="math/tex" id="MathJax-Element-481">\beta</script>。
Tube和Squared Regression对比
- tube:err(y,s)=max(0,|y−s|−ϵ) <script type="math/tex" id="MathJax-Element-495">tube:err(y, s) = max(0, |y-s|-\epsilon)</script>
- squared:err(u,s)=(s−y)2 <script type="math/tex" id="MathJax-Element-496">squared:err(u, s) = (s - y)^2</script>
将两种 error <script type="math/tex" id="MathJax-Element-497">error</script>画在下图中,可以看出,当 |y−s| <script type="math/tex" id="MathJax-Element-498">|y-s|</script>比较小的时候, tube <script type="math/tex" id="MathJax-Element-499">tube</script>和 squared <script type="math/tex" id="MathJax-Element-500">squared</script>的 error <script type="math/tex" id="MathJax-Element-501">error</script>其实是很接近的。当 |y−s| <script type="math/tex" id="MathJax-Element-502">|y-s|</script>比较大的时候, squared <script type="math/tex" id="MathJax-Element-503">squared</script>会上升的比较快,而 tube <script type="math/tex" id="MathJax-Element-504">tube</script>则比较平缓。所以 squared <script type="math/tex" id="MathJax-Element-505">squared</script>更容易受到噪音的影响,相对来说可能 tube <script type="math/tex" id="MathJax-Element-506">tube</script>会好一点。稍后会看到,使用 ϵ insensitive error <script type="math/tex" id="MathJax-Element-507">\epsilon\ insensitive\ error</script>这样的方式会让我们得到稀疏的解。
L2-Regularized Tube Regression
现在我们要求解的是一个带有 L2 <script type="math/tex" id="MathJax-Element-188">L2</script>- regularize <script type="math/tex" id="MathJax-Element-189">regularize</script>正则化因子的 tube regression <script type="math/tex" id="MathJax-Element-190">tube\ regression</script>问题。
回想一下 soft margin SVM <script type="math/tex" id="MathJax-Element-192">soft\ margin\ SVM</script>问题的求解过程, SVM <script type="math/tex" id="MathJax-Element-193">SVM</script>问题解决的是 L2 <script type="math/tex" id="MathJax-Element-194">L2</script>- Regularize <script type="math/tex" id="MathJax-Element-195">Regularize</script>加上 margin violation <script type="math/tex" id="MathJax-Element-196">margin\ violation</script>的最小化问题: min12wTw+C∑margin violation <script type="math/tex" id="MathJax-Element-197">min \frac12w^Tw + C\sum margin\ violation</script>,我们发现直接解决这样的一个问题是困难的,因为同样也会碰到 max <script type="math/tex" id="MathJax-Element-198">max</script>函数无法微分的问题,所以我们重新将其写成了一个 quadratic programming <script type="math/tex" id="MathJax-Element-199">quadratic\ programming</script>的问题,这样就比较容易求解。然后通过求解该问题的对偶问题可以使用 kernel <script type="math/tex" id="MathJax-Element-200">kernel</script>技巧。同时 KKT conditional <script type="math/tex" id="MathJax-Element-201">KKT\ conditional</script>会保证解的稀疏性。
所以我们现在要做的事情就是模仿 SVM <script type="math/tex" id="MathJax-Element-202">SVM</script>的解法来解决 tube regression <script type="math/tex" id="MathJax-Element-203">tube\ regression</script>。所以先要将 tube regression <script type="math/tex" id="MathJax-Element-204">tube\ regression</script>表示成一个 quadratic programming <script type="math/tex" id="MathJax-Element-205">quadratic\ programming</script>的问题。
所以为了使得 tube regression <script type="math/tex" id="MathJax-Element-206">tube\ regression</script>问题和 SVM <script type="math/tex" id="MathJax-Element-207">SVM</script>长的比较像,首先做如下的效的调整, SVM <script type="math/tex" id="MathJax-Element-208">SVM</script>中习惯用的参数是 C <script type="math/tex" id="MathJax-Element-209">C</script>而不是
Standard Support Vector Regression Primal
SVR Primal
变成一个二次规划问题的关键是将 max <script type="math/tex" id="MathJax-Element-214">max</script>变形,为此我们引进了一个新的变量 ξn <script type="math/tex" id="MathJax-Element-215">\xi_n</script>, ξn <script type="math/tex" id="MathJax-Element-216">\xi_n</script>记录了真实值和预测值的差值比 ϵ <script type="math/tex" id="MathJax-Element-217">\epsilon</script>大多少,且 ξn≥0 <script type="math/tex" id="MathJax-Element-218">\xi_n\ge0</script>。
还不是 QP <script type="math/tex" id="MathJax-Element-220">QP</script>问题,因为条件不是线性的,需要去掉绝对值。
现在就得到了一个标准的 QP <script type="math/tex" id="MathJax-Element-535">QP</script>问题。我们将这个问题成为称为标准的 Support Vector Regression(SVR) <script type="math/tex" id="MathJax-Element-536">Support\ Vector\ Regression(SVR)</script>的 Primal <script type="math/tex" id="MathJax-Element-537">Primal</script>问题。
SVR:minimizeregularizer+(upper tube violation ξ∧nand lower tube violations ξ∨n) <script type="math/tex" id="MathJax-Element-538">SVR:minimize \quad regularizer + (upper\ tube\ violation\ \xi_n^{\land} and\ lower\ tube\ violations\ \xi_n^{\lor})</script>
SVR <script type="math/tex" id="MathJax-Element-539">SVR</script>的 Primal <script type="math/tex" id="MathJax-Element-540">Primal</script>问题如下:
从图中可以看出,就是通过最小化所有的红线长度的和加上规则化因子来得到一条比较好的分割线。
- 参数 C <script type="math/tex" id="MathJax-Element-542">C</script>用来衡量对误差的重视程度,越大则表明想要更小的误差,与此同时就会带来更大的模型复杂度;
C <script type="math/tex" id="MathJax-Element-543">C</script>越小相对来说 12wTw <script type="math/tex" id="MathJax-Element-544">\frac12w^Tw</script>占有的比重就越大,正则化起到的作用就越大,即想要更加简单的模型复杂度。 - 参数 ϵ <script type="math/tex" id="MathJax-Element-545">\epsilon</script>用来决定 tube <script type="math/tex" id="MathJax-Element-546">tube</script>的宽度, tube <script type="math/tex" id="MathJax-Element-547">tube</script>的宽度是2 ϵ <script type="math/tex" id="MathJax-Element-548">\epsilon</script>。所以可以用来调节容忍的程度,越大表明对预测值和真实值的差值有越大的容忍度。
所以 SVR <script type="math/tex" id="MathJax-Element-549">SVR</script>和 SVM <script type="math/tex" id="MathJax-Element-550">SVM</script>相比来说多一个可以调节的参数 ϵ <script type="math/tex" id="MathJax-Element-551">\epsilon</script>。
这个二次规划问题的变数有 2N+1+d~ <script type="math/tex" id="MathJax-Element-552">2N+1+\tilde{d}</script>,约束的个数 2N+2N <script type="math/tex" id="MathJax-Element-553">2N+2N</script>个。那么接下来我们关心的问题是怎么把 d~ <script type="math/tex" id="MathJax-Element-554">\tilde{d}</script>的影响移除掉。和 SVM <script type="math/tex" id="MathJax-Element-555">SVM</script>的做法一样,需要把这个问题转换成一个对偶问题,在转换为一个对偶问题之后,就可以使用 kernel trick <script type="math/tex" id="MathJax-Element-556">kernel\ trick</script>避免在 Z <script type="math/tex" id="MathJax-Element-557">Z</script>空间中的运算,也就是说就和
Support Vector Regression Dual
SVR <script type="math/tex" id="MathJax-Element-247">SVR</script>的 Primal <script type="math/tex" id="MathJax-Element-248">Primal</script>问题如下:
现在有了 SVR <script type="math/tex" id="MathJax-Element-250">SVR</script>的 Primal <script type="math/tex" id="MathJax-Element-251">Primal</script>形式,接下来我们希望可以得到 SVR <script type="math/tex" id="MathJax-Element-252">SVR</script>的 Dual <script type="math/tex" id="MathJax-Element-253">Dual</script>形式。所以我们引入 Lagrange multiplier <script type="math/tex" id="MathJax-Element-254">Lagrange\ multiplier</script>,
- 针对条件: yn−wTzn−b≤ϵ+ξ∧n <script type="math/tex" id="MathJax-Element-255">y_n-w^Tz_n - b \le \epsilon + \xi_n^{\land}</script>,引入乘子 α∧n <script type="math/tex" id="MathJax-Element-256">\alpha_n^{\land}</script>;
- 针对条件: −ϵ−ξ∨n≤yn−wTzn−b <script type="math/tex" id="MathJax-Element-257">-\epsilon - \xi_n^{\lor} \le y_n-w^Tz_n - b</script>,引入乘子 α∨n <script type="math/tex" id="MathJax-Element-258">\alpha_n^{\lor}</script>。
那么接下来就是写出 Lagrange <script type="math/tex" id="MathJax-Element-259">Lagrange</script>函数,然后对里面的变量求微分,使用KKT条件对 Lagrange <script type="math/tex" id="MathJax-Element-260">Lagrange</script>函数做替换得到一个新的问题,这个新的问题就是我们想要得到的对偶问题。类似于SVM的对偶问题的推导。
这里只给出一些最后推到的结果:
- 利用 KKT <script type="math/tex" id="MathJax-Element-261">KKT</script>条件对 wi <script type="math/tex" id="MathJax-Element-262">w_i</script>进行求导并令结果为0可以得到:
∂L∂wi=0⟶w=∑n=1N(α∧n−α∨n)zn<script type="math/tex; mode=display" id="MathJax-Element-263">\frac{\partial L}{\partial w_i} = 0 \longrightarrow w = \sum_{n=1}^{N}(\alpha_n^{\land} - \alpha_n^{\lor})z_n</script>这个和在 SVM <script type="math/tex" id="MathJax-Element-264">SVM</script>得到的结果是一样的, 即 w <script type="math/tex" id="MathJax-Element-265">w</script>会是z <script type="math/tex" id="MathJax-Element-266">z</script>的线性组合。 - 利用 KKT <script type="math/tex" id="MathJax-Element-267">KKT</script>条件对 b <script type="math/tex" id="MathJax-Element-268">b</script>进行求偏导并令结果为0可以得到:
∂L∂b=0⟶∑n=1N(α∧n−α∨n)=0 - 利用 KKT <script type="math/tex" id="MathJax-Element-270">KKT</script>条件得最佳解满足:
α∧n(ϵ+ξ∨n−yn+wTzn+b)=0,α∧n(ϵ+ξ∨n−yn+wTzn+b)=0<script type="math/tex; mode=display" id="MathJax-Element-271">\alpha_n^{\land}(\epsilon+\xi_{n}^{\lor}-y_n+w^Tz_n+b) = 0, \quad \alpha_n^{\land}(\epsilon+\xi_{n}^{\lor}-y_n+w^Tz_n+b) = 0</script>
经过推导之后,SVR的对偶形式如下:
我们推导 SVR <script type="math/tex" id="MathJax-Element-273">SVR</script>的最初的目的是为了得到稀疏的解。现在我们就来看看我们有没有达到目的。现在我们已经知道了最佳的解 w <script type="math/tex" id="MathJax-Element-274">w</script>可以表示为
从 KKT <script type="math/tex" id="MathJax-Element-279">KKT</script>条件告诉我们的如下的两个 complementary slackness <script type="math/tex" id="MathJax-Element-280">complementary\ slackness</script>出发,
我们考虑严格位于 tube <script type="math/tex" id="MathJax-Element-282">tube</script>中的数据点: |wTzn+b−yn|<ϵ <script type="math/tex" id="MathJax-Element-283">|w^Tz_n + b - y_n| < \epsilon</script>
所以当预测值和真实值的差值的绝对值小于 ϵ <script type="math/tex" id="MathJax-Element-285">\epsilon</script>,即位于 tube <script type="math/tex" id="MathJax-Element-286">tube</script>之间的时候,这些数据点对于最佳解 w <script type="math/tex" id="MathJax-Element-287">w</script>没有贡献。所以只有在
Summary of Kernel Models
线性模型
本系列中涉及的线性模型主要有三个
- PLA/pocket <script type="math/tex" id="MathJax-Element-603">PLA/pocket</script>用于分类,直接优化 err0/1 <script type="math/tex" id="MathJax-Element-604">err_{0/1}</script>;
- Logistic Regression <script type="math/tex" id="MathJax-Element-605">Logistic\ Regression</script>用于 soft <script type="math/tex" id="MathJax-Element-606">soft</script>分类,其方法是最小化 cross entropy error <script type="math/tex" id="MathJax-Element-607">cross\ entropy\ error</script>或者说是 logistic error <script type="math/tex" id="MathJax-Element-608">logistic\ error</script>- errCE <script type="math/tex" id="MathJax-Element-609">err_{CE}</script>,通常使用 SGD <script type="math/tex" id="MathJax-Element-610">SGD</script>或者 GD <script type="math/tex" id="MathJax-Element-611">GD</script>。如果加上正则化项就是 regularized logistic regression <script type="math/tex" id="MathJax-Element-612">regularized\ logistic\ regression</script>。
- Linear Regression <script type="math/tex" id="MathJax-Element-613">Linear\ Regression</script>用于对实数的回归分析,通过最小化 errsquare <script type="math/tex" id="MathJax-Element-614">err_{square}</script>可以得到解析解。如果加上正则化项就是 linear ridge regression <script type="math/tex" id="MathJax-Element-615">linear\ ridge\ regression</script>。
- 之后介绍了另外一种线性模型 linear soft margin SVM <script type="math/tex" id="MathJax-Element-616">linear\ soft\ margin\ SVM</script>,也是用于解决线性的分类问题,使用的 error function <script type="math/tex" id="MathJax-Element-617">error\ function</script>被称为是 hinge error <script type="math/tex" id="MathJax-Element-618">hinge\ error</script>,通过求解一个 QP <script type="math/tex" id="MathJax-Element-619">QP</script>问题得到最优解。
- Regression <script type="math/tex" id="MathJax-Element-620">Regression</script>的另一种做法是 linear SVR <script type="math/tex" id="MathJax-Element-621">linear\ SVR</script>,同样是使用二次规划最小化 errtube <script type="math/tex" id="MathJax-Element-622">err_{tube}</script>。
LIBLINEAR <script type="math/tex" id="MathJax-Element-623">LIBLINEAR</script>中实现了第二行的三种模型。
以上线性的模型只要加上 regularizer <script type="math/tex" id="MathJax-Element-624">regularizer</script>都可以延伸成 kernel <script type="math/tex" id="MathJax-Element-625">kernel</script>的模型。
linear soft margin SVM <script type="math/tex" id="MathJax-Element-626">linear\ soft\ margin\ SVM</script>延伸成 SVM <script type="math/tex" id="MathJax-Element-627">SVM</script>, SVM <script type="math/tex" id="MathJax-Element-628">SVM</script>解决的不再是 primal <script type="math/tex" id="MathJax-Element-629">primal</script>问题,而是对偶问题;
linear SVR <script type="math/tex" id="MathJax-Element-630">linear\ SVR</script>的 kernel <script type="math/tex" id="MathJax-Element-631">kernel</script>延伸是 SVR <script type="math/tex" id="MathJax-Element-632">SVR</script>,同样也是解决对偶问题;
通过 representer theorem <script type="math/tex" id="MathJax-Element-633">representer\ theorem</script>可以将 linear ridge regression <script type="math/tex" id="MathJax-Element-634">linear\ ridge\ regression</script>变为 kernel ridge regression <script type="math/tex" id="MathJax-Element-635">kernel\ ridge\ regression</script>;
可以将 regularized logistic regression <script type="math/tex" id="MathJax-Element-636">regularized\ logistic\ regression</script>变为 kernel logistic regression <script type="math/tex" id="MathJax-Element-637">kernel\ logistic\ regression</script>;
kernel logistic regression <script type="math/tex" id="MathJax-Element-638">kernel\ logistic\ regression</script>通常会被 Probabilistic SVM <script type="math/tex" id="MathJax-Element-639">Probabilistic\ SVM</script>,也就是 two level learning <script type="math/tex" id="MathJax-Element-640">two\ level\ learning</script>取代;
LIBSVM <script type="math/tex" id="MathJax-Element-641">LIBSVM</script>实现了最后一行的所有的三种模型。
针对上图中模型的实用度做简单的记录:第一行 PLA/pocket <script type="math/tex" id="MathJax-Element-642">PLA/pocket</script>和 linear SVR <script type="math/tex" id="MathJax-Element-643">linear\ SVR</script>很少被使用,通常会被它们下面的两个模型分别取代;第三行的 kernel ridge regression <script type="math/tex" id="MathJax-Element-644">kernel\ ridge\ regression</script>和 kernel logistic regression <script type="math/tex" id="MathJax-Element-645">kernel\ logistic\ regression</script>也比较少用,因为这两个模型的解不是稀疏的,通常会被它们下面的两个模型分别取代。
总结
本篇主要讲解了 Support Vector Regression <script type="math/tex" id="MathJax-Element-336">Support\ Vector\ Regression</script>,我们一开始的出发点是如何将 Ridge Regression <script type="math/tex" id="MathJax-Element-337">Ridge\ Regression</script>变为 kernel <script type="math/tex" id="MathJax-Element-338">kernel</script>的形式, representer theorem <script type="math/tex" id="MathJax-Element-339">representer\ theorem</script>理论帮助我们完成了这个工作,但是通过这样的方法得到的解不是稀疏的,我们想要的 sparse <script type="math/tex" id="MathJax-Element-340">sparse</script>的解,所以我们通过推导带有 regularizer <script type="math/tex" id="MathJax-Element-341">regularizer</script>的 tube error <script type="math/tex" id="MathJax-Element-342">tube\ error</script>得出了 SVR <script type="math/tex" id="MathJax-Element-343">SVR</script>的原始问题,进一步推导了 SVR <script type="math/tex" id="MathJax-Element-344">SVR</script>的对偶问题。最后根据 KTT <script type="math/tex" id="MathJax-Element-345">KTT</script>条件得到了稀疏的解。
回顾
更多推荐
所有评论(0)