文章目录
Log
2022.02.05学习第十二章的内容
2022.02.06继续学习
2022.02.07内容有些多,感觉开学之前够呛能学完全部内容
2022.02.08继续学习
2022.02.09今天应该可以弄完这一章
2022.02.10昨天有事耽误了一下
2022.02.11今天收个尾
在监督学习中,许多算法的性能都非常相似,因此更多应该考虑的是在算法构建时所使用的数据量,而不是考虑应该用哪一个算法。这就体现了我们应用这些算法时的技巧,比如用于学习算法的特征的选择,以及正则化参数的选择。
不过还有一个更加强大算法,它被广泛应用于工业界和学术界(industry & academia),它被称为支持向量机(support vector machines),与逻辑回归和神经网络相比,支持向量机(或称 SVM)在学习复杂的非线性方程时能够提供一种更为清晰和更加强大的方式。考虑到 SVM 在当下的热度和强大的功能,SVM 将会进行详细的介绍,后面的其他监督学习算法只会进行简单的介绍。和之前的监督学习算法的学习过程一样,先从优化目标开始。
一、优化目标(Optimization objective)
1. 代价函数
- 先从逻辑回归开始讲起,对其做出一些改动使之成为支持向量机。
- 下面是逻辑回归中的激活函数(Sigmoid 函数)和假设函数
h θ ( x ) = 1 1 + e − θ T x i f y = 1 , w e w a n t h θ ( x ) ≈ 1 , θ T x ≫ 0 i f y = 0 , w e w a n t h θ ( x ) ≈ 0 , θ T x ≪ 0 \begin{aligned} &\qquad \Large{h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}}\\\ \\ &if\ \ y=1,\ \ we\ \ want\ \ h_\theta(x)\approx1,\ \ \theta^Tx\gg 0\\ &if\ \ y=0,\ \ we\ \ want\ \ h_\theta(x)\approx0,\ \ \theta^Tx\ll 0\\ \end{aligned} hθ(x)=1+e−θTx1if y=1, we want hθ(x)≈1, θTx≫0if y=0, we want hθ(x)≈0, θTx≪0
- 观察逻辑回归的代价函数,会发现每个样本(x,y)都会为总的代价函数增加这样一项(下式)。因此对于总的代价函数,我们通常会对所有的训练样本从第 1 项到第 m 项进行求和。下面的式子就代表每个单独的训练样本对逻辑回归的总体目标函数所做的贡献,如果把整个假设函数的定义带入其中,得到的就是每个样本对总体函数的具体贡献。
Cost of example: − ( y l o g h θ ( x ) + ( 1 − y ) l o g ( 1 − h θ ( x ) ) ) = − ( y l o g 1 1 + e − θ T x + ( 1 − y ) l o g ( 1 − 1 1 + e − θ T x ) ) \begin{aligned} \textbf{Cost\ \ of\ \ example:}&-(y\ log\ h_\theta(x)+(1-y)\ log(1-h_\theta(x)))\\ =&-(y\ log\ \frac{1}{1+e^{-\theta^Tx}}+(1-y)\ log(1-\frac{1}{1+e^{-\theta^Tx}})) \end{aligned} Cost of example:=−(y log hθ(x)+(1−y) log(1−hθ(x)))−(y log 1+e−θTx1+(1−y) log(1−1+e−θTx1)) - 这里先不考虑各项求和,只单独讨论单独一项对逻辑回归总体代价函数所产生的影响。现在考虑两种情况,分别是 y = 1 和 y = 0 的情况:
- 假如 y = 1(上图左),这时的目标函数中只有第一项起作用。当 z 值很大时,函数对应的值会非常小,也就是说对代价函数的影响很小。为了得到支持向量机,对这一项进行简单的修改(下图左):找到 z = 1 的点,之后的代价函数都是平的,然后在左侧画一条和逻辑回归幅度相似的直线。新的代价函数的图像和逻辑回归代价函数的形状相似,只不过它是由两条线段构成的,不难想到他和逻辑回归的效果很相似,但是事实上这会使得支持向量机拥有计算上的优势,并且使之后的优化问题变得简单,更容易解决。
- 当 y = 0 时(上图右),只有第二项起作用,因此这个样本的代价函数(或者说它对总体代价的贡献)是由右侧的式子决定的。对于支持向量机,用同样的方法进行处理。对得到的新函数进行命名,左侧的函数叫做 Cost1(z) ,右边的叫 Cost0(z) ,下标指的是在代价函数中 y = 1 或者 y = 0,有了这些之后就可以开始构建支持向量机。
2. 优化目标
- 下面是在逻辑回归中使用的代价函数 J(θ),对于支持向量机,需要做的就是将划线的部分分别替换成 Cost1(θTx) 和 Cost0(θTx)
Logistic regression: min θ 1 m [ ∑ i = 1 m y ( i ) ( − l o g h θ ( x ( i ) ) ) ‾ + ( 1 − y ( i ) ) ( ( − l o g ( 1 − h θ ( x ( i ) ) ) ) ‾ ] + λ 2 m ∑ j = 1 n θ j 2 \begin{aligned} &\textbf{Logistic\ \ regression:}\\ &\qquad \min\limits_\theta\frac{1}{m}\left[\sum^m_{i=1}y^{(i)}\underline{\left(-log\ h_\theta(x^{(i)})\right)}+(1-y^{(i)})\underline{\left((-log(1-h_\theta(x^{(i)}))\right)}\right]+\frac{\lambda}{2m}\sum^n_{j=1}\theta^2_j \end{aligned} Logistic regression:θminm1[i=1∑my(i)(−log hθ(x(i)))+(1−y(i))((−log(1−hθ(x(i))))]+2mλj=1∑nθj2 - 因此对于支持向量机最小化问题就是:
SVM: min θ 1 m [ ∑ i = 1 m y ( i ) c o s t 1 ( θ T x ( i ) ) ‾ + ( 1 − y ( i ) ) c o s t 0 ( θ T x ( i ) ) ‾ ] + λ 2 m ∑ j = 1 n θ j 2 ⟹ min θ ∑ i = 1 m y ( i ) c o s t 1 ( θ T x ( i ) ) ‾ + ( 1 − y ( i ) ) c o s t 0 ( θ T x ( i ) ) ‾ + λ 2 ∑ j = 1 n θ j 2 ⟹ min θ C ∑ i = 1 m y ( i ) c o s t 1 ( θ T x ( i ) ) ‾ + ( 1 − y ( i ) ) c o s t 0 ( θ T x ( i ) ) ‾ + 1 2 ∑ j = 1 n θ j 2 \begin{aligned} &\textbf{SVM:}\\ &\qquad \min\limits_\theta\frac{1}{m}\left[\sum^m_{i=1}y^{(i)}\underline{cost_1(\theta^Tx^{(i)})}+(1-y^{(i)})\underline{cost_0(\theta^Tx^{(i)})}\right]+\frac{\lambda}{2m}\sum^n_{j=1}\theta^2_j\\ &\Longrightarrow\min\limits_\theta\sum^m_{i=1}y^{(i)}\underline{cost_1(\theta^Tx^{(i)})}+(1-y^{(i)})\underline{cost_0(\theta^Tx^{(i)})}+\frac{\lambda}{2}\sum^n_{j=1}\theta^2_j\\ &\Longrightarrow\min\limits_\theta C\sum^m_{i=1}y^{(i)}\underline{cost_1(\theta^Tx^{(i)})}+(1-y^{(i)})\underline{cost_0(\theta^Tx^{(i)})}+\frac{1}{2}\sum^n_{j=1}\theta^2_j\\ \end{aligned} SVM:θminm1[i=1∑my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+2mλj=1∑nθj2⟹θmini=1∑my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))+2λj=1∑nθj2⟹θminCi=1∑my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))+21j=1∑nθj2 - 在使用支持向量机和逻辑回归时,人们遵循的规律略有不同:
- 在支持向量机中没有前面的 1/m ,而这并不影响我们得到 θ 的最优值(前面添加不同的常数不影响最后得到相同的最优结果,例如,使 (x-2)2 和 5(x-2)2 最小的 x 的取值均为 2 )
- 另一个不同之处在于,逻辑回归是通过 λ 来平衡表达式的,支持向量机是通过 C 来平衡前后两项的。逻辑回归中表达式可以简化为 A + λB,通过增大 B 的权重来平衡式子; 支持向量机中 CA + B,通过减小 A 的权重来实现平衡,可以把 C 看成 1/λ ,但是实际上二者并没有数值上的直接联系,两个表达式并不相等。
- 最后,支持向量机与逻辑回归的不同是支持向量机并不会输出概率,相对的我们得到的是通过优化这个代价函数得到一个参数 θ,而支持向量机所做的是它进行了一个直接的预测,预测 y 是等于 1 还是 0。
h θ ( x ) = { 1 i f θ T ≥ 0 0 o t h e r w i s e \begin{aligned} h_\theta(x)=\begin{cases} 1\qquad if\quad \theta^T\ge 0\\ 0\qquad otherwise \end{cases} \end{aligned} hθ(x)={1ifθT≥00otherwise
二、大间隔的直观理解(Large Margin Intuition)
- 有时人们会把支持向量机叫做大间隔分类器(large margin classifier),本节会解释这种叫法的原因,也会给出直观的图向以便于理解 SVM 假设。
1. 安全因子
- 下面是 SVM 的代价函数以及图像:
min θ C ∑ i = 1 m [ y ( i ) c o s t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T x ( i ) ) ] + 1 2 ∑ j = 1 n θ j 2 \begin{aligned} &\min\limits_\theta\ C\sum^m_{i=1}\left[y^{(i)}{cost_1(\theta^Tx^{(i)})}+(1-y^{(i)}){cost_0(\theta^Tx^{(i)})}\right]+\frac{1}{2}\sum^n_{j=1}\theta^2_j\\ \end{aligned} θmin Ci=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21j=1∑nθj2
- 如何使代价函数变得更小:
i f y = 1 , w e w a n t θ T x ≥ 1 ( n o t j u s t ≥ 0 ) i f y = 0 , w e w a n t θ T x ≤ − 1 ( n o t j u s t < 0 ) \begin{aligned} &if\ \ y=1,\ we\ \ want\ \ \theta^Tx\ge1&(not\ \ just\ge 0)\\ &if\ \ y=0,\ we\ \ want\ \ \theta^Tx\le-1&(not\ \ just< 0) \end{aligned} if y=1, we want θTx≥1if y=0, we want θTx≤−1(not just≥0)(not just<0) - 如果有一个正样本(y=1),只需要使 θTx 大于等于 0 就能正确地进行分类(参考 Sigmoid 函数),但是支持向量机对此有更高的要求,需要比 0 大很多,负样本同理。这就相当于在 SVM 中构建了一个安全因子(safety factor) 或一个安全间距(safety margin factor)。
2. 决策边界
①问题转换
- 接下来看看在 SVM 中这个因子会导致什么结果,将常数 C 设成一个很大的值(比如 100000),那么当最小化优化目标的时候,我们希望可以找到一个值使第一项等于 0 ,下面通过一个例子来直观理解支持向量机学习得到的假设模型是什么样的。
- 当有一个标签 y = 1 的样本时,如果想要第一项为 0 ,根据图像的特点可以知道,需要保证θTx 大于等于 1。
Whenever y ( i ) = 1 : Whenever y ( i ) = 0 : θ T x ( i ) ≥ 1 θ T x ( i ) < − 1 \begin{aligned} \textbf{Whenever} \ \ y^{(i)}=1:\qquad\qquad &\textbf{Whenever} \ \ y^{(i)}=0:\\ \qquad\theta^Tx^{(i)}\ge1\qquad\qquad\qquad &\qquad\theta^Tx^{(i)}<-1\\ \end{aligned} Whenever y(i)=1:θTx(i)≥1Whenever y(i)=0:θTx(i)<−1
- 如果把优化问题看做是通过选择参数来使第一项等于 0,那么优化问题就变成了下面这样,将第一项最小化为 0 ,同时受到一些条件的限制:
min θ C × 0 + 1 2 ∑ j = 1 n θ j 2 s . t . θ T x ( i ) ≥ 1 i f y ( i ) = 1 θ T x ( i ) ≤ − 1 i f y ( i ) = 1 \begin{aligned} & \min\limits_\theta\ \ \sout{C\times0}+\frac{1}{2}\sum^n_{j=1}\theta^2_j\\\ \\ &s.t.\qquad\begin{aligned} &\theta^Tx^{(i)}\ge1\qquad &if\ \ y^{(i)}=1\\ &\theta^Tx^{(i)}\le-1\qquad &if\ \ y^{(i)}=1\\ \end{aligned} \end{aligned} θmin C×0+21j=1∑nθj2s.t.θTx(i)≥1θTx(i)≤−1if y(i)=1if y(i)=1
②决策边界(线性可分例子)
-
当解决上述的优化问题,最小化关于参数 θ 的函数时,会得到一个很有趣的决策边界。
-
观察下面的例子,数据集中既有正样本又有负样本,并且数据线性可分(linearly separable),即存在一条直线可以将数据(正负样本)完美地划分开。
-
蓝色直线可以将正负样本划分开,但是看起来效果并不是很好,不是很自然;紫线为 SVM 选择的边界,看起来更加稳健(robust),能更好地分开正样本和负样本,从数学上来说,就是这条紫色的决策边界有更大的距离,这个距离叫做间距(margin),紫色的决策边界和训练样本的最小距离要更大一些,相比之下,蓝线与训练样本的最小距离就非常的接近,在分离样本时它的表现会比紫线更差一些。
-
这个距离叫做支持向量机的间距,这使得支持向量机具有鲁棒性(robustness),因为它在分离数据时会尽量用大的间距去分离,因此支持向量机有时也被称为大间距分类器(large margin classifier)。这些就是上面列出的优化问题的结果,在下一节会直观地概述为什么正优化问题能得到这个大间距分类器。
3. 存在异常值的大间距分类器
-
现在的这个大间距分类器是在常数 C 被设的非常大的情况下得出的,给定一个数据集,可能会选择一条用大间距分隔正负样本的决策边界(下图左)。
-
实际上,SVM 要比这个大间距视图更加复杂,尤其是只是用大间距分类器的时候,这时学习算法对异常点会很敏感,可能会得到另外一条曲线(下图中)。显然在这个异常点的影响下,决策边界发生的改变可能不是一个好主意(C过大,代价函数第一项就会敏感,发生过拟合)。如果正则化常数 C 被设的非常大,就会发生这种改变,但是如果 C 设的比较小,那么结果仍然是黑线的结果(下图左)。
-
如果数据不是线性可分的(上图右),SVM 仍然可以进行正确的分类。只有当 C 很大时,才能够直观地理解大间距分类器的作用,同时也提醒我们 C 的作用类似于 1/λ ,当 1/λ 很大或是 λ 很小时,最终会得到紫色决策边界的结果(上图中)。
三、大间隔分类器的数学原理(The mathematics behind large margin classification)
- 主要内容: 大间隔分类器背后的数学原理,帮助我们更好地理解支持向量机的优化问题和大间距分类器之间的联系。
1. 向量内积(vector inner product)
- 首先复习一下向量内积的性质,假设有两个二维向量 u 和 v,现在要计算 u 的转置乘以 v (又叫向量 u 和 v 之间的内积)。u1 和 u2是向量 u 在两个坐标轴上的分量,那么现在就容易得出向量 u 的范数(norm)(用 ||u|| 表示,也可以说是长度),意思是向量 u 的欧几里何长度(euclidean length),根据毕达哥拉斯定理(Pythagoras theorem)(也就是勾股定理。。。)可以求出这个实数值,向量 v 同理。
- p 是向量 v 在向量 u 上的投影的长度,就可以得到计算向量内积的公式:p 乘以 u 的范数
u = [ u 1 u 2 ] v = [ v 1 v 2 ] ∣ ∣ u ∣ ∣ = l e n g t h o f v e c t o r v = u 1 2 + u 2 2 ∈ R p = l e n g t h o f p r o j e c t i o n o f v o n t o u u T v = p ⋅ ∣ ∣ u ∣ ∣ = v T u = [ u 1 u 2 ] [ v 1 v 2 ] = u 1 v 1 + u 2 v 2 \begin{aligned} u=&\left[\begin{matrix} u_1\\ u_2 \end{matrix}\right] \qquad v=\left[\begin{matrix} v_1\\ v_2 \end{matrix}\right]\\\ \\ ||u||=&\ \ length\ \ of\ \ vector\ \ v\\ =&\sqrt{u_1^2+u_2^2}\in\R\\\ \\ p=&\ \ length\ \ of\ \ projection\ \ of\ \ v\ \ onto\ \ u\\\ \\ u^Tv=&\ \ p\ ·\ ||u||\qquad\qquad=v^Tu\\ =&\ \left[\begin{matrix} u_1\ \ u_2 \end{matrix}\right]\left[\begin{matrix} v_1\\ v_2 \end{matrix}\right]\\ =&\ \ u_1v_1+u_2v_2 \end{aligned} u= ∣∣u∣∣== p= uTv===[u1u2]v=[v1v2] length of vector vu12+u22∈R length of projection of v onto u p ⋅ ∣∣u∣∣=vTu [u1 u2][v1v2] u1v1+u2v2
- 注意:p 为实数,可正可负,当两个向量的夹角大于 90° 时 p 在数值上为负。
2. 进一步理解优化目标函数
-
下面将用上面讲到的向量内积的性质来理解支持向量机中的优化目标函数。
-
为了让目标函数更容易分析,先对其进行简化,忽略截距也就是将 θ0 设为 0 ,并将特征数 x 设为 2。
min θ 1 2 ∑ j = 1 n θ j 2 = 1 2 ( θ 1 2 + θ 2 2 ) = 1 2 ( θ 1 2 + θ 2 2 ) 2 = 1 2 ∣ ∣ θ ∣ ∣ 2 s . t . θ T x ( i ) ≥ 1 i f y ( i ) = 1 θ T x ( i ) ≤ − 1 i f y ( i ) = 1 S i m p l i f i c a t i o n : θ 0 = 0 n = 2 ⟹ θ = [ θ 1 θ 2 ] \begin{aligned} & \min\limits_\theta \ \ \frac{1}{2}\sum^n_{j=1}\theta^2_j=\frac{1}{2}(\theta^2_1+\theta^2_2)=\frac{1}{2}\left(\red{\sqrt{\theta^2_1+\theta^2_2}}\right)^2=\frac{1}{2}\red{||\theta||}^2\\\ \\ &s.t.\qquad\begin{aligned} &\theta^Tx^{(i)}\ge1\qquad &if\ \ y^{(i)}=1\\ &\theta^Tx^{(i)}\le-1\qquad &if\ \ y^{(i)}=1\\ \end{aligned}\\\ \\ &Simplification:\ \ \theta_0=0\qquad n=2\\&\qquad\qquad \Longrightarrow \theta=\left[\begin{matrix} \theta_1\\ \theta_2 \end{matrix}\right] \end{aligned} θmin 21j=1∑nθj2=21(θ12+θ22)=21(θ12+θ22)2=21∣∣θ∣∣2s.t.θTx(i)≥1θTx(i)≤−1if y(i)=1if y(i)=1Simplification: θ0=0n=2⟹θ=[θ1θ2] -
现在考虑 θTx(i) 有什么作用,用上面提到过的概念进行如下的类比:
θ T x ( i ) ⇑ ⇑ u T v \begin{aligned} &\theta^T&x^{(i)}\\ &\Uparrow&\Uparrow\ \ \ \\ &u^T&v\ \ \ \end{aligned} θT⇑uTx(i)⇑ v -
考虑一个单一训练样本,看一下上面式子的示意图:
-
根据之前的内容,就可以得到:
θ T x ( i ) = p ( i ) ⋅ ∣ ∣ θ ∣ ∣ = θ 1 x 1 ( i ) + θ 2 x 2 ( i ) \begin{aligned} \theta^Tx^{(i)}&=p^{(i)}\ ·\ ||\theta||\\ &=\theta_1x^{(i)}_1+\theta_2x^{(i)}_2 \end{aligned} θTx(i)=p(i) ⋅ ∣∣θ∣∣=θ1x1(i)+θ2x2(i) -
将其代入优化目标函数后可以得到:
min θ 1 2 ∑ j = 1 n θ j 2 s . t . p ( i ) ⋅ ∣ ∣ θ ∣ ∣ ≥ 1 i f y ( i ) = 1 p ( i ) ⋅ ∣ ∣ θ ∣ ∣ ≤ − 1 i f y ( i ) = 1 w h e r e p ( i ) i s t h e p r o j e c t i o n o f x ( i ) o n t o t h e v e c t o r θ . S i m p l i f i c a t i o n : θ 0 = 0 \begin{aligned} & \min\limits_\theta \ \ \frac{1}{2}\sum^n_{j=1}\theta^2_j\\\ \\ &s.t.\qquad\begin{aligned} &p^{(i)}\ ·\ ||\theta||\ge1\qquad &if\ \ y^{(i)}=1\\ &p^{(i)}\ ·\ ||\theta||\le-1\qquad &if\ \ y^{(i)}=1\\ \end{aligned}\\\ \\ &where\ \ p^{(i)}\ \ is\ \ the\ \ projection\ \ of\ \ x^{(i)}\ \ onto\ \ the\ \ vector\ \ \theta.\\ &Simplification:\ \ \theta_0=0 \end{aligned} θmin 21j=1∑nθj2s.t.p(i) ⋅ ∣∣θ∣∣≥1p(i) ⋅ ∣∣θ∣∣≤−1if y(i)=1if y(i)=1where p(i) is the projection of x(i) onto the vector θ.Simplification: θ0=0 -
下面看一下支持向量机会选择什么样的决策边界:
-
一种选择是下面绿色直线代表的决策边界(下图左),这并不是一个好的选择,因为他的间距很小,那么支持向量机为什么不会选择它?
-
对于这种参数选择,可以看到参数向量 θ 事实上是与决策边界 90° 正交的,因此这个绿色的决策边界对应着一个参数向量 θ 。顺带提一句,θ0 等于 0 意味着决策边界必须通过原点 (0, 0)。
-
现在看一下这对于优化目标意味着什么,对于每一个样本,例如下图中的第一个样本 x(1) ,作出它到 θ 的投影,对应的长度为 p(1)。可以看到在这种情况下 p(1) 的值非常小,而我们要求 p(1)·||θ|| ≥ 1,也就意味着 ||θ|| (θ 的范数)要足够大(对于样本 x(2) 对应的 p 为负值,此时要求 p(1)·||θ|| ≤ -1,也要求 θ 的范数是一个足够大的值),但是优化目标函数要做的是试图找到一套参数 θ 来使它的范数足够小,因此这对选择参数向量 θ 而言不是一个好方向。
-
对于下面的一种情况,决策边界是一条纵向的直线,此时样本对应的 p 值相对于上一种情况变大了,相应的要求 θ 的范数就小了,这也就意味着通过选择下面的这一种决策边界(而不是上面的一种情况),支持向量机可以让参数 θ 的范数变小很多,因此支持向量机会选择这一假设。
-
上面的过程可以进行推广,即在 θ0 不为 0 的情况下(即不过原点),支持向量机仍然会在有上述优化目标函数、且 C 的值非常大的情况下找出正负样本之间的大间距分隔。
四、核函数(Kernels)
- 主要内容: 改造支持向量机算法来构造复杂的非线性分类器,主要的技巧就是一种称之为核(kernels) 的一种东西。
核函数一
1. 核函数的由来
- 有如下训练集,希望拟合一个非线性的判别边界来区分正负实例。
- 一种办法是构造一个复杂多项式特征的集合,于是得到了以下的假设 x:
h θ ( x ) = { 1 i f θ 0 + θ 1 x + . . . ≥ 0 0 o t h e r w i s e \begin{aligned} h_\theta(x)=\begin{cases} 1&if\ \ \theta_0+\theta_1x+...\ge0\\ 0&otherwise \end{cases} \end{aligned} hθ(x)={10if θ0+θ1x+...≥0otherwise - 为了说明另一种写法,先引入之后会用到的新的符号。把假设函数看成是用下面的式子计算的决策边界,即用 f 替换新的特征变量:
θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 . . . f 1 = x 1 f 2 = x 2 f 3 = x 1 x 2 f 4 = x 1 2 f 5 = x 2 2 . . . \begin{aligned} &\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3...\\ &f_1=x_1\qquad f_2=x_2\qquad f_3=x_1x_2\\ &f_4=x_1^2\qquad f_5=x_2^2\qquad ... \end{aligned} θ0+θ1f1+θ2f2+θ3f3...f1=x1f2=x2f3=x1x2f4=x12f5=x22... - 由于有许多的特征多项式是我们不需要的,并且会耗费计算量,那么是否有更好的特征的选择可以用来嵌入到假设函数中,有一个可以构造新特征 f1、f2、f3 的方法如下:
- 以定义 3 个新特征为例,对于 x1、x2,先只手动选取 3 个点,作为标记 1、标记 2、标记 3,对于给出的实例 x,用如下的方式定义新的特征:
G i v e n x : f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e x p ( − ∣ ∣ x − l ( 1 ) ∣ ∣ 2 2 σ 2 ) G i v e n x : f 2 = s i m i l a r i t y ( x , l ( 2 ) ) = e x p ( − ∣ ∣ x − l ( 2 ) ∣ ∣ 2 2 σ 2 ) G i v e n x : f 3 = s i m i l a r i t y ( x , l ( 3 ) ) = e x p ( . . . ) \begin{aligned} Given\ \ x:\qquad&f_1=similarity\ (x,l^{(1)})=exp\left(-\frac{||x-l^{(1)}||^2}{2\sigma^2} \right)\\ Given\ \ x:\qquad&f_2=similarity\ (x,l^{(2)})=exp\left(-\frac{||x-l^{(2)}||^2}{2\sigma^2} \right)\\ Given\ \ x:\qquad&f_3=similarity\ (x,l^{(3)})=exp\left(...\right)\\ \end{aligned} Given x:Given x:Given x:f1=similarity (x,l(1))=exp(−2σ2∣∣x−l(1)∣∣2)f2=similarity (x,l(2))=exp(−2σ2∣∣x−l(2)∣∣2)f3=similarity (x,l(3))=exp(...) - 将第一个特征 f1 定义为一种相似度的度量,即度量训练样本 x 与第一个标记的相似度,公式中在 e 的指数幂部分,分子部分用到了上一节的内容,其代表向量 x-l(1) 的长度的平方(就是点 x 与标记点 l(1) 的欧式距离的平方)。
- 相似函数(similarity function) 用数学术语来说就是核函数(kernel function),上面公式中用到的具体的核函数实际上是高斯核函数(Gaussian kernel)。一般不按照上面的写法,而是按照下面的写法来表示核函数:
s i m i l a r i t y ( x , l ( i ) ) ⟹ k ( x , l ( i ) ) similarity\ (x,l^{(i)})\Longrightarrow k\ (x,l^{(i)}) similarity (x,l(i))⟹k (x,l(i)) - 下面看一下核函数做了什么,以及为什么这些相似函数的表达式是有意义的。
2. 核函数的意义
①通过用 x 和标记之间的相似度计算核函数
- 之前选中的第一个标记点 l(1) 与 x 之间相似度的表示如下,表达式中的分子项也可以写作 J 等于 1 到 n 相对应的距离的求和,暂时先忽略截距项 x0 (总是等于 1):
f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e x p ( − ∣ ∣ x − l ( 1 ) ∣ ∣ 2 2 σ 2 ) = e x p ( − ∑ j = 1 n ( x − l ( 1 ) ) 2 2 σ 2 ) \begin{aligned} f_1=similarity\ (x,l^{(1)})=exp\left(-\frac{||x-l^{(1)}||^2}{2\sigma^2} \right)=exp\left(-\frac{\sum^{n}_{j=1}(x-l^{(1)})^2}{2\sigma^2} \right) \end{aligned} f1=similarity (x,l(1))=exp(−2σ2∣∣x−l(1)∣∣2)=exp(−2σ2∑j=1n(x−l(1))2)
②函数的工作内容(特征的定义)
-
对于不同的情况 f1 的取值情况如下:
If x ≈ l ( 1 ) : f 1 ≈ e x p ( − 0 2 2 σ 2 ) ≈ 1 If x i s f a r f r o m l ( 1 ) : f 1 = e x p ( − ( l a r g e n u m b e r ) 2 2 σ 2 ) ≈ 0 \begin{aligned} &\textbf{If}\ \ x\approx l^{(1)}:\\ &\qquad f_1\approx exp\left(-\frac{\red{0}^2}{2\sigma^2}\right)\approx\large{1}\\ &\textbf{If}\ \ x\ \ is\ \ far\ \ from\ \ l^{(1)}:\\ &\qquad f_1= exp\left(-\frac{(\red{large\ \ number})^2}{2\sigma^2}\right)\approx\large{0} \end{aligned} If x≈l(1):f1≈exp(−2σ202)≈1If x is far from l(1):f1=exp(−2σ2(large number)2)≈0 -
在上面的部分中绘制了三个标记点,每一个标记都会定义一个新的特征。也就是说,给定一个训练样本 x ,基于之前的三个标记可以计算三个新的特征。首先先看一下这个指数函数(相似度函数)以及其图像,来更好地理解他们:
-
假设有两个特征变量 x1 和 x2,假设第一个标记 l(1) 位于 [3; 5]、 σ2 = 1,对特征画图(上图左上),曲面的高度代表 f1 的值,横轴对应着特定样本的位置,等高线图(上图左下)以 x1 为水平轴 x2 为竖直轴。可以看出当 x 正好等于 [3; 5] 时,f1 就等于 1,正好位于最大值上;当 x 向周围移动时,离刚才那个点越远,f1 就越接近 0。因此,特征 f1 衡量了 x 到第一个标记点有多近,其数值位于 0 和 1 之间。
-
下面看一下改变 σ2 的值会产生多大影响。 σ2 是高斯核函数的参数,当改变它会得到略微不同的结果。假设 σ2 等于 0.5 (上图中上),发现核函数还是相似的,只是凸起的宽度变窄了,等高线图(上图中下)也收缩了一些,当 x 从 [3; 5] 开始向周围移动时,特征 f1 下降到 0的速度会变得很快。
-
与此相反地,当 σ2 的值增大,比如等于 3 时(上图右上),x 从 [3; 5] 开始向周围移动的时候,特征变量的值减小的速度会变得比较慢。
③预测函数(定义标记点和核函数)
-
给定一个训练样本 x,计算出三个特征变量,如果对应的假设函数值大于等于 0 ,那么预测函数的预测值将等于 1。
Predict “ 1 ” when : θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 ≥ 0 \begin{aligned} &\textbf{Predict}\ \ “1”\ \ \textbf{when}:\\ &\qquad \theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3\ge0 \end{aligned} Predict “1” when:θ0+θ1f1+θ2f2+θ3f3≥0
-
假设我们已经找到了一个学习算法,并且已经得到了这些参数的值:
θ 0 = − 0.5 θ 1 = 1 θ 2 = 1 θ 3 = 0 \theta_0=-0.5\qquad\theta_1=1\qquad\theta_2=1\qquad\theta_3=0 θ0=−0.5θ1=1θ2=1θ3=0 -
如果有一个训练实例,其坐标为上图红色的点。现在想要知道预测函数的结果,因为训练实例 x 接近于 l(1) 就会有 f1 将会接近于 1,而离 l(2)、 l(3) 较远,就会有 f2、f3 接近于 0,代入到上面的公式中可以得到:
θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 = θ 0 + θ 1 × 1 + θ 2 × 0 + θ 3 × 0 = − 0.5 + 1 = 0.5 ≥ 0 \begin{aligned} &\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3\\ =&\theta_0+\theta_1\times 1+\theta_2\times0+\theta_3\times0\\ =&-0.5+1=0.5\ge0 \end{aligned} ==θ0+θ1f1+θ2f2+θ3f3θ0+θ1×1+θ2×0+θ3×0−0.5+1=0.5≥0 -
得到的值大于等于 0,因此预测的 y 值为 1。
-
再来看另一个绿色的点,近似计算后发现 f1、f2、f3 均接近于 0 ,最后代入计算得到的值为 -0.5(小于 0),因此预测的 y 值为 0。
-
对于大量的样本,可以发现接近 l(1)、 l(2) 的点的预测值为 1,远离这些的点对应的预测值为 0,从而我们就可以得出这个预测函数的判别边界(上图),在橙色色决策边界内部预测的 y 值为 1,外部预测的 y 值为 0。
-
下一部分将会介绍如何得到这些标记点,如何选择这些标记点以及其他的相似度方程是什么样的(能否替代高斯核函数)。
核函数二
- 主要内容: 补充一些缺失的细节,并简单的介绍一下如何在实际中应用这些思想,例如怎么处理支持向量机中的偏差方差折中(bias variance trade-off)。
1. 如何选取标记点
- 直接将训练样本作为标记点:
2. 具体实现过程
- 具体地列出整个过程的大纲:
Given ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) choose l ( 1 ) = x ( 1 ) , l ( 2 ) = x ( 2 ) , . . . , l ( m ) = x ( m ) Given example x : f 1 = s i m i l a r i t y ( x , l ( 1 ) ) f 2 = s i m i l a r i t y ( x , l ( 2 ) ) . . . f = [ f 0 f 1 f 2 . . . f m ] f 0 = 1 For training example ( x ( i ) , y ( i ) ) : x ( i ) → f 1 ( i ) = s i m ( x ( i ) , l ( i ) ) f 2 ( i ) = s i m ( x ( i ) , l ( i ) ) . . . f i ( i ) = s i m ( x ( i ) , l ( i ) ) = e x p ( e x p ( − 0 2 σ 2 ) = 1 . . . f m ( i ) = s i m ( x ( i ) , l ( i ) ) x ( i ) ∈ R n + 1 ( o r R n ) f ( i ) = [ f 0 ( i ) f 1 ( i ) f 2 ( i ) . . . f m ( i ) ] f 0 ( i ) = 1 Hypothesis: Given x , compute features f ∈ R ( m + 1 ) Predict y = 1 if θ T f ≥ 0 Traning: min θ C ∑ i = 1 m [ y ( i ) c o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T f ( i ) ) ] + 1 2 ∑ j = 1 m θ j 2 \begin{aligned} &\textbf{Given}\ \ (x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...\ ,(x^{(m)},y^{(m)})\\ &\textbf{choose}\ \ l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},...\ ,l^{(m)}=x^{(m)}\\ &\textbf{Given\ \ example}\ \ x:\\ &\qquad f_1=similarity(x,l^{(1)})\\ &\qquad f_2=similarity(x,l^{(2)})\\ &\qquad ...\\ &\qquad f=\left[\begin{matrix} f_0\\ f_1\\ f_2\\ ...\\ f_m \end{matrix}\right]\qquad f_0 = 1\\ &\textbf{For\ \ training\ \ example}\ \ (x^{(i)},y^{(i)}):\\ &\qquad x^{(i)}\rightarrow \begin{aligned} &f_1^{(i)}=sim(x^{(i)},l^{(i)})\\ &f_2^{(i)}=sim(x^{(i)},l^{(i)})\\ &...\\ &\red{f_i^{(i)}=sim(x^{(i)},l^{(i)})=exp(exp\left(-\frac{0}{2\sigma^2}\right)=1}\\ &...\\ &f_m^{(i)}=sim(x^{(i)},l^{(i)})\\ \end{aligned}\\ &\qquad x^{(i)}\in\R^{n+1}\ (or\ \ \R^n)\\ &\qquad f^{(i)}=\left[\begin{matrix} f_0^{(i)}\\ f_1^{(i)}\\ f_2^{(i)}\\ ...\\ f_m^{(i)} \end{matrix}\right]\qquad f_0^{(i)}=1\\ &\textbf{Hypothesis:\ \ Given}\ \ x\ \ ,\textbf{compute\ \ features}\ \ f\in\R^{(m+1)}\\ &\qquad\textbf{Predict}\ \ y=1 \ \ \textbf{if}\ \ \theta^Tf\ge0\\ &\textbf{Traning:}\\ &\qquad\min\limits_\theta\ C\sum^m_{i=1}\left[y^{(i)}{cost_1(\red{\theta^Tf^{(i)}})}+(1-y^{(i)}){cost_0(\red{\theta^Tf^{(i)}})}\right]+\frac{1}{2}\sum^\red{m}_{j=1}\theta^2_j\\ \end{aligned} Given (x(1),y(1)),(x(2),y(2)),... ,(x(m),y(m))choose l(1)=x(1),l(2)=x(2),... ,l(m)=x(m)Given example x:f1=similarity(x,l(1))f2=similarity(x,l(2))...f=⎣⎢⎢⎢⎢⎡f0f1f2...fm⎦⎥⎥⎥⎥⎤f0=1For training example (x(i),y(i)):x(i)→f1(i)=sim(x(i),l(i))f2(i)=sim(x(i),l(i))...fi(i)=sim(x(i),l(i))=exp(exp(−2σ20)=1...fm(i)=sim(x(i),l(i))x(i)∈Rn+1 (or Rn)f(i)=⎣⎢⎢⎢⎢⎢⎡f0(i)f1(i)f2(i)...fm(i)⎦⎥⎥⎥⎥⎥⎤f0(i)=1Hypothesis: Given x ,compute features f∈R(m+1)Predict y=1 if θTf≥0Traning:θmin Ci=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21j=1∑mθj2
- 给定 m 个样本
- 选取与 m 个样本完全一样的位置作为标记点
- 对于给定的样本 x (x 可以属于训练集或交叉验证集或测试集),计算这些特征(f1、f2 等),然后把它们组成特征向量(可以添加一个额外的特征 f0 恒为 1,和之前的 x0 一样为截距)
- 如果有一个训练样本 (x(i), y(i)),给定 x(i) 将其映射到 f1(i),一直到 fm(i),其中存在一个 x(i) 与自身的相似度,代入高斯核函数得到的就是 1(样本中有一个特征值为 1),然后再将 f 合并为一个特征向量。
- 当给定核函数和相似度函数后使用简单的支持向量机:
对于给定的样本 x ,先计算特征 f(得到了 m 个标记点),随后进行预测(显然 θ 是 m + 1 维向量,标记点的个数等于训练点的个数,m 为训练集大小)。 - 当解决最小化问题时就已经最小化了参数 θ ,需要注意上面表达式中的 x 已经被替换成了 f,对于用于正则化的第二项,由于拥有的有效的特征数(即 f 的维数)为 m ,所以求和项的特征数 n 实际上就等于 m(f 为 n + 1 维,第一项 f0 不参与正则化,剩余 m 项)。
实际上,在具体的应用中为了提高效率,我们会对优化目标在细节上进行一些调整,其原理如下:
∑ j θ j 2 = θ T θ θ = [ θ 1 . . . θ m ] ( i g n o r e θ 0 ) ∑ j θ j 2 = θ T M θ \begin{aligned} &\sum_j\theta_j^2=\theta^T\theta\qquad\theta=\left[\begin{matrix} \theta_1\\ ...\\ \theta_m\\ \end{matrix}\right]\quad(ignore\ \ \theta_0)\\ &\sum_j\theta_j^2=\theta^T\red{M}\theta \end{aligned} j∑θj2=θTθθ=⎣⎡θ1...θm⎦⎤(ignore θ0)j∑θj2=θTMθ
- 在忽略 θ0 的情况下,求和项可以进行重写,大多数的 SVM 在实现的时候会将重写项替换成 θT 乘以某个矩阵(依赖于采用的核函数)再乘以 θ,这其实是另一种略有区别的距离度量方法,用略有变化的距离度量来取代 θ 的范数(模)的平方,这意味着最小化了一种类似的度量。这个细节使得 SVM 能更有效率地运行,使它可以应用更大的训练集。
- 除此之外,我们不会将核函数的方法应用于其他算法上(例如逻辑回归),事实上,确实可以将核函数这个想法用于定义特征向量、将标记点之类的技术应用于逻辑回归算法,但是用于支持向量机的计算技巧却不能较好地推广到其0他算法(例如逻辑回归)上,所以核函数在用于逻辑回归时会变得非常慢(还有上面专门为使用核函数的支持向量机开发的高级优化技巧在逻辑回归中也用不上)。
- 一些具体的函数原理实现了解即可,建议直接使用人们开发成熟的软件包,而不是自己手写代码。
3. SVM 中的参数的选择
① C
- 参数 C 的取值大小对应的问题:
C ( = 1 λ ) . Large C: L o w e r b i a s , h i g h v a r i a n c e . Small C: H i g h e r b i a s , l o w v a r i a n c e . \begin{aligned} C(=\frac{1}{\lambda}).\qquad &\textbf{Large\ \ C:}\ \ Lower\ \ bias,\ \ high\ \ variance.\\ &\textbf{Small\ \ C:}\ \ Higher\ \ bias,\ \ low\ \ variance.\\ \end{aligned} C(=λ1).Large C: Lower bias, high variance.Small C: Higher bias, low variance. - C 值过大为高方差,更易过拟合;
- C 值过小为高偏差,更易欠拟合。
② σ²
-
另一个要选择的参数是高斯核函数中的 σ2:
σ 2 Large σ 2 : F e a t u r e s f i v a r y m o r e s m o o t h l y . H i g h e r b i a s , l o w e r v a r i a n c e . Small σ 2 : F e a t u r e s f i v a r y l e s s s m o o t h l y . L o w e r b i a s , h i g h e r v a r i a n c e . \begin{aligned} \sigma^2\qquad&\textbf{Large}\ \ \sigma^2\ \ \textbf{:}\ \ Features\ \ f_i\ \ vary\ \ more\ \ smoothly.\\ &\quad \ \ Higher\ \ bias,\ \ lower\ \ variance.\\ &\textbf{Small}\ \ \sigma^2\ \ \textbf{:}\ \ Features\ \ f_i\ \ vary\ \ less\ \ smoothly.\\ &\quad\ \ Lower\ \ bias,\ \ higher\ \ variance. \end{aligned} σ2Large σ2 : Features fi vary more smoothly. Higher bias, lower variance.Small σ2 : Features fi vary less smoothly. Lower bias, higher variance.
-
σ2 偏大,高斯核函数倾向于变得相对平滑,给模型带来高偏差和低方差,倾向于得到一个随着 x 的输入变得缓慢的模型;
-
σ2 偏小,高斯核函数(相似度函数)会变化得很剧烈,图像不平滑,有较大的斜率和导数,使模型具有低偏差和高方差。
五、使用SVM(Using an SVM)
- 主要内容: 为了运用或运用 SVM 实际上需要的一些东西。
1. 核函数的选择
①线性核函数
U s e S V M s o f t w a r e p a c k a g e ( e . g . l i b l i n e a r , l i b s v m , … ) t o s o l v e f o r p a r a m e t e r s θ . N e e d t o s p e c i f y : C h o i c e o f p a r a m e t e r C . C h o i c e o f k e r n e l ( s i m i l a r i t y f u n c t i o n ) : E . g . N o k e r n e l ( “ l i n e a r k e r n e l ” ) P r e d i c t “ y = 1 ” i f θ T x ≥ 0 G a u s s i a n k e r n e l : f i = e x p ( − ∣ ∣ x − l ( 1 ) ∣ ∣ 2 2 σ 2 ) , w h e r e l ( i ) = x ( i ) \begin{aligned} &Use\ \ SVM\ \ software\ \ package\ \ (e.g.\ \ liblinear,\ \ libsvm,\ \ …)\ \ to\ \ solve\ \ for\\ ¶meters\ \ \theta.\\\ \\ &Need\ \ to\ \ specify:\\ &\qquad Choice\ \ of\ \ parameter\ \ C.\\ &\qquad Choice\ \ of\ \ kernel\ \ (similarity\ \ function):\\\ \\ &E.g.\\&\qquad No\ \ kernel\ \ (“linear\ \ kernel”)\\ &\qquad\qquad Predict\ \ “y=1”\ \ if\ \ \theta^Tx\ge0\\ &\qquad Gaussian\ \ kernel:\\ &\qquad f_i=exp\left(-\frac{||x-l^{(1)}||^2}{2\sigma^2} \right),\quad where\ \ l^{(i)}=x^{(i)} \end{aligned} Use SVM software package (e.g. liblinear, libsvm, …) to solve forparameters θ.Need to specify:Choice of parameter C.Choice of kernel (similarity function):E.g.No kernel (“linear kernel”)Predict “y=1” if θTx≥0Gaussian kernel:fi=exp(−2σ2∣∣x−l(1)∣∣2),where l(i)=x(i)
-
支持向量机提出了一个特别优化(particular optimization )的问题,建议使用优化好的软件包(而不是手写 SVM 的优化软件),例如 liblinear 和 libsvm。
-
除此之外我们需要选择参数 C 以及内核参数或者想要使用的相似函数,一种选择是不需要任何内核参数,没有内核参数的理念也叫做线性核函数(linear kernel)。当特征 n 很大且训练样本数 m 很小时,可能只想拟合一个线性的判别边界,而不去拟合一个非常复杂的非线性函数,因为没有足够的数据。假如在一个非常高维的特征空间中尝试拟合非常复杂的函数,如果训练集样本很小的话可能会过拟合。
②高斯核函数
- 对于内核函数的第二个选择是构建一个高斯核函数,在这个选择的基础上还需要选择一个参数 σ2 。在下面的情况中需要选择高斯核函数:如果忽略特征 x 属于 n 维向量,且 n 值很小 m 值很大,如果有比如一个二维的训练集,且样本数特别多,需要拟合非常复杂的非线性决策边界。
- 如果选择高斯核函数,接下来要做的就是
- 根据使用的支持向量机软件包,可能需要我们实现一个核函数或者实现相似函数,如果用 Octave 或 Matlab 来实现支持向量机的话,就需要提供一个函数来计算函数的特征值,每一个 i 都要计算对应的 fi ,把一个训练样本或者是测试样本作为输入,计算出一个实数。一些 SVM 包需要用户提供一个核函数,能够输入 x1、x2 ,并且返回一个实数,从这里开始它将自动地生成所有的特征变量,自动利用特征变量 x 同时映射到 f ,从这里开始训练支持向量机。
f u n c t i o n f = k e r n e l ( x 1 , x 2 ) f i = e x p ( − ∣ ∣ x 1 − x 2 ∣ ∣ 2 2 σ 2 ) r e t u r n \begin{aligned} &\blue{function\ \ f = kernel(x1,x2)}\\ &\qquad f_i=exp\left(-\frac{||\blue{x1}-\blue{x2}||^2}{2\sigma^2} \right)\\ &\blue{return} \end{aligned} function f=kernel(x1,x2)fi=exp(−2σ2∣∣x1−x2∣∣2)return - 如果有大小不一样的特征变量,需要在使用高斯核函数之前进行特征缩放,避免发生不同特征变量权值不成比例的情况,具体来说就是在计算分子的过程中不同项对表达式最终值的影响程度不同:
∣ ∣ x − l ∣ ∣ 2 = ∣ ∣ v ∣ ∣ 2 v = x − l x ∈ R n + 1 = v 1 2 + v 2 2 + . . . + v n 2 = ( x 1 − l 1 ) 2 ⏟ 1000 f e e t 2 + ( x 2 − l 2 ) 2 ⏟ 1 − 5 b e d r o o m s + . . . + ( x n − l n ) 2 \begin{aligned} ||x-l||^2&=||v||^2\qquad v=x-l\qquad x\in\R^{n+1}\\ &=v^2_1+v^2_2+...+v^2_n\\ &=\underbrace{(x_1-l_1)^2}_{1000\ feet^2}+\underbrace{(x_2-l_2)^2}_{1-5\ bedrooms}+...+(x_n-l_n)^2 \end{aligned} ∣∣x−l∣∣2=∣∣v∣∣2v=x−lx∈Rn+1=v12+v22+...+vn2=1000 feet2 (x1−l1)2+1−5 bedrooms (x2−l2)2+...+(xn−ln)2
③其他核函数
- 目前有的最常用的两个核函数分别是线性核函数和高斯核函数,但是值得注意的是不是所有提出来的相似函数都是有效的核函数,高斯核函数和线性核函数以及有时会用到的其他核函数都需要满足一个技术条件,叫做默塞尔定理(Mercer’s Theorem),其原因在于支持向量机算法机或者 SVM 的实现函数有许多熟练的数值优化技巧。为了有效地求解参数 θ ,在最初的设想里,这些决策都用以将我们的注意力仅仅限制在可以满足默塞尔定理的核函数上。这个定理所做的是确保所有的 SVM 软件包能够用大类的优化方法(the large class of optimizations) 并从而迅速地得到参数 θ 。
- 除了线性核函数和高斯核函数,下面的几个核函数也满足默塞尔定理:
- 多项式核函数(polynomial kernel):
- x 和 l 之间的相似值的定义有很多的选择,下面就是一种度量方式,当 x 和 l 非常接近时,这个内积就会非常大:
k ( x , l ) = ( x T l ) 2 \begin{aligned} k(x,l)=(x^Tl)^2 \end{aligned} k(x,l)=(xTl)2 - 除此之外,多项式核函数还有其他的例子:
( x T l ) 3 , ( x T l + 1 ) 3 , ( x T l + 5 ) 4 \begin{aligned} (x^Tl)^3,\quad (x^Tl+1)^3,\quad (x^Tl+5)^4 \end{aligned} (xTl)3,(xTl+1)3,(xTl+5)4 - 一般地,多项式核函数有两个参数,一个是加上的数字(可以是 0),另一个是多项式的次数,下面是其一般形式:
( x T l + c o n s t a n t ) d e g r e e \begin{aligned} (x^Tl+constant)^{degree} \end{aligned} (xTl+constant)degree - 多项式核函数的效果通常情况下都比较差,与高斯核函数相比使用的不多(但是通常会碰到)。通常它用在数据 x 和 l 都是严格的非负数的情况,可以保证内积值永远不是负数。
- x 和 l 之间的相似值的定义有很多的选择,下面就是一种度量方式,当 x 和 l 非常接近时,这个内积就会非常大:
- 更加难懂的(More esoteric)核函数:
- 字符串核函数(String kernel): 输入数据是文本字符串或者其他类型的字符串时会用到(文本分类)。
- 卡方核函数(chi-square kernel)
- 直方相交核函数(histogram intersection kernel)
2. 多元分类
- 假如有 4 个类别(或者更一般地 K 个类别),输出在多个类别间恰当的判定边界。
- 很多 SVM 包已经内置了多分类的函数,如果使用一个类似这样的模式(函数),应该会工作得很好。
M a n y S V M p a c k a g e s a l r e a d y h a v e b u i l t – i n m u l t i – c l a s s c l a s s i f i c a t i o n f u n c t i o n a l i t y \begin{aligned} Many\ \ SVM\ \ packages\ \ already\ \ have\ \ built\text{\textendash}in\ \ multi\text{\textendash}class\ \ classification\ \ functionality \end{aligned} Many SVM packages already have built–in multi–class classification functionality - 除此之外,一个做多分类的方法是使用 one-vs-all 方法,之前在讲逻辑回归的时候讨论过。所以要做的就是训练 kSVM ,如果有 k 个类别用以将每个类别从其他的类别中区分开来,这个会给出 k 参数的向量,最后选取最大的 θTx 来预测类别 i。
3. 逻辑回归与 SVM 的比较
- 不同情况下选择使用逻辑回归和 SVM 中的一个:
- n 代表特征数, m 代表训练样本数
- n 远大于 m(n:10,000、m:10-1000),当 n 的值比训练样本的个数多时,有大量的特征。比如文本分类问题特征矩阵的维度可能是 10,000,但是训练集的个数是 10 到 1000 个;或者垃圾邮件分类问题,垃圾邮件有 10,000 个特征与 10,000 个单词对应的特征向量,可能只有 10 个样本或者多达 1000 个训练样本。这种情况下通常使用逻辑回归,或者不带核函数的 SVM ,使用线性核函数,因为这种情况下线性函数可能会工作得很好,并且我们也没有足够的数据来拟合复杂的非线性函数。
- n 较小,m 大小适中(n:1-1000、m:10-10,000),使用高斯核函数的 SVM 工作效果会很好。比如之前的讲过的一个二维训练集有很多的训练样本,高斯核函数会很好地将正负样本区分开。
- n 很小,m 很大(n:1-1000、m:50,000+),这种情况下高斯核函数的 SVM 运算速度会很慢,应当尝试手动地创建拥有更多的特征变量,然后用逻辑回归或者不带核函数的 SVM。
- 对于神经网络而言,设计良好的神经网络可能非常有效,但是有时也会因为其训练起来可能会特别慢而不使用它。如果有一个非常好的 SVM 实现包,可能会运行地比神经网络快得多,顺带一提,SVM 具有的优化问题是一种凸优化问题,好的 SVM 优化软件包总是会找到全局最小值或者接近它的值。
总结
- 本篇文章主要介绍了支持向量机(以下简写为 SVM)的相关内容,首先在逻辑回归的代价函数的基础上进行修改,引出了 SVM 的优化目标。
- 随后解释了大间距分类器这种叫法的具体含义,即 SVM 会选择尽量把正负样本以最大间距分开的假设模型,这使得支持向量机具有鲁棒性,以及其数学原理,使用了向量内积的相关知识,保证样本到与决策边界垂直的 θ 上的投影尽量大。
- 接着介绍了核函数这部分的概念以及我们如何在支持向量机中使用它们,通过标记点和相似性函数(核函数)来定义新的特征变量,从而训练复杂的非线性边界。
- 在构造判别边界时需要注意参数 C 的选择,如果使用高斯核函数,还需要选择合适大小的 σ²。
- 除此之外,在使用 SVM 的过程中,需要进行核函数的选择,主要用线性核函数和高斯核函数,有时也可以使用其他核函数,一些难懂的核函数可以用来测量不同目标间的相似度,需要注意这些核函数都需要满足默塞尔定理。
- 在多元分类问题中,可以使用优化好的 SVM 包,也可以使用 one-vs-all 方法来解决问题。
- 最后介绍了不同的特征数和样本数的情况下,应该选择使用哪一种对应的方法。