文章目录
- 逻辑回归
- 问题描述
- 模型建模
- 模型求解
- 多分类
逻辑回归
问题描述
首先我们考虑一个二分类的问题,假设我们有一个观测向量 x = ( x 1 , x 2 , . . . , x m ) \mathbf{x} = (x_1, x_2, ..., x_m) x=(x1,x2,...,xm),其中 m m m 是特征的数量,以及一个二元响应变量 y y y, y y y 可以取值为0或1,代表类别为 C 1 , C 2 C_1,C_2 C1,C2。
模型建模
首先,我们假设存在一个线性关系,将特征与响应变量联系起来:
z = β 0 + β 1 x 1 + β 2 x 2 + . . . + β m x m = β T x z = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_mx_m =\beta^Tx z=β0+β1x1+β2x2+...+βmxm=βTx
我们也可以使用非线性的基函数将数据进行变换:
z = β 0 + β 1 ϕ ( x 1 ) + β 2 ϕ ( x 2 ) + . . . + β m ϕ ( x m ) = β T ϕ ( x ) z = \beta_0 + \beta_1\phi(x_1) + \beta_2\phi(x_2) + ... + \beta_m\phi(x_m) =\beta^T\phi(x) z=β0+β1ϕ(x1)+β2ϕ(x2)+...+βmϕ(xm)=βTϕ(x)
其中, β 0 , β 1 , . . . , β m \beta_0, \beta_1, ..., \beta_m β0,β1,...,βm 是需要估计的参数。
因为线性回归得到的预测值在 ( − ∞ , ∞ ) (-\infty,\infty) (−∞,∞)之间,我们可以通过逻辑函数(或称为sigmoid函数)将这个线性关系映射到 ( 0 , 1 ) (0,1) (0,1)区间,以得到 y = 1 y=1 y=1的概率:
y n = p ( C 1 ∣ β ) = 1 1 + e − z y_n = p(C_1|\beta) = \frac{1}{1+e^{-z}} yn=p(C1∣β)=1+e−z1
模型求解
首先一个二分类的分布可以写成
y n t n ( 1 − y n ) 1 − t n y_n^{t_n}(1-y_n)^{1-t_n} yntn(1−yn)1−tn
我们使用极大释然估计来求解模型的参数:
p ( t ∣ β ) = ∏ n = 1 N y n t n ( 1 − y n ) 1 − t n p(t|\beta)=\prod\limits_{n=1}^N y_n^{t_n}(1-y_n)^{1-t_n} p(t∣β)=n=1∏Nyntn(1−yn)1−tn
ln p ( t ∣ β ) = ∑ n = 1 N t n ln y n + ( 1 − t n ) ln ( 1 − y n ) \text{ln}p(t|\beta)=\sum\limits_{n=1}^N t_n \text{ln} y_n + (1-t_n)\text{ln}(1-y_n) lnp(t∣β)=n=1∑Ntnlnyn+(1−tn)ln(1−yn)
从上述可以看出似然函数就是交叉熵损失函数相反数,也是二分类十分常用的损失函数。
∂ ln p ( t ∣ β ) ∂ β = ∑ n = 1 N { t n σ ( z ) − 1 − t n 1 − σ ( z ) } ∂ σ ( z ) ∂ z = ∑ n = 1 N { t n σ ( z ) − 1 − t n 1 − σ ( z ) } σ ( z ) ( 1 − σ ( z ) ) ∂ z ∂ β = ∑ n = 1 N { t n ( 1 − σ ( z ) ) − ( 1 − y n ) σ ( z ) } ϕ ( x n ) = ∑ n = 1 N { t n − y n } ϕ ( x n ) = 0 \begin{align*} \frac{\partial \text{ln}p(t|\beta)}{\partial \beta} &= \sum\limits_{n=1}^N\{\frac{t_n}{\sigma(z)}- \frac{1-t_n}{1-\sigma(z)} \}\frac{\partial \sigma(z)}{\partial z} \\ &= \sum\limits_{n=1}^N\{\frac{t_n}{\sigma(z)}- \frac{1-t_n}{1-\sigma(z)} \} \sigma(z)(1-\sigma(z)) \frac{\partial z}{\partial \beta} \\ &= \sum\limits_{n=1}^N \{t_n (1-\sigma(z)) - (1-y_n)\sigma(z) \}\phi(x_n) \\ &= \sum\limits_{n=1}^N \{t_n-y_n\}\phi(x_n) \\ &=0 \end{align*} ∂β∂lnp(t∣β)=n=1∑N{σ(z)tn−1−σ(z)1−tn}∂z∂σ(z)=n=1∑N{σ(z)tn−1−σ(z)1−tn}σ(z)(1−σ(z))∂β∂z=n=1∑N{tn(1−σ(z))−(1−yn)σ(z)}ϕ(xn)=n=1∑N{tn−yn}ϕ(xn)=0
很遗憾我们很难从导数等于0求得一个闭式解,我们可以使用梯度下降法求解 β \beta β
我么可以把结果写成矩阵的形式,
首先我们定一个设计矩阵,令 Φ = { ϕ ( x 1 ) T , ϕ ( x 2 ) T , ⋅ ⋅ ⋅ , ϕ ( x n ) T } T \Phi=\{\phi(x_1)^T, \phi(x_2)^T,\cdot\cdot\cdot,\phi(x_n)^T\}^T Φ={ϕ(x1)T,ϕ(x2)T,⋅⋅⋅,ϕ(xn)T}T
Φ = [ ϕ 0 ( x 1 ) ϕ 1 ( x 1 ) ⋯ ϕ D ( x 1 ) ϕ 0 ( x 2 ) ϕ 1 ( x 2 ) ⋯ ϕ D ( x 2 ) ⋮ ⋮ ⋱ ⋮ ϕ 0 ( x N ) ϕ 1 ( x N ) ⋯ ϕ D ( x N ) ] \Phi = \begin{bmatrix} \phi_0(x_1) & \phi_1(x_1) & \cdots & \phi_D(x_1) \\ \phi_0(x_2) & \phi_1(x_2) & \cdots & \phi_D(x_2) \\ \vdots & \vdots & \ddots & \vdots \\ \phi_0(x_N) & \phi_1(x_N) & \cdots & \phi_D(x_N) \end{bmatrix} Φ= ϕ0(x1)ϕ0(x2)⋮ϕ0(xN)ϕ1(x1)ϕ1(x2)⋮ϕ1(xN)⋯⋯⋱⋯ϕD(x1)ϕD(x2)⋮ϕD(xN)
ϕ ( x n ) T = { ϕ 0 ( x n ) , ⋯ , ϕ D ( x n ) } \phi(x_n)^T=\{\phi_0(x_n),\cdots,\phi_D(x_n)\} ϕ(xn)T={ϕ0(xn),⋯,ϕD(xn)}
∂ ln p ( t ∣ β ) ∂ β = Φ T ( y − t ) \frac{\partial \text{ln}p(t|\beta)}{\partial \beta} = \Phi^T(y-t) ∂β∂lnp(t∣β)=ΦT(y−t)
参数的更新可以写成:
β t + 1 = β t − λ ∑ n = 1 N { t n − 1 1 + e β t T ϕ ( x ) } ϕ ( x n ) = β t − λ Φ T ( y − t ) \begin{align*} \beta_{t+1} &= \beta_{t} - \lambda \sum\limits_{n=1}^N \{t_n-\frac{1}{1+e^{\beta_{t}^T\phi(x)}}\}\phi(x_n) \\ &= \beta_t - \lambda \Phi^T(y-t) \end{align*} βt+1=βt−λn=1∑N{tn−1+eβtTϕ(x)1}ϕ(xn)=βt−λΦT(y−t)
也可以使用牛顿法求解
∂ 2 ln p ( t ∣ β ) ∂ β ∂ β T = ∑ n = 1 N y n ( 1 − y n ) ϕ ( x n ) ϕ ( x n ) T = Φ T R Φ \begin{align*} \frac{\partial^2 \text{ln}p(t|\beta)}{\partial \beta \partial \beta^T} &= \sum_{n=1}^{N} y_n(1-y_n)\phi(x_n)\phi(x_n)^T \\ &= \Phi^TR\Phi \end{align*} ∂β∂βT∂2lnp(t∣β)=n=1∑Nyn(1−yn)ϕ(xn)ϕ(xn)T=ΦTRΦ
其中 R R R为 N × N N\times N N×N的对角阵,每个元素为: R n n = y n ( 1 − y n ) R_{nn}=y_n(1-y_n) Rnn=yn(1−yn),那么牛顿法的更新公式可以写成:
w t + 1 = w t − ( Φ T R Φ ) − 1 Φ T ( y − t ) \begin{align*} w_{t+1} = w_t - (\Phi^TR\Phi)^{-1}\Phi^T(y-t) \end{align*} wt+1=wt−(ΦTRΦ)−1ΦT(y−t)
多分类
对与多分类问题,我们不能再使用 σ \sigma σ函数,而是使用softmax函数作为概率,对于一个数据的类别,我们使用one-of-K编码表示 t n t_n tn,那么属于类别 C k C_k Ck的概率可以表达为:
p ( C k ∣ β k ) = y k = e x p ( a k ) ∑ j e x p ( a j ) p(C_k|\beta^k)=y_k=\frac{exp(a_k)}{\sum_j exp(a_j)} p(Ck∣βk)=yk=∑jexp(aj)exp(ak)
其中 a k = w k T ϕ ( x n ) a_k=w_k^T\phi(x_n) ak=wkTϕ(xn), β k = ( β 1 k , β 2 k , ⋯ , β m k ) T \beta^k=(\beta_1^k,\beta_2^k,\cdots, \beta_m^k)^T βk=(β1k,β2k,⋯,βmk)T表示第 k k k类的参数
那么样本 n n n的概率分布为:
y n = ∏ k = 1 K y n k t n k y_{n} =\prod^K_{k=1} {y_{nk}}^{t_{nk}} yn=k=1∏Kynktnk
其中 t n k t_{nk} tnk表示one-of-K编码中的第 k k k个值
使用极大释然估计,那么似然函数为:
p ( T ∣ β 1 , β 2 , ⋯ , β K ) = ∏ n = 1 N ∏ k = 1 K y n k t n k p(T|\beta^1,\beta^2,\cdots,\beta^K)=\prod^N_{n=1}\prod^K_{k=1} {y_{nk}}^{t_{nk}} p(T∣β1,β2,⋯,βK)=n=1∏Nk=1∏Kynktnk
其中 T T T是一个 k k k维的列向量,对似然函数取对数,得到交叉熵损失的相反数:
ln p ( T ∣ β 1 , β 2 , ⋯ , β K ) = ∑ n = 1 N ∑ k = 1 K t n k ln y n k \text{ln}p(T|\beta^1,\beta^2,\cdots,\beta^K)=\sum^N_{n=1}\sum^K_{k=1} t_{nk} \text{ln} {y_{nk}} lnp(T∣β1,β2,⋯,βK)=n=1∑Nk=1∑Ktnklnynk
似然函数分别对 β k \beta^k βk求导:
∂ ln p ( T ∣ β 1 , β 2 , ⋯ , β K ) ∂ β k = ∑ n = 1 N ( y n k − t n k ) ϕ ( x n ) \frac{\partial \text{ln}p(T|\beta^1,\beta^2,\cdots,\beta^K)}{\partial \beta^k} = \sum^N_{n=1}({y_{nk}-t_{nk}})\phi(x_n) ∂βk∂lnp(T∣β1,β2,⋯,βK)=n=1∑N(ynk−tnk)ϕ(xn)
似然函数分别对 β j \beta^j βj二次偏导得到Hessian矩阵:
∂ 2 ln p ( T ∣ β 1 , β 2 , ⋯ , β K ) ∂ β j ∂ β k T = ∑ n = 1 N y n j ( I j k − y n k ) ϕ ( x n ) ϕ ( x n ) T \frac{\partial^2 \text{ln}p(T|\beta^1,\beta^2,\cdots,\beta^K)}{\partial \beta^j \partial {\beta^k}^T} = \sum^N_{n=1} y_{nj}(I_{jk} - y_{nk})\phi(x_n)\phi(x_n)^T ∂βj∂βkT∂2lnp(T∣β1,β2,⋯,βK)=n=1∑Nynj(Ijk−ynk)ϕ(xn)ϕ(xn)T
因为 y n j y_{nj} ynj在0到1之间,因此Hessian矩阵是正定的,交叉熵误差函数为二次凸函数,因此一定有最优解。