Mengqi's blog

Logistic 回归


最近项目需要,用到了 Logistic 回归(Logistic Regression),因此又跟着 Andrew Ng 的机器学习课程复习了一遍相关知识,整理如下:

一、问题的引入

使用线性回归方法是可以引申来处理分类问题的,一般是用回归得到假设值 hθ(x)h_\theta (x) 来决定类别归属。例如:hθ(x)<0.5h_\theta (x) < 0.5 时,y = 0;hθ(x)>0.5h_\theta (x) > 0.5 时,y = 1。

然而,线性回归得到的假设值 hθ(x)h_\theta (x) 有可能 >1>1 或是 <0<0,而且有可能会超出很多,这种情况下使用线性回归似乎不是很好的选择。

为了解决这个问题,我们引入 Logistic 回归方法,将 hθ(x)h_\theta (x) 限制在 (0,1)(0,1) 范围内。

注意,Logistic 回归是一种分类方法,而不是回归方法,名字中的「回归」是历史原因造成的。

二、Logistic 函数(Logistic Function)

线性回归中,假设函数 hθ(x)=θxh_\theta (x)=\theta ^\top x,这里将截距"藏"在了向量中,即θ=[θ0,θ1,,θn]\theta=[\theta_0, \theta_1, \cdots, \theta_n]^\topx=[1,x1,x2,,xn]x=[1, x_1, x_2, \cdots, x_n]^\top

而在 Logistic 回归中,我们使用一个函数来限制假设函数的值域,这个函数就叫做 Logistic 函数(Logistic Function,也叫 Sigmoid Function)。

Logistic Function:

g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}

它的函数图像: 逻辑回归函数图像

从图像中可以看出,逻辑回归函数将输入的(,)(-\infty, \infty)空间映射到了(0,1)(0,1)空间,即将值域限制在了(0,1)(0,1)之内。 限制后的假设函数为:

hθ(x)=g(θx)=11+eθxh_\theta (x)=g(\theta ^\top x)=\frac{1}{1+e^{-\theta ^\top x}}

注意该假设函数中,只有一个参数:θ\theta,我们接下来就需要通过优化来求解这个参数,以确定分类模型。

三、假设函数的直观解释

由于假设函数的值域为(0,1)(0,1),而hθ(x)h_\theta (x)值越接近1,就越有可能是 y=1 类;反之hθ(x)h_\theta (x)值越接近0,越有可能是 y=0 类。

这样看来,假设函数 hθ(x)h_\theta (x) 可以看做是给定 x,其类别 y=1 的估计概率,即

hθ(x)=P(y=1x;θ)h_\theta (x)=P(y=1 \mid x;\theta )

四、寻求优化参数 θ\theta

一般来说,寻找参数的过程就是优化目标函数的过程。

4.1 线性回归的目标函数

在线性回归中,我们的目标函数为:

J(θ)=1mi=1m12(hθ(x(i))y(i))2J(\theta )=\frac{1}{m} \sum_{i=1}^m \frac{1}{2} (h_\theta (x^{(i)})-y^{(i)})^2

其中,12(hθ(x(i))y(i))2\frac{1}{2} (h_\theta (x^{(i)})-y^{(i)})^2 部分就是损失函数,即Cost(hθ(x(i)),y(i))Cost(h_\theta (x^{(i)}), y^{(i)})

线性回归的优化目标就是最小化这个目标函数,即让各个样本点的误差达到最小。

4.2 Logistic 回归的目标函数

4.2.1 平方形式的损失函数

我们把 Logistic 回归的假设函数 hθ(x)=11+eθxh_\theta (x)=\frac{1}{1+e^{-\theta ^\top x}} 代入到线性回归的损失函数中,得到:

Cost(hθ(x),y)=12(hθ(x)y)2=11+eθxCost(h_\theta (x), y) = \frac{1}{2} (h_\theta (x)-y)^2 = \frac{1}{1+e^{-\theta ^\top x}}

为简便起见,这里以后,将各个点的误差hθ(x(i))y(i)h_\theta (x^{(i)})-y^{(i)}简写为hθ(x)yh_\theta (x)-y

然而,这样的损失函数代入J(θ)=1mi=1mCost(hθx,y)J(\theta )=\frac{1}{m} \sum\limits_{i=1}^m Cost(h_\theta x, y) 中,得到的目标函数 J(θ)J(\theta ) 并非凸函数,其函数图像类似下图的左子图。

