机器学习笔记

  上一篇比较深入地去理解了线性回归的思想和算法。分类和回归是机器学习中很重要的两大内容。而本篇要讲的Logistic Regression,名字上看是回归,但实际上却又和分类有关。

  之前提过的二元分类器如PLA,其目标函数为, ,输出要么是-1要么是+1,是一个“硬”的分类器。而Logistic Regression是一个“软”的分类器,它的输出是的概率,因此Logistic Regression的目标函数是

方程的形式

  上面的方程背后有什么逻辑呢?

  假设医院知道一个病人的年龄、性别、血压、胆固醇水平,可以为他计算他得某种病的概率。最简单的做法就是对这几个特征进行加权求和:

  但这里有个问题,就是 的取值范围是,而我们希望输出的是对该病人患病概率的一个估计,就需要把输出空间转换到上。如何变换?通过sigmoid函数

  因此,我们就可以利用经过sigmoid变换后的方程来对患病概率进行一个估计。

误差的衡量 - Cross Entropy Error

  有了方程的形式,我们就需要一个误差的衡量方式。上一篇我们讲到Linear Regression所使用的是平方误差,那么Logistic 可以使用平方误差吗?当然可以,error是人定的,你爱怎么定就怎么定,但是使用平方误差好不好,不好。为什么呢?

  如果使用平方误差,每个点产生的误差是:

  此时cost function,就是一个关于的非凸函数(non-convex):

  非凸函数由于存在很多个局部最小点,因此很难去做最优化(解全局最小)。所以Logistic Regression没有使用平方误差来定义error,而是使用极大似然法来估计模型的参数。那么我们就要先来了解一下这个似然性(likelihood)。

  Logistic Regression的目标函数的输出是,在已知的条件下,的概率,因此在已知的条件下,的概率是的概率是:

  考虑我们的训练样本,并不是每次抽样都能抽到一模一样的,抽到这么一份样本是由于各种的机缘巧合。那么我们能抽到这么一份的概率取决于两部分:1、抽到样本的概率;2、这些样本对应的等于的概率。

  对于目标函数 ,抽到的概率只取决于第1部分,而我们无法知道 ,即第2部分也是未知的,因此我们称在 的作用下抽出的概率为“似然性”。如果 ,则 ,并且我们认为在 的作用下,产生这样的样本的概率通常是非常的大的。

  所以有:

  则理想的hypothesis就是能使得似然函数最大的那个

  当是logistic函数的时候,即,由于logistic函数的中心对称性,有:

  所以有:

  因此有这么一个相似性:

  我们的目标是想找到一个似然性最大的方程:

  转化成与参数有关的形式:

  求解上式最大值,等价于求解下式的最小值:

  求和符号后面的部分就是在极大似然估计下,logistic方程的误差函数,这种形式的误差函数称为cross entropy error:

Cost function

  有了误差函数后,我们就可以定出Cost function:

  该函数是连续,可微,并且是凸函数(二次微分矩阵是正定的)。

如何最小化

  那么如何能够最小化呢?按照之前Linear Regression的逻辑,由于它是凸函数,如果我们能解出一阶微分(梯度)为0的点,这个问题就解决了。

  先来看看方向上的偏微分:

  再把偏微分方程中的换成向量的形式,就得到的一阶微分:

  和之前的Linear Regression不同,它不是一个线性的式子,要求解这个式子,是困难的。那么该使用何种方法实现最小化呢?

  这里可以使用类似PLA当中的,通过迭代的方式来求解,这种方法又称为梯度下降法(Gradient Descent)。

  For t = 0, 1, ...

  

  when stop, return

  其中为每步更新的大小(step size),是单位向量,表示每次更新的方向。

  有点类似一个小球,往山谷方向滚,直至山谷。每一步我们只要决定两个东西:1、滚动的方向;2、滚动的步长。

  滚动的方向好决定,即在该点一阶微分后的向量所指的方向:

  步长 比较难决定,太小了,更新太慢,太大了,容易矫枉过正:

  一个比较好的做法是让 成一定的比例,让新的和成比例的 来代替原来

  我们称这个

  再来完整的梳理下梯度下降法(Gradient Descent):

  initialize

  For t = 0, 1, ...

  1. compute

  2. update by

  ...until or enough iterations

  return