机器学习入门之线性回归与逻辑回归

541 阅读8分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

前言

本文为吴恩达机器学习课程的笔记系列第一篇,主要关于线性回归与逻辑回归的详细推导,以及介绍两者之间的区别。


线性回归 LinearRegression

单元线性回归

属于回归问题,我们先来看代价函数的定义。

代价函数 cost function

线性平方代价函数:

hθ(x)=θ0+θ1xh_{\theta}(x)=\theta_0+\theta_1x

建模误差平方和:

J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J(\theta_0,\theta_1)=\dfrac{1}{2m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})^2

几个概念:

  • 误差平方和(Sum of the Squared Errors,即SSE):用来表明函数拟合的好坏

  • 均方误差(MSE):,指参数估计值与参数真值之差的平方的期望值。

梯度下降 gradient descent

基于经典的下山问题,即当你在山上的某一点时,因如何在山上选择最佳的下山方向,以及每一步因走多大。梯度下降目的是用来求代价函数最小值。

算法思想:

  • 初始选择一个参数组合,计算代价函数
  • 接着寻找得使得代价函数值下降最多的参数组合,并同样计算代价函数
  • 持续上述过程,直至目标值为局部最小值

批量梯度下降(batch gradient descent)

公式(假设两个参数):θj=θjαθjJ(θ0,θj)\theta_j = \theta_j - \alpha\dfrac{\partial}{\partial\theta_j}J(\theta_0,\theta_j)

  • α\alpha 为学习率(learing rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
  • 对于多个θ\theta ,必须同步更新值,学习率也是会更新的,因为越接近极值点,我们的学习率也就是下山的步长应该越小,这样的结果才越准确。实际上就是要偏导数为0,使之收敛于局部最优解。

如何选择 α\alpha 值?

  • 基于上式,我们可以看到若 α\alpha 太小,每一次的步伐非常小,一点一点移动接近最低点,这样一次迭代花费时间会很久。
  • α\alpha 太大,那么移动步伐过大,可能会越过最低点,下一次迭代移动又再越一次,一次次越过最低点,这样就会导致无法收敛。
  • 一般实际应用中,选择一组区间如 [0.01,0.1,1,10][0.01,0.1,1,10] 这样去多次尝试,再根据结果进一步更选择合适的区间。

在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,也就是 α\alpha 没必要在此时另外减小了。

梯度下降的线性回归

梯度下降算法:

Repeat  until  convergence{θj=θjαθ0J(θ0,θ1)for  j=0  and  1}\begin{aligned} &Repeat\;until\;convergence\{ \\ & \quad\theta_j=\theta_j-\alpha\dfrac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) \\ & \quad for\;j=0\;and\;1\\ &\} \end{aligned}

对代价函数求导:

θjJ(θ0,θ1)=θj12mi=1m(hθ(x(i))y(i))2\dfrac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)=\dfrac{\partial}{\partial\theta_j}\frac{1}{2m}\sum\limits_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2

j=0,θ0J(θ0,θ1)=1mi=1m(hθ(x(i))y(i)),θ0=θ0α1mi=1m(hθ(x(i))y(i))j=0,\quad\dfrac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)}),\quad\theta_0=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})

j=1,θ1J(θ0,θ1)=1mi=1m(hθ(x(i))y(i))x(i),θ1=θ1α1mi=1m(hθ(x(i))y(i))x(i)j=1,\quad\dfrac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})\cdot x^{(i)},\quad\theta_1=\theta_1-\alpha\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})\cdot x^{(i)}

我们也可以利用**“最小二乘法”**来对模型求解。在线性回归中,最小二乘法就是试图找到一条直线,是所有样本到直线上的欧式距离之和最小,也就是模型中的J(θ0,θ1)J(\theta_0,\theta_1) 最小。

解法:分别对 θ0,θ1\theta_0,\theta_1 求导并令所求式子为0,从而解出θ0,θ1\theta_0,\theta_1 最优解。

多元线性回归

其实就是 单特征=>多维特征,用向量表示

假设特征数量为 nn ,特征矩阵如下:

