update conclusion on logistic regression.

This commit is contained in:
Shine wOng
2020-01-14 14:58:48 +08:00
parent efe83d5231
commit a0055de70c
12 changed files with 289 additions and 100 deletions

View File

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,100 +0,0 @@
逻辑回归问题总结
==============
## 目录
+ 摘要
+ 逻辑回归概述
- 逻辑回归的假设函数
+ 假设函数的意义
+ 决策边界
- 损失函数
- 为什么不使用平方损失函数
- 对数损失函数
- 最大似然估计
- 多分类问题
+ 梯度下降法
- 对数损失函数是凸函数
+ 过拟合
- 正则化的损失函数
## 逻辑回归概述
在 [线性回归总结](../linear\ regression/linear\ regression.md) 中,简单介绍了线性回归问题,这里将要阐述的逻辑回归,却并不是回归问题,而是一个分类问题(`classification problem`)。分类问题与回归问题的主要界限,在于分类问题的输出是离散值,而回归问题的输出是连续的。根据分类问题输出取值数量的不同,又可以分为**二分类问题**和**多分类问题**,这里主要阐述二分类问题。
二分类问题的输出一般为0或者1表示某一特定的事件不发生或者发生比如辅助诊断系统判断患者患病或者不患病邮件分类系统判断邮件是否是垃圾邮件都是典型的二分类问题。
为了训练二分类问题,一种直觉上的方法是直接套用此前的线性回归模型,这样就可以得到模型的假设函数为
$$
h_\theta(x) = \theta^Tx
$$
仍然使用此前的平方损失函数以及梯度下降法(或者规范方程法)来对模型进行求解,对于某个简单的数据集,可以得到下面的结果
![fig1](images/fig1.png)
此时$h_\theta(x)$的输出值仍然是连续值而二分类问题要求模型的输出是0或者1因此需要对假设函数的输出进行进一步处理。这里可以简单地令$\hat{y} = 1$当且仅当$h_\theta(x) >= 0.5$,令$\hat{y} = 0$当且仅当$h_\theta(x) < 0.5$。可以看到,采用这种策略时,对上图的数据具有很高的预测正确率。
然而这种方法却也有局限性,考虑在训练集中增加一个样本点$X = 80, y = 1$,此时线性回归模型的结果如下图所示:
![fig2](images/fig2.png)
可以看到,此时回归直线相对此前向右偏移,模型对训练集的预测能力下降了不少。可以想象,如果训练集中还有更多这样的极端数据,回归的直线将继续向右偏移,模型的预测能力将继续下降。
此外,线性回归模型的假设函数,其值域是$(-\infty, +\infty)$,而分类问题的输出$y$无非是0或者1而已当$h_\theta(x) > 1$或者$h_\theta(x) < 0$时不具有意义。可见,简单套用线性回归的方法来解决分类问题是行不通的。
### 逻辑回归的假设函数
可以做一些简单的修改,使得假设函数的值域限制在$[0, 1]$。这里引入**sigmoid函数**,它的表达式$g(z)$满足
$$
g(z) = \frac{1}{1 + e^{-z}}
$$
可以看出,它的取值范围恰好在$(0, 1)$之间,实际上,它的图像如下所示:
![sigmoid](images/sigmoid.png)
因此,可以把 sigmoid 函数作用到此前的线性回归模型上,就得到了新的假设函数
$$
h_\theta(x) = sigmoid(\theta^Tx)
$$
此时,它的函数值,就可以被理解成在输入为$x$的条件下,$y = 1$的概率,即
$$
P(y = 1| x) = sigmoid(\theta x)
$$
> 决策边界
以下对 sigmoid 函数进行进一步的讨论。前面已经指出,假设函数的返回值,表示的是预测样本为正(`positive`)的概率。一般地,当$h_\theta(x) >= 0.5$时,预测$\hat{y} = 1$;当$h_\theta(y) < 0.5$时,预测$\hat{y} = 0$。这样,$h_\theta(x) = 0.5$就成为正负样本的边界,称为**决策边界**(`decision boundary`)。
$$
h_\theta(x) = sigmoid(\theta^Tx) = 0.5
$$
根据 sigmoid 函数的图像,恰好可以得到
$$
\theta^Tx = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n = 0
$$
容易看出,这是一个(高维)平面的方程,预测为正负的样本,分别分布在该平面的两侧。因此,逻辑回归的假设函数,本质上就是找到这样一个高维平面对样本点进行划分,达到尽可能高的划分正确率。
利用**多项式回归**,可以得到更加复杂的决策边界。比如令
$$
h_\theta(x) = sigmoid(\theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 + \theta_4x_2^2)
$$
则得到的决策边界为
$$
\theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 + \theta_4x_2^2 = 0
$$
容易看出,这是一个圆锥曲线的方程。因此,通过构造更高阶的多项式,可以得到相当复杂的决策边界,从而将逻辑回归应用到更加复杂的分类问题当中。

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,289 @@
逻辑回归问题总结
==============
## 目录
+ 摘要
+ 逻辑回归概述
- 逻辑回归的假设函数
+ 假设函数的意义
+ 决策边界
- 损失函数
+ 为什么对数似然函数
+ 对数似然函数是凸函数
- 多分类问题
+ 过拟合
- 正则化的损失函数
## 逻辑回归概述
在 [线性回归总结](../linear_regression/linear_regression.md) 中,简单介绍了线性回归问题,这里将要阐述的逻辑回归,却并不是回归问题,而是一个分类问题(`classification problem`)。分类问题与回归问题的主要界限,在于分类问题的输出是离散值,而回归问题的输出是连续的。根据分类问题输出取值数量的不同,又可以分为**二分类问题**和**多分类问题**,这里主要阐述二分类问题。
二分类问题的输出一般为0或者1表示某一特定的事件不发生或者发生比如辅助诊断系统判断患者患病或者不患病邮件分类系统判断邮件是否是垃圾邮件都是典型的二分类问题。
为了训练二分类问题,一种直觉上的方法是直接套用此前的线性回归模型,这样就可以得到模型的假设函数为
$$
h_\theta(x) = \theta^Tx
$$
仍然使用此前的平方损失函数以及梯度下降法(或者规范方程法)来对模型进行求解,对于某个简单的数据集,可以得到下面的结果
![fig1](images/fig1.png)
此时$h_\theta(x)$的输出值仍然是连续值而二分类问题要求模型的输出是0或者1因此需要对假设函数的输出进行进一步处理。这里可以简单地令$\hat{y} = 1$当且仅当$h_\theta(x) >= 0.5$,令$\hat{y} = 0$当且仅当$h_\theta(x) < 0.5$。可以看到,采用这种策略时,对上图的数据具有很高的预测正确率。
然而这种方法却也有局限性,考虑在训练集中增加一个样本点$X = 80, y = 1$,此时线性回归模型的结果如下图所示:
![fig2](images/fig2.png)
可以看到,此时回归直线相对此前向右偏移,模型对训练集的预测能力下降了不少。可以想象,如果训练集中还有更多这样的极端数据,回归的直线将继续向右偏移,模型的预测能力将继续下降。
此外,线性回归模型的假设函数,其值域是$(-\infty, +\infty)$,而分类问题的输出$y$无非是0或者1而已当$h_\theta(x) > 1$或者$h_\theta(x) < 0$时不具有意义。可见,简单套用线性回归的方法来解决分类问题是行不通的。
### 逻辑回归的假设函数
可以做一些简单的修改,使得假设函数的值域限制在$[0, 1]$。这里引入**sigmoid函数**,它的表达式$g(z)$满足
$$
g(z) = \frac{1}{1 + e^{-z}}
$$
可以看出,它的取值范围恰好在$(0, 1)$之间,实际上,它的图像如下所示:
![sigmoid](images/sigmoid.png)
因此,可以把 sigmoid 函数作用到此前的线性回归模型上,就得到了新的假设函数
$$
h_\theta(x) = sigmoid(\theta^Tx)
$$
此时,它的函数值,就可以被理解成在输入为$x$的条件下,$y = 1$的概率,即
$$
P(y = 1| x) = sigmoid(\theta x)
$$
> 决策边界
以下对 sigmoid 函数进行进一步的讨论。前面已经指出,假设函数的返回值,表示的是预测样本为正(`positive`)的概率。一般地,当$h_\theta(x) >= 0.5$时,预测$\hat{y} = 1$;当$h_\theta(y) < 0.5$时,预测$\hat{y} = 0$。这样,$h_\theta(x) = 0.5$就成为正负样本的边界,称为**决策边界**(`decision boundary`)。
$$
h_\theta(x) = sigmoid(\theta^Tx) = 0.5
$$
根据 sigmoid 函数的图像,恰好可以得到
$$
\theta^Tx = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n = 0
$$
容易看出,这是一个(高维)平面的方程,预测为正负的样本,分别分布在该平面的两侧。因此,逻辑回归的假设函数,本质上就是找到这样一个高维平面对样本点进行划分,达到尽可能高的划分正确率。
利用**多项式回归**,可以得到更加复杂的决策边界。比如令
$$
h_\theta(x) = sigmoid(\theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 + \theta_4x_2^2)
$$
则得到的决策边界为
$$
\theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 + \theta_4x_2^2 = 0
$$
容易看出,这是一个圆锥曲线的方程。因此,通过构造更高阶的多项式,可以得到相当复杂的决策边界,从而将逻辑回归应用到更加复杂的分类问题当中。
### 逻辑回归的损失函数
在线性回归当中,是使用平方损失函数来作为损失函数,逻辑回归也可以沿用这种方式,即定义$J(\theta)$满足
$$
J(\theta) = \frac{1}{2m}\Sigma_{i = 1}^m(h_\theta(x^{(i)}) - y^{(i)})^2
$$
为了找到一组最优的$\theta$,应该使平方损失函数具有最小值,这里仍然沿用**梯度下降法**来求解。然而,在逻辑回归中,上面的平方损失函数却并非一个凸函数,使用梯度下降法无法确保收敛到全局最优点,等以后我变强了可以考虑给个证明。
因此,实际上并不是使用平方损失函数,而是**对数损失函数**,来作为逻辑回归的损失函数。此时,单个样本的损失函数$cost(h_\theta(x), y)$满足
$$
cost(h_\theta(x), y) = \left\{
\begin{aligned}
-log(h_\theta(x))&, y = 1\\\\
-log(1 - h_theta(x))&, y = 0
\end{aligned}
\right
$$
可以分别画出$y = 0$与$y = 1$的损失函数的图像,以获得一个比较直观的理解。容易看到,当$y = 1$时,对输出的预测值$h_\theta(x)$越接近一,则损失函数的值越小;预测值越接近零,则损失函数的值越大。并且当$h_\theta(x) = 1$时,$cost(h_\theta(x), 1) = 0$,当$h_\theta(x) = 0$时,$cost(h_\theta(x), 1) = +\infty$。该性质是容易理解的,即预测值与真值越接近,则相应的损失就越小。$y = 0$时也有类似的性质。
可以用一种更加简单的方法来表示$cost(h_\theta(x), y)$,即
$$
cost(h_\theta(x), y) = -ylog(h_\theta(x)) - (1-y)log(1 - logh_\theta(x))
$$
因此,整个样本的损失函数为
$$
J(\theta) = \frac{1}{m}\Sigma_{i = 1}^mcost(h_\theta(x^{(i)}), y^{(i)}) = -\frac{1}{m}[\Sigma_{i = 1}^my^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1 - logh_\theta(x^{(i)}))]
$$
> 为什么使用对数似然函数?
使用对数似然函数并非偶然,而是由**最大似然估计**推导而出的。下面给出推导过程:
假设函数$h_\theta(x)$满足
$$
h_\theta(x) = sigmoid(\theta^T \cdot x)
$$
它的意义是在输入为$x$的条件下,输出$y = 1$的概率,即
$$
P(y = 1| x) = sigmoid(\theta^T x)
$$
因此$y | x$服从这样一个两点分布,其中
$$
\begin{aligned}
&P(y = 1| x) = sigmoid(\theta^T x)\\\\
&P(y = 0| x) = 1 - sigmoid(\theta^T x)
\end{aligned}
$$
设样本容量为$m$,其中$y = 1$的样本有$k$个,所以可以写出似然函数
$$
L(\theta) = \Pi_{y^{(i)} = 1}sigmoid(\theta x^{(i)}) \cdot \Pi_{y^{(j) } = 0}(1 - sigmoid(\theta x^{(j)}))
$$
对似然函数进行一些化简
$$
L(\theta) = \Pi_{i = 1}^m \{[h_\theta(x^{(i)})]^{y^{(i)}} \cdot [(1 - h\theta(x^{(i)}))]^{1-y^{(i)}}\}
$$
从而可以得到
$$
lnL(\theta) = \Sigma_{i = 1}^m [y^{(i)}lnh_\theta(x^{(i)}) + (1 - y^{(i)})ln(1 - h_\theta(x^{(i)})]
$$
这样,求似然函数的最大值,就等价于求
$$
J(\theta) = -\frac{1}{m}[\Sigma_{i = 1}^my^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1 - logh_\theta(x^{(i)}))]
$$
的最小值。可见,对数损失函数,实际上与最大似然估计是一脉相承的。
> 对数损失函数是凸函数
相较于平方损失函数,对数似然函数还具有一个优良性质,即它是一个凸函数。证明如下:
再次给出$J(\theta)$的表达式:
$$
J(\theta) = -\frac{1}{m}[\Sigma_{i = 1}^my^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1 - logh_\theta(x^{(i)}))]
$$
所以
$$
\frac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m}\Sigma_{i = 1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}
$$
这里应该看到,对数损失函数以及平方损失函数的一阶偏导的形式是完全相同的(尽管其中的$h_\theta(x)$不同),据说这并不是巧合,而是存在一些深层次的原因,有机会我会回来说明一下。
因此可以给出二阶偏导的表达式
$$
\frac{\partial^2}{\partial \theta_j \partial \theta_k}J(\theta) = \frac{1}{m}\Sigma_{i = 1}^mx_j^{(i)}\frac{e^{-z}}{(1 + e^{-z})^2}x_k^{(i)},\ z = \theta^Tx^{(i)}
$$
可以看出,$\frac{e^{-z}}{(1 + e^{-z})^2}$一定是大于零的。不妨设$g(x)$为
$$
g(x) = \sqrt{\frac{e^{-\theta^Tx}}{(1 + e^{-\theta^Tx})^2}}
$$
构造矩阵$G$为
$$
G = \left[
\begin{matrix}
g(x^{(1)}) & & &\\\\
& g(x^{(2)}) & &\\\\
& & \ddots & \\\\
& & & g(x^{(m)})
\end{matrix}
\right]
$$
所以对数损失函数的 Hessian 矩阵为
$$
H = \frac{1}{m}\left[
\begin{matrix}
\frac{\partial^2}{\partial \theta_0^2}J(\theta) & \frac{\partial^2}{\partial \theta_0 \partial \theta_1}J(\theta) & \cdots & \frac{\partial^2}{\partial \theta_0 \partial \theta_n}J(\theta)\\\\
\frac{\partial^2}{\partial \theta_1 \partial \theta_0}J(\theta) & \frac{\partial^2}{\partial \theta_1^2}J(\theta)
& \cdots & \frac{\partial^2}{\partial \theta_1 \partial \theta_n}J(\theta)\\\\
\vdots & \vdots & & \vdots\\\\
\frac{\partial^2}{\partial \theta_n \partial \theta_0}J(\theta) & \frac{\partial^2}{\partial \theta_n \partial \theta_1}J(\theta) & \cdots & \frac{\partial^2}{\partial \theta_n^2}J(\theta)
\end{matrix}
\right]
$$
容易看出(?,
$$
H = \frac{1}{m}(GX)^TGX
$$
因此Hessian 矩阵是一个半正定矩阵,从而对数损失函数确实是一个凸函数,得证。同理可得,规范化后的对数损失函数也是一个凸函数,这里不再赘述。这样,利用梯度下降法求解对数损失函数的最小值,一定可以收敛到全局最优点。
### 多分类问题
顾名思义,多分类问题中预测的结果可以有多个(多于两个)取值,比如给定一个图片集,将每张图片划分为行人,车辆,道路,树木四个类别。为了求解多分类问题,可以简单地套用二分类问题的方法。
具体说来,假设多分类问题中一共有$k(k \ge 3)$个类别,因此预测值$y$有$k$个不同的取值。套用二分类问题的方法是,对于每一个类别$c$,定义输出为$c$时$y = 1$,输出不为$c$时$y = 0$,这样就把问题转化为了一个二分类问题。可见,对于任一个类别,都需要训练一个二分类器,最终一共需要训练$k$个二分类器,即
$$
h_\theta^{(i)}(x) = P(y = i | x)\ (i = 1, 2, 3, ..., k)
$$
对模型进行预测时,分别使用$k$个二分类器对模型进行预测,可以得到$k$个概率,分别表示在当前输入的条件下,输出为某个类别的可能性。最后,简单选择可能性最大的一个类别,作为多分类问题的输出,即
$$
max_i h_\theta^{(i)}(x)
$$
## 过拟合
在此前的 [线性回归总结](../linear_regression/linear_regression.md) 中,已经对过拟合问题进行了一些探讨,这里主要是结合实例,直观地说明过拟合问题及其解决方案。
为了解决过拟合,仍然可以对此前的对数损失函数添加**正则化项**,正则化后的损失函数$J(\theta)$
$$
J(\theta) = -\frac{1}{m}[\Sigma_{i = 1}^my^{(i)}log(h_\theta(x^{(i)})) + (1-y^{(i)})log(1 - logh_\theta(x^{(i)}))] + \frac{\lambda}{2m}\Sigma_{i = j}^n\theta_j^2
$$
下面以一个具体实例,直观地展示过拟合现象以及正则化对过拟合的影响。这个实例是一个二类分类问题,输入$x$是一个二维向量,即具有两个特征$x_1, x_2$。首先对原始数据进行可视化,如下图所示:
![initial_data](images/initial_data.png)
其中用圆圈标识$y = 0$的实例,用十字标识$y = 1$的实例,容易看出,原始数据并不服从线性分布,因此考虑添加高次项,利用多项式回归对该模型进行拟合。这里是添加了$x_1, x_2$的所有二次项与三次项,再加上$x_0$处理后的输入具有28个特征。
之后我手动将这些数据划分成了训练集和测试集其中测试集占所有数据的20%。然后分别使用未正则化的损失函数与正则化的损失函数($\lambda = 1$),利用梯度下降法对模型进行训练。结果如下:
![overfit](images/overfit.png)
![justfit](images/justfit.png)
图中黑色的圆圈或者十字是表示训练集的实例而红色边界的圆圈或者十字表示的是测试集实例。可以看到未经过正则化的损失函数训练出来的模型决策边界相对复杂具有许多高次项同时对于训练集有更高的预测准确率87.21%而正则化后的损失函数利用梯度下降法训练出的决策边界则要简单很多比较规则对训练集的准确率也要低一些80.23%)。
尽管如此未正则化的模型对于测试集数据的预测正确率则要低了不少81.25%而正则化的模型则对测试集有更高的预测准确率84.375%)。这说明没有正则化虽然可以获得更高的训练集预测准确率,却难以将训练得到的模型**泛化**到其他输入数据当中,因此发生了过拟合。而引入正则化则可以使训练的模型具有更好的**泛化能力**。

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB