回顾对数几率
- 在我上一篇文章:https://blog.csdn.net/qq_42902997/article/details/124255802?spm=1001.2014.3001.5501 中讲了逻辑回归的原理和优化目标:
- 在每一次梯度下降执行的 step 中,我们都需要对每一个样本进行求算,对于样本 x i x_i xi,其标签为 y i y_i yi,他需要求算的参数的向量可以表示为 θ T \theta^T θT(这其中包含了 b b b)
- 我们可以认为 θ T ⋅ x i \theta^T\cdot x_i θT⋅xi 经过 sigmoid 函数处理之后的结果是 y i ^ \hat{y_i} yi^ 即, y i ^ = σ ( θ T ⋅ x i ) \hat{y_i}=\sigma(\theta^T\cdot x_i) yi^=σ(θT⋅xi)
- 这样的话,我们对于每一个样本的损失可以表示为: L ( y i , y i ^ ) L(y_i, \hat{y_i}) L(yi,yi^) 又因为 y i y_i yi 的取值有两种不同的情况,而我们使用一个式子来统一表示这两种不同情况下的优化目标 L ( y i , y i ^ ) = − y i ^ y i ( 1 − y i ^ ) 1 − y i L(y_i, \hat{y_i})=-\hat{y_i}^{y_i}(1-\hat{y_i})^{1-y_i} L(yi,yi^)=−yi^yi(1−yi^)1−yi,再经过 l o g log log 变换后得到对于一个样本最终的损失函数: L ( y i , y i ^ ) = − y i l o g ( y i ^ ) + ( 1 − y i ) l o g ( 1 − y i ^ ) ( 1 ) L(y_i, \hat{y_i})=-{y_i}log(\hat{y_i})+({1-y_i})log(1-\hat{y_i})~~~~~~~~~~(1) L(yi,yi^)=−yilog(yi^)+(1−yi)log(1−yi^) (1)
- 由此,扩展到整个数据集中的 m m m 个样本的总的代价函数可以写成: − 1 m Σ i = 1 m y i l o g ( y i ^ ) + ( 1 − y i ) l o g ( 1 − y i ^ ) + λ 2 m Σ j = 1 n θ j 2 ( 2 ) -\frac{1}{m}\Sigma_{i=1}^m{y_i}log(\hat{y_i})+({1-y_i})log(1-\hat{y_i})+\frac{\lambda}{2m}\Sigma_{j=1}^n\theta_j^2~~~~~~~~~~(2) −m1Σi=1myilog(yi^)+(1−yi)log(1−yi^)+2mλΣj=1nθj2 (2)
公式中的第二个部分是正则化部分
- 对数几率的核心是引入了一个 sigmoid 非线性函数,从而可以让线性回归的任务进化成分类任务,sigmoid 函数如下:
- 这里的符号 θ T x \theta^Tx θTx 表示的和上面的意义相同,这里的 z = θ T x z=\theta^Tx z=θTx其实等同于上文中的 y i ^ \hat{y_i} yi^
- 当这个 x x x 对应的真实标签为 y = 1 y=1 y=1 的时候(正向样本),我们希望 h θ ( x ) h_\theta(x) hθ(x) 的值最好能够无限逼近 1 1 1,换言之,我们希望被 sigmoid 映射之前的 θ T x \theta^Tx θTx 越大越好,即 θ T x > > 0 \theta^Tx>>0 θTx>>0
- 而当 y = 0 y=0 y=0 的时候(负向样本),我们又希望 h θ ( x ) h_\theta(x) hθ(x) 的值最好能够无限逼近 0 0 0, 即 θ T x < < 0 \theta^Tx<<0 θTx<<0
逻辑回归代价函数的另一视角
- 再看公式(1)给出的代价函数:
L ( y i , y i ^ ) = − y i l o g ( y i ^ ) + ( 1 − y i ) l o g ( 1 − y i ^ ) L(y_i, \hat{y_i})=-{y_i}log(\hat{y_i})+({1-y_i})log(1-\hat{y_i}) L(yi,yi^)=−yilog(yi^)+(1−yi)log(1−yi^)
- 如果将式子写的更完整一些,带入 h θ ( x ) h_\theta(x) hθ(x) 的定义,并且去掉下标 i i i (因为我们暂时不研究整个数据集中的所有样本,我们只研究一个样本的情况,暂时不通过 i i i 来区分样本)我们可以得到下面的式子:
L ( y , y ^ ) = − y l o g ( 1 1 + e − θ T x ) + ( 1 − y ) l o g ( 1 − 1 1 + e − θ T x ) = y ( − l o g ( 1 1 + e − θ T x ) ) + ( 1 − y ) l o g ( 1 − 1 1 + e − θ T x ) ( 3 ) L(y, \hat{y})=-{y}log(\frac{1}{1+e^{-\theta^Tx}})+({1-y})log(1-\frac{1}{1+e^{-\theta^Tx}}) \\= {y}(-log(\frac{1}{1+e^{-\theta^Tx}}))+({1-y})log(1-\frac{1}{1+e^{-\theta^Tx}}) ~~~~~~~~~~(3) L(y,y^)=−ylog(1+e−θTx1)+(1−y)log(1−1+e−θTx1)=y(−log(1+e−θTx1))+(1−y)log(1−1+e−θTx1) (3)
在这个公式(3)中让我们再单独看一下 y = 1 y=1 y=1 和 y = 0 y=0 y=0 时的情况,看看他们分别想要优化的目标:
- 当 y = 1 y=1 y=1 的时候 ( θ T x > > 0 ) \theta^Tx>>0) θTx>>0) 通过对公式 (3) 的代入可得结果只剩下前半部分 − l o g ( 1 1 + e − θ T x ) -log(\frac{1}{1+e^{-\theta^Tx}}) −log(1+e−θTx1),这时将 θ T x = z \theta^Tx=z θTx=z 我们可以得到一条跟随 z z z 值变化的曲线:
- 当 z z z 的值逐渐增大的时候,这个函数的值是越来越趋于 0 0 0 的
- 这也就解释了,为什么当 y = 1 y=1 y=1 的时候通常 θ T x \theta^Tx θTx 设置得很大。这是因为在 y = 1 y=1 y=1 的时候整个损失函数 L ( y , y ^ ) L(y,\hat{y}) L(y,y^) 只剩下了 − l o g ( 1 1 + e z ) -log(\frac{1}{1+e^z}) −log(1+ez1) 这时候设置很大的 θ T x \theta^Tx θTx 就会导致整个 L ( y , y ^ ) L(y,\hat{y}) L(y,y^) 很小,也就达到了尽可能降低 loss 的目的。
- 同理,对于 y = 0 y=0 y=0 的情况,你可以看到也会有一条曲线来代表这个时候的 L ( y , y ^ ) L(y,\hat{y}) L(y,y^):
- 也可以根据这个图很直观得到结论,当 y = 0 y=0 y=0 的时候,将 θ T x \theta^Tx θTx 设置很小,因为这个时候也会导致 L ( y , y ^ ) L(y,\hat{y}) L(y,y^) 很小
SVM 的改进
-
SVM 可以看做是在对数几率回归的基础上对损失函数进行了改进,logistic regression 的损失函数可以分为两个部分,也已经在上面论述过了,这里看看 SVM 的设计,他把这两个部分分别处于 1 1 1 和 − 1 -1 −1 之间的值拉到 0 0 0 了,硬生生 y = 1 y=1 y=1 和 y = 0 y=0 y=0 的情况之间挖出了一道鸿沟。
-
在这种情况下如何用数学形式表示 SVM 的损失函数呢?
-
我们把原先公式 (3) 中的损失分成前后两个部分,前面的部分写成 c o s t 1 ( z ) 代 替 − l o g ( 1 1 + e − z ) ( 4 ) cost_1(z) ~~代替~~-log(\frac{1}{1+e^{-z}})~~~~~~~~~~(4) cost1(z) 代替 −log(1+e−z1) (4)
-
后面的部分写成:
c o s t 0 ( z ) 代 替 − l o g ( 1 − 1 1 + e − z ) ( 5 ) cost_0(z)~~代替~~-log(1-\frac{1}{1+e^{-z}})~~~~~~~~~~(5) cost0(z) 代替 −log(1−1+e−z1) (5) -
c o s t cost cost 的下标分别表示了 y = 1 y=1 y=1 ( c o s t 1 cost_1 cost1) 或者 y = 0 y=0 y=0 ( c o s t 0 cost_0 cost0) 的情况,所以对于一个样本 x x x,SVM 损失可以由 logistic regression 的损失演变而来,如下表示:
L ( y , y ^ ) = y c o s t 1 ( θ T x ) + ( 1 − y ) c o s t 0 ( θ T x ) ( 6 ) L(y, \hat{y})={y}cost_1(\theta^Tx)+({1-y})cost_0(\theta^Tx)~~~~~~~~~~(6) L(y,y^)=ycost1(θTx)+(1−y)cost0(θTx) (6) -
进一步我们可以得到 SVM 表示下的整个样本集的代价可以表示为:
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 ( 7 ) \frac{1}{m}\Sigma_{i=1}^m{y_i}cost_1(\theta^Tx_i)+(1-y_i)cost_0(\theta^Tx_i)+\frac{\lambda}{2m}\Sigma_{j=1}^n\theta_j^2~~~~~~~~~~(7) m1Σi=1myicost1(θTxi)+(1−yi)cost0(θTxi)+2mλΣj=1nθj2 (7) -
对于这个式子,我们采用一个 C C C 参数来控制第一项的比重,从而去掉正则化中的 λ \lambda λ 和 m m m
-
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 ( 8 ) C\Sigma_{i=1}^m{y_i}cost_1(\theta^Tx_i)+(1-y_i)cost_0(\theta^Tx_i)+\frac{1}{2}\Sigma_{j=1}^n\theta_j^2~~~~~~~~~~(8) CΣi=1myicost1(θTxi)+(1−yi)cost0(θTxi)+21Σj=1nθj2 (8)
-
S V M SVM SVM 还有一个特性,那就是最后不会输出一个概率值,而是更加干脆的 0 0 0 或者 1 1 1
为什么 SVM 叫最大间隔分类器
-
在 SVM 中由于我们采用了更加严格的措施,即不只是希望 θ T x > = 0 \theta^Tx >=0 θTx>=0 就分类其为正样本,我们希望判别的标准严格到 θ T x > = 1 \theta^Tx>=1 θTx>=1; 同样的,对于负向的样本,我们也希望能够是判别的标准严格到 θ T x < = − 1 \theta^Tx<=-1 θTx<=−1 而不只是小于 0 0 0
-
所以我们把这个区别于 logistic regression 作为 SVM 的约束条件:
θ T x > = 1 , i f y i = 1 \theta^Tx>=1, ~~if~~ y_i=1 θTx>=1, if yi=1
θ T x < = − 1 , i f y i = 0 \theta^Tx<=-1, ~~if~~ y_i=0 θTx<=−1, if yi=0 -
通过公式 (8) 我们可以知道,当我们再 SVM 的优化过程中选用一个特别大的 C C 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 ) \Sigma_{i=1}^m{y_i}cost_1(\theta^Tx_i)+(1-y_i)cost_0(\theta^Tx_i) Σi=1myicost1(θTxi)+(1−yi)cost0(θTxi) 尽可能地小,越接近 0 0 0 越好,因为只有这样,整个 loss 的值才不会很大,才能符合优化的目标。
-
这种情况下我们假设我们达到了目的,使得 C C C 后面的项足够小,假设达到了 0 0 0,所以整个损失函数可以简写成:
C ⋅ 0 + 1 2 Σ j = 1 n θ j 2 ( 9 ) C\cdot 0+\frac{1}{2}\Sigma_{j=1}^n\theta_j^2~~~~~~~~~~(9) C⋅0+21Σj=1nθj2 (9) -
因此优化目标变成了最小化 1 2 Σ j = 1 n θ j 2 \frac{1}{2}\Sigma_{j=1}^n\theta_j^2 21Σj=1nθj2;而这个部分就是最大间隔的保证 下面我们来详细分析一下。
向量点积
- 对于两个向量 u ⃗ = [ u 1 , u 2 ] T , v ⃗ = [ v 1 , v 2 ] T \vec{u}=[u_1, u_2]^T, \vec{v}=[v_1,v_2]^T u=[u1,u2]T,v=[v1,v2]T
- 这两个向量的点积可以看成是 v ⃗ \vec{v} v 在向量 u ⃗ \vec{u} u 上的投影,投影的长度为 p p p, u ⃗ \vec{u} u 的长度可以表示成 ∣ ∣ u ∣ ∣ ||u|| ∣∣u∣∣ 所以两个向量的点积可以表示成: u ⃗ ⋅ v ⃗ = p ⋅ ∣ ∣ u ∣ ∣ = u 1 v 1 + u 2 v 2 \vec{u} \cdot \vec{v}=p\cdot ||u|| = u_1v_1 + u_2v_2 u⋅v=p⋅∣∣u∣∣=u1v1+u2v2
根据点积这个预备知识,要达到 m i n θ 1 2 Σ j = 1 n θ j 2 min_\theta\frac{1}{2}\Sigma_{j=1}^n\theta_j^2 minθ21Σj=1nθj2 相当于 m i n θ 1 2 Σ j = 1 n ∣ ∣ θ j ∣ ∣ 2 min_\theta\frac{1}{2}\Sigma_{j=1}^n||\theta_j||^2 minθ21Σj=1n∣∣θj∣∣2 并且原来的约束条件:
θ T x > = 1 , i f y i = 1 \theta^Tx>=1, ~~if~~ y_i=1 θTx>=1, if yi=1
θ T x < = − 1 , i f y i = 0 \theta^Tx<=-1, ~~if~~ y_i=0 θTx<=−1, if yi=0
就可以写作:
p i ⋅ ∣ ∣ θ ∣ ∣ > = 1 , i f y i = 1 p_i\cdot ||\theta|| >=1,~~if~~ y_i=1 pi⋅∣∣θ∣∣>=1, if yi=1
p i ⋅ ∣ ∣ θ ∣ ∣ < = − 1 , i f y i = 0 p_i\cdot ||\theta|| <=-1,~~if~~ y_i=0 pi⋅∣∣θ∣∣<=−1, if yi=0
为什么 SVM 不选择小的 margin
- 假设现在有一堆点需要被分开(红色和蓝色)
- 假设有一个可选的决策边界(绿色直线),它的 margin 非常小,下面我们来看为什么 SVM 不会选择这种情形下的决策。
再补充一个小知识, θ T \theta^T θT 这个向量是与决策边界垂直的。例如如果我有一个超平面 y = − x y=-x y=−x 作为决策边界(这里为了简化暂时使用截距为 0 0 0 ( θ 0 = 0 \theta_0=0 θ0=0) 的假设情况), y = − x y=-x y=−x 还可以写作: x + y = 0 x+y=0 x+y=0 所以他的 θ T \theta^T θT 向量表示为 θ T = [ 1 , 1 ] \theta^T = [1, 1] θT=[1,1];
所以综上所述,决策边界是一条斜率为 − 1 -1 −1 的直线,而对应的 θ T \theta^T θT 向量确实指向右斜上方的,如下图所示:
- 继续看当前的这种情况,根据我们上面的点积已有的知识,我们可以得到距离决策边界最近的两个点的损失可以分别表示为:
- p 1 ⋅ ∣ ∣ θ ∣ ∣ p_1\cdot ||\theta|| p1⋅∣∣θ∣∣
-
p
2
⋅
∣
∣
θ
∣
∣
p_2\cdot ||\theta||
p2⋅∣∣θ∣∣
- 而由于这个 margin 非常小,就意味着
p
1
p_1
p1 和
p
2
p_2
p2 非常小,别忘了我们上面的约束条件:
p i ⋅ ∣ ∣ θ ∣ ∣ > = 1 , i f y i = 1 p_i\cdot ||\theta|| >=1,~~if~~ y_i=1 pi⋅∣∣θ∣∣>=1, if yi=1
p i ⋅ ∣ ∣ θ ∣ ∣ < = − 1 , i f y i = 0 p_i\cdot ||\theta|| <=-1,~~if~~ y_i=0 pi⋅∣∣θ∣∣<=−1, if yi=0 - 因此如果 p 1 p_1 p1 和 p 2 p_2 p2 非常小,我们就必须保证 ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣ 很大才能满足结果 > = 1 >=1 >=1 或者 < = − 1 <=-1 <=−1 的要求
- 而 ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣ 很大就意味着违反了优化目标 m i n θ 1 2 Σ j = 1 n θ j 2 min_\theta\frac{1}{2}\Sigma_{j=1}^n\theta_j^2 minθ21Σj=1nθj2
- 所以为了不使得优化目标和约束条件发生矛盾,我们就得保证决策边界的 margin 比较大。因此下面我们看一个正确的情况,并且进行相应的分析。
当 SVM 选择合理的 margin
-
在这个情境下,假设 margin 的直线可以用 x = 0 x=0 x=0 来表示;也就是可以表示为 x + 0 y = 0 x+0y=0 x+0y=0 所以对应的向量 θ T = [ 1 , 0 ] \theta^T = [1,0] θT=[1,0]
-
这个时候对于两个离决策边界最近的正负样本的损失分别为:
- p 1 ⋅ ∣ ∣ θ ∣ ∣ p_1\cdot ||\theta|| p1⋅∣∣θ∣∣
- p 2 ⋅ ∣ ∣ θ ∣ ∣ p_2\cdot ||\theta|| p2⋅∣∣θ∣∣
- 而由于 p 1 p_1 p1, p 1 p_1 p1 相对较大,所以 θ T \theta^T θT 可以在保证 ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣ 的情况下达到约束条件:
p i ⋅ ∣ ∣ θ ∣ ∣ > = 1 , i f y i = 1 p_i\cdot ||\theta|| >=1,~~if~~ y_i=1 pi⋅∣∣θ∣∣>=1, if yi=1
p i ⋅ ∣ ∣ θ ∣ ∣ < = − 1 , i f y i = 0 p_i\cdot ||\theta|| <=-1,~~if~~ y_i=0 pi⋅∣∣θ∣∣<=−1, if yi=0 -
因此对比两种不同的 SVM 决策边界,由于第二种可以在 ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣ 较小的情况下保证约束条件的成立,所以 SVM 会选择大的 margin 的分类策略。