X=x(1):x(2):x(3):...特征1特征2特征3特征410.241620.635450.5608............=[x(1)Tx(2)Tx(3)T...x(n)T]X=\begin{matrix}\\\\x^{(1)}:\\x^{(2)}:\\x^{(3)}:\\...\end{matrix}\begin{matrix}\\\text{特征}1&\text{特征}2&\text{特征}3&\text{特征}4\\1&0.2&41&6\\2&0.6&35&4\\5&0.5&60&8\\...&...&...&...\end{matrix}=\begin{bmatrix}x^{(1)^T}\\x^{(2)^T}\\x^{(3)^T}\\...\\x^{(n)^T}\\\end{bmatrix}

x(i)x^{(i)}代表第 ii 个特征实例,也就是特征矩阵的第 ii 行,是一个向量,如 x(2)=[20.6354]x^{(2)}=\begin{bmatrix}2\newline0.6\newline35\newline4\end{bmatrix}

多变量的 hh 表示为:

hθ(x)=θ0+θ1x+θ2x2+...+θnxnh_{\theta}(x)=\theta_0+\theta_1x+\theta_2x_2+...+\theta_nx_n

可以看出,参数为一个 n+1n+1 维的向量,特征矩阵的维度为 m(n+1)m*(n+1),为了计算方便,我们引入 x0=1x_0=1,即公式变为:

hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxnh_{\theta}(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n

θ=[θ0θ1...θn]\theta = \begin{bmatrix}\theta_0\newline\theta_1\newline...\newline\theta_n\end{bmatrix}

故进一步简化:hθ(x)=θTxh_{\theta}(x)=\theta^Tx

梯度下降

在单元线性回归的梯度下降基础上拓展,

θjJ(θj)=θj12mi=1m(hθ(x(i))y(i))2\dfrac{\partial}{\partial\theta_j}J(\theta_j)=\dfrac{\partial}{\partial\theta_j}\frac{1}{2m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})^2

特征缩放:放缩每个特征,大约至 [1,1][-1,1]

均值归一化(Mean normalization):就是标准化

  • xi=xiμimaxminx_i = \dfrac{x_i-\mu_i}{max-min}
  • i>1,因为x0=1i>1,\text{因为}x_0=1

正规方程

假设训练集结果为向量 yy ,引入x0x_0 后,特征矩阵也可写为:

X=特征1特征2特征3特征410.241620.635450.5608............=1x(1)T1x(2)T1x(3)T1...X=\begin{matrix}\\\text{特征}1&\text{特征}2&\text{特征}3&\text{特征}4\\1&0.2&41&6\\2&0.6&35&4\\5&0.5&60&8\\...&...&...&...\end{matrix}=\begin{matrix}\\\\1&x^{(1)^T}\\1&x^{(2)^T}\\1&x^{(3)^T}\\1&...\end{matrix}

将上述的代价函数写作矩阵形式:

J(θ)=12m(Xθy)T(Xθy)J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y)

实际上就是求解使得 J(θ)J(\theta) 最小的 参数 θ\theta 值,即如下表示:

θ=argmin(Xθy)T(Xθy)\theta = argmin(X\theta-y)^T(X\theta-y)

Eθ=(Xθy)T(Xθy)E_{\theta}=(X\theta-y)^T(X\theta-y) ,对 θ\theta 求导可解得:

θ=(XTX)1XTy\theta = (X^TX)^{-1}X^Ty

梯度下降与正规方程的比较

梯度下降正规方程
需要选择学习率 α\alpha不需要学习率 α\alpha
需要进行多步迭代不需要进行迭代,矩阵运算仅需一行代码就可完成
多特征下,适应性较好矩阵逆的计算复杂度为 O(n3n^3),所以如果特征维度太高(特别是超过 10000 维),运算代价大,不宜再考虑该方法
能应用到一些更加复杂的算法中,适用于各种类型的模型矩阵需要可逆,并且,对于一些更复杂的算法,该方法无法工作。只适用于线性回归模型,不适合逻辑回归模型等其他模型

逻辑回归 Logistic Regression

属于分类问题。对于分类问题,数据一般是离散的,应用线性回归的方法处理分类问题并不是一个很好的方法,所以下面介绍一种处理分类问题的经典算法——逻辑回归。

逻辑回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计,使得输出的变量范围始终在0和1之间。下面以二分类问题为例介绍该算法。

