本文首发于我的个人博客Suixin’s Blog
线性分类模型主要有四种不同的方法,线性判别函数、生成式模型、判别式模型以及贝叶斯观点下的Logistic回归。我们直接考虑对原始输入空间 x \pmb{x} xxx进行分类,当然也适用于对输入变量进行一个固定的变换 ϕ ( x ) \phi(\pmb{x}) ϕ(xxx)。
判别函数是一个以向量 x \pmb{x} xxx为输入,把它直接分配到 K K K个类别中的某一个类别( C k C_k Ck)的函数。
线性判别函数为
y ( x ) = w ⊤ x + w 0 y(\pmb{x})=\pmb{w}^\top\pmb{x}+w_0 y(xxx)=www⊤xxx+w0
如果 y ( x ) ⩾ 0 y(\pmb{x})\geqslant0 y(xxx)⩾0,则它被分到 C 1 C_1 C1中,否则被分到 C 2 C_2 C2中。
one-versus-the-rest方法使用 K − 1 K-1 K−1个分类器,每个分类器是一个二分类问题,分开属于 C k C_k Ck和不属于的部分。但是可能会产生输入空间无法分类的区域,如图所示。
one-versus-one方法使用 K ( K − 1 ) 2 \frac{K(K-1)}{2} 2K(K−1)个分类器,每个数据点的类别根据这些判别函数中的大多数输出类别确定。但是这也可能会产生输入空间无法分类的区域,如图所示。
引入一个 K K K类判别函数可以避免上述问题。该函数由 K K K个线性函数构成:
y k ( x ) = w k ⊤ x + w k 0 y_k(\pmb{x})=\pmb{w}_k^\top\pmb{x}+w_{k0} yk(xxx)=wwwk⊤xxx+wk0
对于一个数据点 x \pmb{x} xxx,如果 y k ( x ) y_k(\pmb{x}) yk(xxx)最大,就把它分到 C k C_k Ck中。于是类别 C k C_k Ck与 C j C_j Cj之间的决策面为 y k ( x ) = y j ( x ) y_k(\pmb{x})=y_j(\pmb{x}) yk(xxx)=yj(xxx)。这样的决策区域总是单连通的,并且是凸的。
对于二分类问题也可以构造基于两个线性函数 y 1 ( x ) y_1(\pmb{x}) y1(xxx)和 y 2 ( x ) y_2(\pmb{x}) y2(xxx)的判别函数,只是前述方法更简单且是等价的。
对于一个一般的 K K K分类问题,每个类别 C k C_k Ck有一个线性模型
y k ( x ) = w k ⊤ x + w k 0 y_k(\pmb{x})=\pmb{w}_k^\top\pmb{x}+w_{k0} yk(xxx)=wwwk⊤xxx+wk0
使用矩阵记号
y ( x ) = W ~ ⊤ x ~ \pmb{y}(\pmb{x})=\tilde{W}^\top\tilde{\pmb{x}} yyy(xxx)=W~⊤xxx~
其中, W ⊤ = ( w ~ 1 , w ~ 2 , ⋯   , w ~ K ) ⊤ W^\top=(\tilde{\pmb{w}}_1,\tilde{\pmb{w}}_2,\cdots,\tilde{\pmb{w}}_K)^\top W⊤=(www~1,www~2,⋯,www~K)⊤每行为 w ~ k ⊤ \tilde{\pmb{w}}_k^\top www~k⊤, w ~ k = ( w k 0 , w k ⊤ ) ⊤ \tilde{\pmb{w}}_k=(w_{k0},\pmb{w}_k^\top)^\top www~k=(wk0,wwwk⊤)⊤为列向量, x ~ = ( 1 , x ⊤ ) ⊤ \tilde{\pmb{x}}=(1,\pmb{x}^\top)^\top xxx~=(1,xxx⊤)⊤为列向量。
一个新的输入 x \pmb{x} xxx将被分到 y k ( x ) = w ~ k ⊤ x ~ y_k(\pmb{x})=\tilde{\pmb{w}}_k^\top\tilde{\pmb{x}} yk(xxx)=www~k⊤xxx~最大的类别中。
对于训练集 { x n , t n } \{\pmb{x}_n,\pmb{t}_n\} {xxxn,tttn},其中 n = 1 , 2 , ⋯   , N n=1,2,\cdots,N n=1,2,⋯,N,平方和误差函数为
E D ( W ~ ) = 1 2 T r { ( X ~ W ~ − T ) ⊤ ( X ~ W ~ − T ) } E_D(\tilde{W})=\frac{1}{2}Tr\{(\tilde{X}\tilde{W}-T)^\top(\tilde{X}\tilde{W}-T)\} ED(W~)=21Tr{(X~W~−T)⊤(X~W~−T)}
其中, X ~ = ( x ~ 1 ⊤ , x ~ 2 ⊤ , ⋯   , x ~ N ⊤ ) ⊤ \tilde{X}=(\tilde{\pmb{x}}_1^\top,\tilde{\pmb{x}}_2^\top,\cdots,\tilde{\pmb{x}}_N^\top)^\top X~=(xxx~1⊤,xxx~2⊤,⋯,xxx~N⊤)⊤, T = ( t ~ 1 ⊤ , t ~ 2 ⊤ , ⋯   , t ~ N ⊤ ) ⊤ T=(\tilde{\pmb{t}}_1^\top,\tilde{\pmb{t}}_2^\top,\cdots,\tilde{\pmb{t}}_N^\top)^\top T=(ttt~1⊤,ttt~2⊤,⋯,ttt~N⊤)⊤采用‘1-of-K’表示方式。求导可得参数矩阵最优解为
W ~ = ( X ~ ⊤ X ~ ) − 1 X ~ ⊤ T = X ~ † T \tilde{W}=(\tilde{X}^\top\tilde{X})^{-1}\tilde{X}^\top T=\tilde{X}^\dagger T W~=(X~⊤X~)−1X~⊤T=X~†T
即可得判别函数为
y ( x ) = W ~ ⊤ x ~ = T ⊤ ( X ~ † ) ⊤ x ~ \pmb{y}(\pmb{x})=\tilde{W}^\top\tilde{\pmb{x}}=T^\top(\tilde{X}^\dagger)^\top\tilde{\pmb{x}} yyy(xxx)=W~⊤xxx~=T⊤(X~†)⊤xxx~
然而,最小平方解对于离群点缺少鲁棒性,且通常不会给出较好的结果,这与高斯条件分布假设有关。
针对二分类问题,我们将数据投影到一维,通过调整权向量,使类别之间分开最大。投影式为
y = w ⊤ x y=\pmb{w}^\top\pmb{x} y=www⊤xxx
当得到最佳的投影之后,只需设置一个恰当的阈值即可将样本分类。
投影之后的类别均值差为
m 2 − m 1 = w ⊤ ( m 2 − m 1 ) m_2-m_1=\pmb{w}^\top(\pmb{m}_2-\pmb{m}_1) m2−m1=www⊤(mmm2−mmm1)
其中, m 1 \pmb{m}_1 mmm1和 m 2 \pmb{m}_2 mmm2为原始数据的类别均值向量,此处限制 w \pmb{w} www为单位长度,即 ∑ i w i 2 = 1 \sum_iw_i^2=1 ∑iwi2=1。
Fisher思想:最大化一个函数,使得类均值的投影分开较大,类内的方差较小。
Fisher准则根据类间方差和类内方差的比值定义:
J ( w ) = ( m 2 − m 1 ) 2 s 1 2 + s 2 2 J(\pmb{w})=\frac{(m_2-m_1)^2}{s_1^2+s_2^2} J(www)=s12+s22(m2−m1)2
其中,投影后的一维类内方差为 s k 2 = ∑ n ∈ C k ( y n − m k ) 2 s_k^2=\sum_{n\in C_k}(y_n-m_k)^2 sk2=∑n∈Ck(yn−mk)2, y n = w ⊤ x n y_n=\pmb{w}^\top\pmb{x}_n yn=www⊤xxxn。
化简可得
J ( w ) = w ⊤ S B w w ⊤ S W w J(\pmb{w})=\frac{\pmb{w}^\top S_B\pmb{w}}{\pmb{w}^\top S_W\pmb{w}} J(www)=www⊤SWwwwwww⊤SBwww
其中, S B S_B SB和 S W S_W SW分别为类间协方差阵和类内协方差阵
S B = ( m 2 − m 1 ) ( m 2 − m 1 ) ⊤ S W = ∑ n ∈ C 1 ( x n − m 1 ) ( x n − m 1 ) ⊤ + ∑ n ∈ C 2 ( x n − m 2 ) ( x n − m 2 ) ⊤ S_B=(\pmb{m}_2-\pmb{m}_1)(\pmb{m}_2-\pmb{m}_1)^\top \\ S_W=\sum_{n\in C_1}(\pmb{x}_n-\pmb{m}_1)(\pmb{x}_n-\pmb{m}_1)^\top+\sum_{n\in C_2}(\pmb{x}_n-\pmb{m}_2)(\pmb{x}_n-\pmb{m}_2)^\top SB=(mmm2−mmm1)(mmm2−mmm1)⊤SW=n∈C1∑(xxxn−mmm1)(xxxn−mmm1)⊤+n∈C2∑(xxxn−mmm2)(xxxn−mmm2)⊤
对 J ( w ) J(\pmb{w}) J(www)求导可得
( w ⊤ S B w ) S W w = ( w ⊤ S W w ) S B w w ∝ S W − 1 ( m 2 − m 1 ) (\pmb{w}^\top S_B\pmb{w})S_W\pmb{w}=(\pmb{w}^\top S_W\pmb{w})S_B\pmb{w}\\ \pmb{w}\propto S_W^{-1}(\pmb{m}_2-\pmb{m}_1) (www⊤SBwww)SWwww=(www⊤SWwww)SBwwwwww∝SW−1(mmm2−mmm1)
若类内协方差阵是各向同性的,则 S W S_W SW正比于单位矩阵, w \pmb{w} www正比于原始数据的类均值差。
对于多分类问题,也有对应的Fisher判别函数。
对输入向量先进行一个固定的非线性变换再构造一个线性模型,为
y ( x ) = f ( w ⊤ ϕ ( x ) ) y(\pmb{x})=f(\pmb{w}^\top\phi(\pmb{x})) y(xxx)=f(www⊤ϕ(xxx))
其中, f ( ⋅ ) f(·) f(⋅)为一个阶梯函数
f ( a ) = { 1 , a ⩾ 0 − 1 , a < 0 f(a)= \begin{cases} 1, & a\geqslant0 \\ -1, & a<0 \end{cases} f(a)={1,−1,a⩾0a<0
此处我们使用 t = + 1 t=+1 t=+1表示 C 1 C_1 C1, t = − 1 t=-1 t=−1表示 C 2 C_2 C2。
我们需要找到合适的权向量 w \pmb{w} www使得对所有的数据点有 w ⊤ ϕ ( x n ) t n > 0 \pmb{w}^\top\phi(\pmb{x}_n)\pmb{t}_n>0 www⊤ϕ(xxxn)tttn>0。
感知器准则:对于误分类的数据 x n \pmb{x}_n xxxn赋予误差,则误差函数为
E P ( w ) = − ∑ n ∈ M w ⊤ ϕ n t n E_P(\pmb{w})=-\sum_{n\in \mathscr{M}}\pmb{w}^\top\phi_n\pmb{t}_n EP(www)=−n∈M∑www⊤ϕntttn
其中, M \mathscr{M} M表示所有误分类数据的集合。对该误差函数使用随机梯度下降(SGD)
w ( τ + 1 ) = w ( τ ) − η ∇ E P ( w ) = w ( τ ) + η ϕ n t n \pmb{w}^{(\tau+1)}=\pmb{w}^{(\tau)}-\eta\nabla E_P(\pmb{w})=\pmb{w}^{(\tau)}+\eta\phi_n\pmb{t}_n www(τ+1)=www(τ)−η∇EP(www)=www(τ)+ηϕntttn
由于 f ( ⋅ ) f(·) f(⋅)的设置,不失一般性可设 η = 1 \eta=1 η=1。则实际上SGD变为了:如果该数据点分类正确,则权向量保持不变;如果分类错误,对于类别 C 1 C_1 C1,把向量 ϕ ( x n ) \phi(\pmb{x}_n) ϕ(xxxn)加到当前的权向量上得到新的权向量,对于类别 C 2 C_2 C2,则从当前的权向量中减掉 ϕ ( x n ) \phi(\pmb{x}_n) ϕ(xxxn)得到新的权向量。
注:感知器学习规则并不保证在每个阶段都会减小整体误差。但由感知器收敛定理,如果训练数据线性可分,那么感知器算法可以保证在有限步骤内找到精确解。对于线性不可分数据,则永远不会收敛。
“Pattern Recognition and Machine Learning”