前言

利用梯度下降对逻辑回归模型的代价函数求取最小解,实现模型参数的优化
 1.代价函数(Cost Function)
 2.梯度下降(Gradient Descent)
 3.高级优化(Advanced Optimization)
 4.多类别分类(Multiclass Classification)

逻辑回归模型参数优化

(一)代价函数(Cost Function)

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降代入到代价函数中,得到的函数是一个非凸函数(non-convexfunction),也就是说,对这样的模型进行梯度下降会得到许多局部最优解,而得不到全局最优解,这是不便于优化参数的。

  我们知道,线性回归模型的代价函数为:逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_02 。 我们重新定义逻辑回归的代价函数为:逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_03,其中,

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_04


  由此我们就得到了逻辑回归模型的代价函数。我们不用去了解这个代价函数是怎么被推导出来的,只要知道它是如何发挥作用的。具体是这样的,当实际值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05为0时,而预测值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06也为0时,我们代入逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_07中,可以得到误差为0;当实际值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05为0时,而预测值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06却为1时,说明实际和预测完全不同,代价函数应惩罚程度最大,我们代入逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_07中,可以得到误差为无穷大;当实际值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05为1时,而预测值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06也为1时,我们代入逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_07中,可以得到误差为0;当实际值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05为1时,而预测值逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06却为0时,说明实际和预测完全不同,代价函数应惩罚程度最大,我们代入逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_07中,可以得到误差为无穷大。最直观的可以通过图像来认识:

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_17


逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_18


  总结一下,当实际的 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_19逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06也为 1 时误差为 0,当 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_19逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06不为1时误差随着逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06变小而变大;当实际的 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_24逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06也为 0 时代价为 0,当逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_24逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06不为 0时误差随着 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_06的变大而变大。 也就是说,这样的代价函数可以完美地反映出实际值和预测值的误差,最主要的是它是一个凸函数,即只存在全局最优解。

  进一步的,由于逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05的取值只有0和1,所以我们可以将逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_07逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05两种不同取值的情况合并成一种,即逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_32,带入代价函数得到: 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_33

即:逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_34

  我们可以将逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_24逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_19代入式子中验证,结果和原先的一样。

(二)梯度下降(Gradient Descent)

  在有了代价函数之后,我们就可以进行梯度下降了,方法不变,关键是对代价函数求取偏导。

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_37


  直接给出求偏导后的参数更新公式,推导过程见最后:

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_38


  我们可能会诧异逻辑回归的梯度下降公式怎么和线性回归的一模一样,其实并不相同。对于线性回归假设函数:逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_39;而现在逻辑函数假设函数:逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_40。因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。

  还有一点需要说明,特征缩放也适用于逻辑回归。如果变量特征范围差距很大的话,那么应用特征缩放的方法,可以使梯度下降收敛更快。

(三)高级优化(Advanced Optimization)

  到目前为止,对模型参数的优化只有一种方法,就是梯度下降,这里介绍几个其他的高级优化算法,利用这些方法,我们就能够通过梯度下降,将逻辑回归的速度大大提高,而这也将使算法更加适合解决大型的机器学习问题。主要的高级优化算法有共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)。它们有许多的优点,例如使用这其中任何一个算法,通常不需要手动选择学习率 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_41,依靠线性搜索(line search)算法,它可以自动尝试不同的学习速率 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_41,并自动选择一个好的学习速率 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_43,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。这些算法实际上在做更复杂的事情,不仅仅是选择一个好的学习速率,所以它们往往最终比梯度下降收敛得快多了。
  它们需要有一种方法来计算 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_44,以及需要一种方法计算偏导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。

(四)多类别分类(Multiclass Classification)

  之前我们讲的分类问题都是二元分类问题,现在讲多元分类问题。先看这样一些例子:

eg1:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_19逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_46逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_47逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_48

eg2:如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_19 这个类别来代表;或者患了感冒,用 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_46 来代表;或者得了流感用逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_47来代表。

eg3:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天、或者下雪天,对上述所有的例子,逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_05

  以上都是多元分类问题,我们采用一对多的方法解决该类问题,具体来看,假设有这样一个数据集,我们要将这三块分开。

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_53


  所谓的“一对多”就是每次将要分类的数据分成一组和其他组。例如上图,在第一次判定边界的时候,将Class1作为一组,且令其为正向类;将Class2和Class3作为一组,且令其为负向类,结果如图:

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_54


  这时候,我们训练一个标准的逻辑回归分类器,会得到一个模型记做逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_55,其值就是为正向类即Class1的概率;第二次,将Class2作为一组,令其为正向类;令Class1和Class3为一组,令其为负向类,训练也可以得到一个逻辑回归分类器,记做逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_56,其值就是为正向类即Class2的概率;同理可以得到模型逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_57,其值就是为正向类即Class3的概率。最后我们得到一系列的模型简记为: 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_58其中:逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_59

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_60

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_61 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_61,然后我们选择一个让 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_63 最大的逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_64,即逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_65,即可得到逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_61属于Class i 。说明一下,有多少个需要分类的数据就要训练多少个逻辑回归分类器,上图中有3个需要分类,我们就有3个逻辑回归分类器需要训练。

  逻辑回归梯度下降公式推导:
逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_34

考虑: 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_68

则: 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_69

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_70

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_71

所以: 逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_72

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_73

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_74

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_75

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_梯度下降_76

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_机器学习_77

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_78

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_逻辑回归_79

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_代价函数_80

逻辑回归 网格搜索 nvalid parameter penalty for estimator 逻辑回归的优化_最优解_81