From a0055de70cb41edcd09b6ce72594a4f2f91036d0 Mon Sep 17 00:00:00 2001 From: Shine wOng <1551885@tongji.edu.cn> Date: Tue, 14 Jan 2020 14:58:48 +0800 Subject: [PATCH] update conclusion on logistic regression. --- .../images/gd_diff_path.jpg | Bin .../images/overfitting.jpeg | Bin .../images/select_alpha.png | Bin .../linear_regression.md} | 0 ml/logistic regression/logistic regression.md | 100 ------ .../images/fig1.png | Bin .../images/fig2.png | Bin .../images/sigmoid.png | Bin ml/logistic_regression/initial_data.png | Bin 0 -> 17510 bytes ml/logistic_regression/justfit.png | Bin 0 -> 26190 bytes ml/logistic_regression/logistic_regression.md | 289 ++++++++++++++++++ ml/logistic_regression/overfit.png | Bin 0 -> 27880 bytes 12 files changed, 289 insertions(+), 100 deletions(-) rename ml/{linear regression => linear_regression}/images/gd_diff_path.jpg (100%) rename ml/{linear regression => linear_regression}/images/overfitting.jpeg (100%) rename ml/{linear regression => linear_regression}/images/select_alpha.png (100%) rename ml/{linear regression/linear regression.md => linear_regression/linear_regression.md} (100%) delete mode 100644 ml/logistic regression/logistic regression.md rename ml/{logistic regression => logistic_regression}/images/fig1.png (100%) rename ml/{logistic regression => logistic_regression}/images/fig2.png (100%) rename ml/{logistic regression => logistic_regression}/images/sigmoid.png (100%) create mode 100644 ml/logistic_regression/initial_data.png create mode 100644 ml/logistic_regression/justfit.png create mode 100644 ml/logistic_regression/logistic_regression.md create mode 100644 ml/logistic_regression/overfit.png diff --git a/ml/linear regression/images/gd_diff_path.jpg b/ml/linear_regression/images/gd_diff_path.jpg similarity index 100% rename from ml/linear regression/images/gd_diff_path.jpg rename to ml/linear_regression/images/gd_diff_path.jpg diff --git a/ml/linear regression/images/overfitting.jpeg b/ml/linear_regression/images/overfitting.jpeg similarity index 100% rename from ml/linear regression/images/overfitting.jpeg rename to ml/linear_regression/images/overfitting.jpeg diff --git a/ml/linear regression/images/select_alpha.png b/ml/linear_regression/images/select_alpha.png similarity index 100% rename from ml/linear regression/images/select_alpha.png rename to ml/linear_regression/images/select_alpha.png diff --git a/ml/linear regression/linear regression.md b/ml/linear_regression/linear_regression.md similarity index 100% rename from ml/linear regression/linear regression.md rename to ml/linear_regression/linear_regression.md diff --git a/ml/logistic regression/logistic regression.md b/ml/logistic regression/logistic regression.md deleted file mode 100644 index 8780a0d..0000000 --- a/ml/logistic regression/logistic regression.md +++ /dev/null @@ -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 -$$ - -容易看出,这是一个圆锥曲线的方程。因此,通过构造更高阶的多项式,可以得到相当复杂的决策边界,从而将逻辑回归应用到更加复杂的分类问题当中。 diff --git a/ml/logistic regression/images/fig1.png b/ml/logistic_regression/images/fig1.png similarity index 100% rename from ml/logistic regression/images/fig1.png rename to ml/logistic_regression/images/fig1.png diff --git a/ml/logistic regression/images/fig2.png b/ml/logistic_regression/images/fig2.png similarity index 100% rename from ml/logistic regression/images/fig2.png rename to ml/logistic_regression/images/fig2.png diff --git a/ml/logistic regression/images/sigmoid.png b/ml/logistic_regression/images/sigmoid.png similarity index 100% rename from ml/logistic regression/images/sigmoid.png rename to ml/logistic_regression/images/sigmoid.png diff --git a/ml/logistic_regression/initial_data.png b/ml/logistic_regression/initial_data.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb44b06d711de7496a43334dc667770fa46cbda GIT binary patch literal 17510 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 literal 0 HcmV?d00001 diff --git a/ml/logistic_regression/justfit.png b/ml/logistic_regression/justfit.png new file mode 100644 index 0000000000000000000000000000000000000000..ed58969346b8a7ff7dc3c0f92ae13135a176c3e7 GIT binary patch literal 26190 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 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%)。这说明没有正则化虽然可以获得更高的训练集预测准确率,却难以将训练得到的模型**泛化**到其他输入数据当中,因此发生了过拟合。而引入正则化则可以使训练的模型具有更好的**泛化能力**。 diff --git a/ml/logistic_regression/overfit.png b/ml/logistic_regression/overfit.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac98b229081f6a93961b244e5bd07f72c229881 GIT binary patch literal 27880 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 literal 0 HcmV?d00001