逻辑回归的分布函数采用的是 SigmoidSigmoid 函数: g(z)=11+ezg(z)=\dfrac{1}{1+e^{-z}} ,该函数图像如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cb4IBXex-1628157342810)(/imgs/Sigmoid函数图像.jpg)]

可以看出该函数将输入数值转换至概率值,所以我们借此可构造逻辑回归模型的假设函数是:

hθ(x)=g(θTx)=11+eθTxh_{\theta}(x)=g(\theta^{T}x)=\dfrac{1}{1+e^{-\theta^{T}x}}

其中: xx 代表特征向量,θ\theta 为我们要求取的参数。

P(y=1x;θ)=hθ(x)P(y=1|x;\theta)=h_{\theta}(x)

即表示给定 xxθ\theta 的条件下,预测 y=1y=1 的概率

可以得到决策函数:

y(i)=1,if P(y=1x)>0.5y(i)=1, \text{if }P(y=1|x)>0.5

0.50.5 就是我们选择的阈值,当然可以根据实际情况选择其它数值,比如对正例的预测性高一点,就可以大于0.5

决策边界

这个概念的介绍引用吴恩达教授的课程ppt

线性决策边界

线性决策边界 非线性边界 请添加图片描述

代价函数

定义逻辑回归的代价函数为:

J(θ)=1mi=1mCost(hθ(x(i))y(i))J(\theta)=\frac{1}{m}\sum\limits_{i=1}^m Cost(h_{\theta}(x^{(i)})-y^{(i)})

其中:

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

Cost(hθ(x),y)Cost(h_{\theta}(x),y) 函数的特点是:

  • 当实际的 y=1y=1 时, hθ(x)=1h_{\theta}(x)=1 时代价为 0,当 hθ(x)h_{\theta}(x) 不为 11 时,代价随着 hθ(x)h_{\theta}(x) 变小而变大;
  • 当实际的 y=0y=0 时, hθ(x)=0h_{\theta}(x)=0 时代价为 0,当 hθ(x)h_{\theta}(x) 不为 00 时,代价随着 hθ(x)h_{\theta}(x) 变大而变大;

图像如下: 在这里插入图片描述可进一步化简:

J(θ)=1mi=1m[y(i)log(hθ(x))+(1y(i))log(1hθ(x))]J(\theta)=-\frac{1}{m}\sum\limits_{i=1}^m [y^{(i)}log(h_{\theta}(x))+(1-y^{(i)})log(1-h_{\theta}(x))]

使用梯度下降

对代价函数 J(θ)J(\theta) 求导,可得

θJ(θ)=1mi=1m(hθ(x(i))y(i))x(i)\dfrac{\partial}{\partial\theta}J(\theta)=\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})x^{(i)}

同样对 θj=θjα1mi=1m(hθ(x(i))y(i))\theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)}) 不停更新每个参数值,直至求出使函数值最小化,也就是导数值趋于00θ\theta 即可。

多分类问题

通常采用 One-vs-All,亦称 One-vs-the Rest 方法来实现多分类,其将多分类问题转化为了多次二分类问题。其实就是轮流把某一特征视为正样本,其余统统视为负样本,然后同二分类一样进行模型训练。若样本特征数为 nn ,总共会获得 n1n-1 个决策边界。

例:给定输入 xx,分别计算 hθ(i)(x),i=1,2,...,nh_{\theta}^{(i)}(x),i=1,2,...,n ,然后进行比较,若hθ(k)(x)h_{\theta}^{(k)}(x) 最接近11 ,则预测 xx 属于 kk 类。

过拟合与欠拟合

什么是过拟合?

欠拟合(underfitting):拟合程度不高,数据距离拟合曲线较远

过拟合(overfitting):过度拟合,貌似拟合几乎每一个数据,但是丢失了信息规律。在机器学习中,经常出现训练集拟合程度过高,过于精确,这样的模型并无实际预测意义。

正则化

上述提到了存在的过拟合问题,那么解决过拟合的方法一般有:

  • 减少特征数。这样显然会破坏特征的完整性。
  • 保留特征,但是弱化一些高阶项的系数 θi\theta_i 。我们把这种弱化称之为对参数 θi\theta_i 的惩罚。

