利用梯度下降对逻辑回归模型的代价函数求取最小解,实现模型参数的优化
1.代价函数(Cost Function)
2.梯度下降(Gradient Descent)
3.高级优化(Advanced Optimization)
4.多类别分类(Multiclass Classification)
在线性回归模型中,我们选取所有样本误差的平方和的均值作为代价函数,对于逻辑回归模型,理论上也可以使用它作为代价函数。但是,将 h θ ( x ) = 1 1 + e − θ T x {h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}} hθ(x)=1+e−θTx1代入到代价函数中,得到的函数是一个非凸函数(non-convexfunction),也就是说,对这样的模型进行梯度下降会得到许多局部最优解,而得不到全局最优解,这是不便于优化参数的。
我们知道,线性回归模型的代价函数为: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2 。 我们重新定义逻辑回归的代价函数为: J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)} J(θ)=m1i=1∑mCost(hθ(x(i)),y(i)),其中,
由此我们就得到了逻辑回归模型的代价函数。我们不用去了解这个代价函数是怎么被推导出来的,只要知道它是如何发挥作用的。具体是这样的,当实际值 y y y为0时,而预测值 h θ ( x ) {h_\theta}\left( x \right) hθ(x)也为0时,我们代入 C o s t ( h θ ( x ) , y ) {{Cost}\left( {h_\theta}\left( {x} \right),{y}\right)} Cost(hθ(x),y)中,可以得到误差为0;当实际值 y y y为0时,而预测值 h θ ( x ) {h_\theta}\left( x \right) hθ(x)却为1时,说明实际和预测完全不同,代价函数应惩罚程度最大,我们代入 C o s t ( h θ ( x ) , y ) {{Cost}\left( {h_\theta}\left( {x} \right),{y}\right)} Cost(hθ(x),y)中,可以得到误差为无穷大;当实际值 y y y为1时,而预测值 h θ ( x ) {h_\theta}\left( x \right) hθ(x)也为1时,我们代入 C o s t ( h θ ( x ) , y ) {{Cost}\left( {h_\theta}\left( {x} \right),{y}\right)} Cost(hθ(x),y)中,可以得到误差为0;当实际值 y y y为1时,而预测值 h θ ( x ) {h_\theta}\left( x \right) hθ(x)却为0时,说明实际和预测完全不同,代价函数应惩罚程度最大,我们代入 C o s t ( h θ ( x ) , y ) {{Cost}\left( {h_\theta}\left( {x} \right),{y}\right)} Cost(hθ(x),y)中,可以得到误差为无穷大。最直观的可以通过图像来认识:
总结一下,当实际的 y = 1 y=1 y=1 且 h θ ( x ) {h_\theta}\left( x \right) hθ(x)也为 1 时误差为 0,当 y = 1 y=1 y=1 但 h θ ( x ) {h_\theta}\left( x \right) hθ(x)不为1时误差随着 h θ ( x ) {h_\theta}\left( x \right) hθ(x)变小而变大;当实际的 y = 0 y=0 y=0 且 h θ ( x ) {h_\theta}\left( x \right) hθ(x)也为 0 时代价为 0,当 y = 0 y=0 y=0 但 h θ ( x ) {h_\theta}\left( x \right) hθ(x)不为 0时误差随着 h θ ( x ) {h_\theta}\left( x \right) hθ(x)的变大而变大。 也就是说,这样的代价函数可以完美地反映出实际值和预测值的误差,最主要的是它是一个凸函数,即只存在全局最优解。
进一步的,由于 y y y的取值只有0和1,所以我们可以将 C o s t ( h θ ( x ) , y ) {{Cost}\left( {h_\theta}\left( {x} \right),{y}\right)} Cost(hθ(x),y)在 y y y两种不同取值的情况合并成一种,即 C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x)) ,带入代价函数得到: J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
即: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
我们可以将 y = 0 y=0 y=0和 y = 1 y=1 y=1代入式子中验证,结果和原先的一样。
在有了代价函数之后,我们就可以进行梯度下降了,方法不变,关键是对代价函数求取偏导。
直接给出求偏导后的参数更新公式,推导过程见最后:
我们可能会诧异逻辑回归的梯度下降公式怎么和线性回归的一模一样,其实并不相同。对于线性回归假设函数: h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta}\left( x \right)={\theta^T}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn;而现在逻辑函数假设函数: h θ ( x ) = 1 1 + e − θ T X {h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}} hθ(x)=1+e−θTX1。因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
还有一点需要说明,特征缩放也适用于逻辑回归。如果变量特征范围差距很大的话,那么应用特征缩放的方法,可以使梯度下降收敛更快。
到目前为止,对模型参数的优化只有一种方法,就是梯度下降,这里介绍几个其他的高级优化算法,利用这些方法,我们就能够通过梯度下降,将逻辑回归的速度大大提高,而这也将使算法更加适合解决大型的机器学习问题。主要的高级优化算法有共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)。它们有许多的优点,例如使用这其中任何一个算法,通常不需要手动选择学习率 α \alpha α,依靠线性搜索(line search)算法,它可以自动尝试不同的学习速率 α \alpha α,并自动选择一个好的学习速率 a a a,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。这些算法实际上在做更复杂的事情,不仅仅是选择一个好的学习速率,所以它们往往最终比梯度下降收敛得快多了。
它们需要有一种方法来计算 J ( θ ) J\left( \theta \right) J(θ),以及需要一种方法计算偏导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
之前我们讲的分类问题都是二元分类问题,现在讲多元分类问题。先看这样一些例子:
eg1:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用 y = 1 y=1 y=1、 y = 2 y=2 y=2、 y = 3 y=3 y=3、 y = 4 y=4 y=4 来代表。
eg2:如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 y = 1 y=1 y=1 这个类别来代表;或者患了感冒,用 y = 2 y=2 y=2 来代表;或者得了流感用 y = 3 y=3 y=3来代表。
eg3:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天、或者下雪天,对上述所有的例子, y y y 可以取一个很小的数值,一个相对"谨慎"的数值,比如1 到3、1到4或者其它数值。
以上都是多元分类问题,我们采用一对多的方法解决该类问题,具体来看,假设有这样一个数据集,我们要将这三块分开。
所谓的“一对多”就是每次将要分类的数据分成一组和其他组。例如上图,在第一次判定边界的时候,将Class1作为一组,且令其为正向类;将Class2和Class3作为一组,且令其为负向类,结果如图:
这时候,我们训练一个标准的逻辑回归分类器,会得到一个模型记做 h θ ( 1 ) ( x ) h_\theta^{\left( 1 \right)}\left( x \right) hθ(1)(x),其值就是为正向类即Class1的概率;第二次,将Class2作为一组,令其为正向类;令Class1和Class3为一组,令其为负向类,训练也可以得到一个逻辑回归分类器,记做 h θ ( 2 ) ( x ) h_\theta^{\left( 2 \right)}\left( x \right) hθ(2)(x),其值就是为正向类即Class2的概率;同理可以得到模型 h θ ( 3 ) ( x ) h_\theta^{\left( 3 \right)}\left( x \right) hθ(3)(x),其值就是为正向类即Class3的概率。最后我们得到一系列的模型简记为: h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) h_\theta^{\left( i \right)}\left( x \right)=p\left( y=i|x;\theta \right) hθ(i)(x)=p(y=i∣x;θ)其中: i = ( 1 , 2 , 3.... k ) i=\left( 1,2,3....k \right) i=(1,2,3....k)。
最后,为了做出预测,我们给出输入一个新的 x x x 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 x x x,然后我们选择一个让 h θ ( i ) ( x ) h_\theta^{\left( i \right)}\left( x \right) hθ(i)(x) 最大的 i i i,即 max i , h θ ( i ) ( x ) \mathop{\max}\limits_i,h_\theta^{\left( i \right)}\left( x \right) imax,hθ(i)(x),即可得到 x x x属于Class i 。说明一下,有多少个需要分类的数据就要训练多少个逻辑回归分类器,上图中有3个需要分类,我们就有3个逻辑回归分类器需要训练。
逻辑回归梯度下降公式推导:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
考虑: h θ ( x ( i ) ) = 1 1 + e − θ T x ( i ) {h_\theta}\left( {{x}^{(i)}} \right)=\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} hθ(x(i))=1+e−θTx(i)1
则: y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) {{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right) y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))
= y ( i ) log ( 1 1 + e − θ T x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − 1 1 + e − θ T x ( i ) ) ={{y}^{(i)}}\log \left( \frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right) =y(i)log(1+e−θTx(i)1)+(1−y(i))log(1−1+e−θTx(i)1)
= − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ( 1 + e θ T x ( i ) ) =-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^T}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^T}{{x}^{(i)}}}} \right) =−y(i)log(1+e−θTx(i))−(1−y(i))log(1+eθTx(i))
所以: ∂ ∂ θ j J ( θ ) \frac{\partial }{\partial {\theta_{j}}}J\left( \theta \right) ∂θj∂J(θ)
= ∂ ∂ θ j [ − 1 m ∑ i = 1 m [ − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ( 1 + e θ T x ( i ) ) ] ] =\frac{\partial }{\partial {\theta_{j}}}[-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^{T}}{{x}^{(i)}}}} \right)]}] =∂θj∂[−m1i=1∑m[−y(i)log(1+e−θTx(i))−(1−y(i))log(1+eθTx(i))]]
= − 1 m ∑ i = 1 m [ − y ( i ) − x j ( i ) e − θ T x ( i ) 1 + e − θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\frac{-x_{j}^{(i)}{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}{1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}}] =−m1i=1∑m[−y(i)1+e−θTx(i)−xj(i)e−θTx(i)−(1−y(i))1+eθTx(i)xj(i)eθTx(i)]
= − 1 m ∑ i = 1 m y ( i ) x j ( i ) 1 + e θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{{y}^{(i)}}\frac{x_j^{(i)}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}] =−m1i=1∑my(i)1+eθTx(i)xj(i)−(1−y(i))1+eθTx(i)xj(i)eθTx(i)]
= − 1 m ∑ i = 1 m y ( i ) x j ( i ) − x j ( i ) e θ T x ( i ) + y ( i ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}} =−m1i=1∑m1+eθTx(i)y(i)xj(i)−xj(i)eθTx(i)+y(i)xj(i)eθTx(i)
= − 1 m ∑ i = 1 m y ( i ) ( 1 + e θ T x ( i ) ) − e θ T x ( i ) 1 + e θ T x ( i ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}\left( 1\text{+}{{e}^{{\theta^T}{{x}^{(i)}}}} \right)-{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}x_j^{(i)}} =−m1i=1∑m1+eθTx(i)y(i)(1+eθTx(i))−eθTx(i)xj(i)
= − 1 m ∑ i = 1 m ( y ( i ) − e θ T x ( i ) 1 + e θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =−m1i=1∑m(y(i)−1+eθTx(i)eθTx(i))xj(i)
= − 1 m ∑ i = 1 m ( y ( i ) − 1 1 + e − θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =−m1i=1∑m(y(i)−1+e−θTx(i)1)xj(i)
= − 1 m ∑ i = 1 m [ y ( i ) − h θ ( x ( i ) ) ] x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}-{h_\theta}\left( {{x}^{(i)}} \right)]x_j^{(i)}} =−m1i=1∑m[y(i)−hθ(x(i))]xj(i)
= 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) =\frac{1}{m}\sum\limits_{i=1}^{m}{[{h_\theta}\left( {{x}^{(i)}} \right)-{{y}^{(i)}}]x_j^{(i)}} =m1i=1∑m[hθ(x(i))−y(i)]xj(i)