非凸函数和凸函数

只有目标函数是凸函数时,我们才能通过各种优化方法(如梯度下降、牛顿法等)找到极值点,进而得到最优值对应的参数。 因此,Logistic 回归需要调整其损失函数形式,以使得目标函数为凸函数。

4.2.2 对数形式的损失函数

Logistic 回归采用的损失函数为:

Cost(hθ(x),y)={log(hθ(x))if y=1log(1hθ(x))if y=0Cost(h_\theta (x), y)= \begin{cases} -log(h_\theta (x)) &\text{if y=1} \\ -log(1-h_\theta (x)) &\text{if y=0} \end{cases}

这两个函数 log(hθ(x))-log(h_\theta (x))log(1hθ(x))-log(1-h_\theta (x)) 的函数图像如下图所示。可以看出,当 y=1 时,随着 hθ(x)h_\theta (x) 逐渐趋近于 0(即趋向于「分错类别」),损失函数将剧烈上升,趋向于 \infty,而当 hθ(x)h_\theta (x) 逐渐趋近于 1(即趋向于「分对类别」) 时,损失函数则会逐渐减小到 0。当 y=0 时,情况类似。

可见,当分错类别时,这个损失函数会得到一个比较大的损失,进而来惩罚分类算法。

损失函数

简化损失函数

上面对数形式损失函数是分段形式的,我们可以将两个式子压缩成一个式子:

Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))Cost(h_\theta (x), y) = -ylog(h_\theta (x)) -(1-y)log(1-h_\theta (x))

当 y=0 时,取后半段;当 y=1 时,取前半段。

由此,我们终于得到了 Logistic 回归的目标函数J(θ)J(\theta)

J(θ)=1mi=1mCost(hθ(x(i)),y(i))=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))] \begin{aligned} J(\theta) & = \frac{1}{m} \sum_{i=1}^m Cost(h_\theta(x^{(i)}), y^{(i)}) \\ & = -\frac{1}{m} [\sum_{i=1}^m y^{(i)}log h_\theta(x^{(i)}) + (1-y^{(i)})log (1-h_\theta (x^{(i)}))] \\\ \end{aligned}

4.3 优化目标函数求参

优化目标函数:minθJ(θ)\min_{\theta} J(\theta),即可得到参数 θ\theta

那么,如何优化目标函数呢?优化方法有很多种,这里讲一下「梯度下降法」:

4.3.1 梯度下降法(Gradient Descent)

梯度下降法的原理这里不详细解释了,方法比较直观,网上有很多教程可以参考。

梯度下降法的使用很简单:在目标函数上任找一点开始,让参数 θ\theta 不断朝着梯度方向迭代,直到收敛,收敛时函数位于极小值处,此时的 θ\theta 即为 minθJ(θ)\min_{\theta} J(\theta)

每一步迭代的形式化定义如下:

θj:=θjαθjJ(θ)\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta)

这里引入了一个新的参数:α\alpha,表示迭代速度,在这里作为调控因子。另外式子中 J(θ)J(\theta) 关于 θ\theta 的梯度可以计算得到:

θjJ(θ)=1mi=1m(hθ(x(i))y(i))xj(i)\frac{\partial}{\partial \theta_j} J(\theta) = \frac{1}{m} \sum_{i=1}^m(h_\theta (x^{(i)}) - y^{(i)})x_j^{(i)}

此外,还要注意的是,梯度下降法迭代时,是所有参数:θ0,θ1,,θn\theta_0, \theta_1, \cdots, \theta_n 同时迭代的,这个可以以向量形式进行批量计算。

在梯度下降中,需要计算i=1m(hθ(x(i))y(i))xj(i)\sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)})x_j^{(i)},也就是每一个样本 x(i)x^{(i)} 都要参与计算。这样在样本量较大时,难免效率底下。有一些改进的方法来解决这个问题,例如随机梯度下降法等,这里就不展开了。

五、用求得的参数进行分类

使用求得的参数 θ\theta,进而预测新的未知变量 xx

hθ(x)=11+eθxh_\theta(x)=\frac{1}{1+e^{-\theta ^\top x}}

之前提过了,这个 hθ(x)h_\theta(x) 直观意义为:给定 x,其类别 y=1 的估计概率,即hθ(x)=P(y=1x;θ)h_\theta (x)=P(y=1 \mid x;\theta ) 因此,我们有了 hθ(x)h_\theta(x),就能确定未知样本的分类了。