所谓正则化,就是弱化高阶特征的过程。

线性回归中的正则化

在线性回归的基础上,我们引入参数 λ\lambda 来实现正则化惩罚。将代价函数改为:

J(θ)=12mi=1m[(hθ(x(i))y(i))2+λi=1nθj2]=12m[(Xθy)T(Xθy)+λj=1nθj2]J(\theta)=\frac{1}{2m}\sum\limits_{i=1}^m [(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda\sum\limits_{i=1}^{n}\theta_j^2 ]\\ =\frac{1}{2m}[(X\theta-y)^T(X\theta-y)+\lambda\sum\limits_{j=1}^{n}\theta_j^2]

λ\lambda 越大,正则化惩罚力度越大,就越能避免过拟合。当然也不能太大,不然参数的趋于0,最后的图像可能是一条直线。

同时,梯度下降中也发生相应变化:

Repeat  until  convergence{θ0=θ0α1mi=1m[(hθ(x(i))y(i))x0(i)]θj=θjα1mi=1m[(hθ(x(i))y(i))x(i)+λmθj]for j=1,2,..,n}\begin{aligned}&Repeat\;until\;convergence\{ \\ & \quad \theta_0=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^m [(h_{\theta}(x^{(i)})-y^{(i)})x_0^{(i)}] \\ & \quad \theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^m [(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} + \frac{\lambda}{m}\theta_j]\\ & \quad for \ j=1,2,..,n\\ &\}\end{aligned}

可进一步简化为:

θj=θj(1αλm)α1mi=1m[hθ(x(i))y(i)]xj(i)\theta_j=\theta_j(1−\alpha\dfrac{\lambda}{m})−\alpha\dfrac{1}{m}\sum\limits_{i=1}^{m}[h_{\theta}(x^{(i)})−y^{(i)}]x^{(i)}_j

可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 θ\theta 值减少了一个额外的值,也就是梯度下降中每次更新 θ\theta 的同时也会减小 θ\theta 值。

若用正规方程,则同样可以求解,方法如下:

θ=(XTX+λ[0......001...0............00...1])1XTy\theta= (X^TX+\lambda \begin{bmatrix}0&...&...&0\\0&1&...&0\\...&...&...&...\\0&0&...&1\end{bmatrix})^{-1}X^Ty

逻辑回归中的正则化

同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数:

J(θ)=1mi=1m[y(i)log(hθ(x))(1y(i))log(1hθ(x))]+λ2mj=1nθj2J(\theta)=\frac{1}{m}\sum\limits_{i=1}^m [-y^{(i)}log(h_{\theta}(x))-(1-y^{(i)})log(1-h_{\theta}(x))]+\frac{\lambda}{2m}\sum\limits_{j=1}^{n}\theta_j^2

同样得出梯度下降算法为:

Repeat  until  convergence{θ0=θ0α1mi=1m[(hθ(x(i))y(i))x0(i)]θj=θjα1mi=1m[(hθ(x(i))y(i))x(i)+λmθj]for j=1,2,..,n}\begin{aligned}&Repeat\;until\;convergence\{ \\ & \quad \theta_0=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^m [(h_{\theta}(x^{(i)})-y^{(i)})x_0^{(i)}] \\ & \quad \theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^m [(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} + \frac{\lambda}{m}\theta_j]\\ & \quad for \ j=1,2,..,n\\ &\}\end{aligned}

注意,θ0\theta_0 是不参与其中的任何一个正则化的。

小结

线性回归与逻辑回归的区别

线性回归与逻辑回归都是一种广义线性模型(generalized linear model)。线性回归假设因变量 y 服从高斯分布,而逻辑回归假设因变量 y 服从伯努利分布。 线性回归是回归任务,逻辑回归是分类任务。

逻辑回归与线性回归虽然代价函数求导后看起来形式一样,但是二者的假设函数 hθ(x)h_{\theta}(x) 是不同的。

  • 线性回归:hθ(x)=θTxh_{\theta}(x)=\theta^{T}x
  • 逻辑回归:hθ(x)=g(θTx)h_{\theta}(x)=g(\theta^{T}x) ,其中g(z)g(z)SigmoidSigmoid 函数

附上课后作业的代码实现(github):