本文为吴恩达机器学习课程的笔记系列第一篇,主要关于线性回归与逻辑回归的详细推导,以及介绍两者之间的区别。
属于回归问题,我们先来看代价函数的定义。
线性平方代价函数:
h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
建模误差平方和:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\dfrac{1}{2m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
几个概念:
误差平方和(Sum of the Squared Errors,即SSE):用来表明函数拟合的好坏
均方误差(MSE):,指参数估计值与参数真值之差的平方的期望值。
基于经典的下山问题,即当你在山上的某一点时,因如何在山上选择最佳的下山方向,以及每一步因走多大。梯度下降目的是用来求代价函数最小值。
算法思想:
批量梯度下降(batch gradient descent)
公式(假设两个参数): θ j = θ j − α ∂ ∂ θ j J ( θ 0 , θ j ) \theta_j = \theta_j - \alpha\dfrac{\partial}{\partial\theta_j}J(\theta_0,\theta_j) θj=θj−α∂θj∂J(θ0,θj)
如何选择 α \alpha α 值?
在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,也就是 α \alpha α 没必要在此时另外减小了。
梯度下降算法:
R e p e a t u n t i l c o n v e r g e n c e { θ j = θ j − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) f o r j = 0 a n d 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} Repeatuntilconvergence{θj=θj−α∂θ0∂J(θ0,θ1)forj=0and1}
对代价函数求导:
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( 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∂J(θ0,θ1)=∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2
j = 0 , ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) , θ 0 = θ 0 − α 1 m ∑ i = 1 m ( 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=0,∂θ0∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i)),θ0=θ0−αm1i=1∑m(hθ(x(i))−y(i))
j = 1 , ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) , θ 1 = θ 1 − α 1 m ∑ i = 1 m ( 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=1,∂θ1∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))⋅x(i),θ1=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x(i)
我们也可以利用**“最小二乘法”**来对模型求解。在线性回归中,最小二乘法就是试图找到一条直线,是所有样本到直线上的欧式距离之和最小,也就是模型中的 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1) 最小。
解法:分别对 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 求导并令所求式子为0,从而解出 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1 最优解。
其实就是 单特征=>多维特征,用向量表示
假设特征数量为 n n n ,特征矩阵如下:
X = x ( 1 ) : x ( 2 ) : x ( 3 ) : . . . 特征 1 特征 2 特征 3 特征 4 1 0.2 41 6 2 0.6 35 4 5 0.5 60 8 . . . . . . . . . . . . = [ x ( 1 ) T x ( 2 ) T x ( 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=x(1):x(2):x(3):...特征1125...特征20.20.60.5...特征3413560...特征4648...=⎣⎢⎢⎢⎢⎢⎡x(1)Tx(2)Tx(3)T...x(n)T⎦⎥⎥⎥⎥⎥⎤
x ( i ) x^{(i)} x(i)代表第 i i i 个特征实例,也就是特征矩阵的第 i i i 行,是一个向量,如 x ( 2 ) = [ 2 0.6 35 4 ] x^{(2)}=\begin{bmatrix}2\newline0.6\newline35\newline4\end{bmatrix} x(2)=[20.6354]
多变量的 h h h 表示为:
h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + . . . + θ n x n h_{\theta}(x)=\theta_0+\theta_1x+\theta_2x_2+...+\theta_nx_n hθ(x)=θ0+θ1x+θ2x2+...+θnxn
可以看出,参数为一个 n + 1 n+1 n+1 维的向量,特征矩阵的维度为 m ∗ ( n + 1 ) m*(n+1) m∗(n+1),为了计算方便,我们引入 x 0 = 1 x_0=1 x0=1,即公式变为:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
令 θ = [ θ 0 θ 1 . . . θ n ] \theta = \begin{bmatrix}\theta_0\newline\theta_1\newline...\newline\theta_n\end{bmatrix} θ=[θ0θ1...θn]
故进一步简化: h θ ( x ) = θ T x h_{\theta}(x)=\theta^Tx hθ(x)=θTx
在单元线性回归的梯度下降基础上拓展,
∂ ∂ θ j J ( θ j ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( 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 ∂θj∂J(θj)=∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2
特征缩放:放缩每个特征,大约至 [ − 1 , 1 ] [-1,1] [−1,1]
均值归一化(Mean normalization):就是标准化
假设训练集结果为向量 y y y ,引入 x 0 x_0 x0 后,特征矩阵也可写为:
X = 特征 1 特征 2 特征 3 特征 4 1 0.2 41 6 2 0.6 35 4 5 0.5 60 8 . . . . . . . . . . . . = 1 x ( 1 ) T 1 x ( 2 ) T 1 x ( 3 ) T 1 . . . 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} X=特征1125...特征20.20.60.5...特征3413560...特征4648...=1111x(1)Tx(2)Tx(3)T...
将上述的代价函数写作矩阵形式:
J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y) J(θ)=2m1(Xθ−y)T(Xθ−y)
实际上就是求解使得 J ( θ ) J(\theta) J(θ) 最小的 参数 θ \theta θ 值,即如下表示:
θ = a r g m i n ( X θ − y ) T ( X θ − y ) \theta = argmin(X\theta-y)^T(X\theta-y) θ=argmin(Xθ−y)T(Xθ−y)
令 E θ = ( X θ − y ) T ( X θ − y ) E_{\theta}=(X\theta-y)^T(X\theta-y) Eθ=(Xθ−y)T(Xθ−y) ,对 θ \theta θ 求导可解得:
θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)−1XTy
梯度下降 | 正规方程 |
---|---|
需要选择学习率 α \alpha α | 不需要学习率 α \alpha α |
需要进行多步迭代 | 不需要进行迭代,矩阵运算仅需一行代码就可完成 |
多特征下,适应性较好 | 矩阵逆的计算复杂度为 O( n 3 n^3 n3),所以如果特征维度太高(特别是超过 10000 维),运算代价大,不宜再考虑该方法 |
能应用到一些更加复杂的算法中,适用于各种类型的模型 | 矩阵需要可逆,并且,对于一些更复杂的算法,该方法无法工作。只适用于线性回归模型,不适合逻辑回归模型等其他模型 |
属于分类问题。对于分类问题,数据一般是离散的,应用线性回归的方法处理分类问题并不是一个很好的方法,所以下面介绍一种处理分类问题的经典算法——逻辑回归。
逻辑回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计,使得输出的变量范围始终在0和1之间。下面以二分类问题为例介绍该算法。
逻辑回归的分布函数采用的是 S i g m o i d Sigmoid Sigmoid 函数: g ( z ) = 1 1 + e − z g(z)=\dfrac{1}{1+e^{-z}} g(z)=1+e−z1 ,该函数图像如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cb4IBXex-1628157342810)(/imgs/Sigmoid函数图像.jpg)]
可以看出该函数将输入数值转换至概率值,所以我们借此可构造逻辑回归模型的假设函数是:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x)=g(\theta^{T}x)=\dfrac{1}{1+e^{-\theta^{T}x}} hθ(x)=g(θTx)=1+e−θTx1
其中: x x x 代表特征向量, θ \theta θ 为我们要求取的参数。
P ( y = 1 ∣ x ; θ ) = h θ ( x ) P(y=1|x;\theta)=h_{\theta}(x) P(y=1∣x;θ)=hθ(x)
即表示给定 x x x 和 θ \theta θ 的条件下,预测 y = 1 y=1 y=1 的概率
可以得到决策函数:
y ( i ) = 1 , if P ( y = 1 ∣ x ) > 0.5 y(i)=1, \text{if }P(y=1|x)>0.5 y(i)=1,if P(y=1∣x)>0.5
0.5 0.5 0.5 就是我们选择的阈值,当然可以根据实际情况选择其它数值,比如对正例的预测性高一点,就可以大于0.5
这个概念的介绍引用吴恩达教授的课程ppt
线性决策边界
定义逻辑回归的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) − y ( i ) ) J(\theta)=\frac{1}{m}\sum\limits_{i=1}^m Cost(h_{\theta}(x^{(i)})-y^{(i)}) J(θ)=m1i=1∑mCost(hθ(x(i))−y(i))
其中:
C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) y = 1 时 − l o g ( 1 − h θ ( x ) ) y = 0 时 Cost(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)={−log(hθ(x))−log(1−hθ(x))y=1时y=0时
C o s t ( h θ ( x ) , y ) Cost(h_{\theta}(x),y) Cost(hθ(x),y) 函数的特点是:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( h θ ( x ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( 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(θ)=−m1i=1∑m[y(i)log(hθ(x))+(1−y(i))log(1−hθ(x))]
对代价函数 J ( θ ) J(\theta) J(θ) 求导,可得
∂ ∂ θ J ( θ ) = 1 m ∑ i = 1 m ( 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(θ)=m1i=1∑m(hθ(x(i))−y(i))x(i)
同样对 θ j = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)}) θj=θj−αm1i=1∑m(hθ(x(i))−y(i)) 不停更新每个参数值,直至求出使函数值最小化,也就是导数值趋于 0 0 0的 θ \theta θ 即可。
通常采用 One-vs-All,亦称 One-vs-the Rest 方法来实现多分类,其将多分类问题转化为了多次二分类问题。其实就是轮流把某一特征视为正样本,其余统统视为负样本,然后同二分类一样进行模型训练。若样本特征数为 n n n ,总共会获得 n − 1 n-1 n−1 个决策边界。
例:给定输入 x x x,分别计算 h θ ( i ) ( x ) , i = 1 , 2 , . . . , n h_{\theta}^{(i)}(x),i=1,2,...,n hθ(i)(x),i=1,2,...,n ,然后进行比较,若 h θ ( k ) ( x ) h_{\theta}^{(k)}(x) hθ(k)(x) 最接近 1 1 1 ,则预测 x x x 属于 k k k 类。
什么是过拟合?
欠拟合(underfitting):拟合程度不高,数据距离拟合曲线较远
过拟合(overfitting):过度拟合,貌似拟合几乎每一个数据,但是丢失了信息规律。在机器学习中,经常出现训练集拟合程度过高,过于精确,这样的模型并无实际预测意义。
上述提到了存在的过拟合问题,那么解决过拟合的方法一般有:
所谓正则化,就是弱化高阶特征的过程。
在线性回归的基础上,我们引入参数 λ \lambda λ 来实现正则化惩罚。将代价函数改为:
J ( θ ) = 1 2 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ i = 1 n θ j 2 ] = 1 2 m [ ( X θ − y ) T ( X θ − y ) + λ ∑ j = 1 n θ j 2 ] 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] J(θ)=2m1i=1∑m[(hθ(x(i))−y(i))2+λi=1∑nθj2]=2m1[(Xθ−y)T(Xθ−y)+λj=1∑nθj2]
λ \lambda λ 越大,正则化惩罚力度越大,就越能避免过拟合。当然也不能太大,不然参数的趋于0,最后的图像可能是一条直线。
同时,梯度下降中也发生相应变化:
R e p e a t u n t i l c o n v e r g e n c e { θ 0 = θ 0 − α 1 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ] θ j = θ j − α 1 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) + λ m θ j ] f o r 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} Repeatuntilconvergence{θ0=θ0−αm1i=1∑m[(hθ(x(i))−y(i))x0(i)]θj=θj−αm1i=1∑m[(hθ(x(i))−y(i))x(i)+mλθj]for j=1,2,..,n}
可进一步简化为:
θ j = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( 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 θj=θj(1−αmλ)−αm1i=1∑m[hθ(x(i))−y(i)]xj(i)
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 θ \theta θ 值减少了一个额外的值,也就是梯度下降中每次更新 θ \theta θ 的同时也会减小 θ \theta θ 值。
若用正规方程,则同样可以求解,方法如下:
θ = ( X T X + λ [ 0 . . . . . . 0 0 1 . . . 0 . . . . . . . . . . . . 0 0 . . . 1 ] ) − 1 X T y \theta= (X^TX+\lambda \begin{bmatrix}0&...&...&0\\0&1&...&0\\...&...&...&...\\0&0&...&1\end{bmatrix})^{-1}X^Ty θ=(XTX+λ⎣⎢⎢⎡00...0...1...0............00...1⎦⎥⎥⎤)−1XTy
同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\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 J(θ)=m1i=1∑m[−y(i)log(hθ(x))−(1−y(i))log(1−hθ(x))]+2mλj=1∑nθj2
同样得出梯度下降算法为:
R e p e a t u n t i l c o n v e r g e n c e { θ 0 = θ 0 − α 1 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ] θ j = θ j − α 1 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) + λ m θ j ] f o r 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} Repeatuntilconvergence{θ0=θ0−αm1i=1∑m[(hθ(x(i))−y(i))x0(i)]θj=θj−αm1i=1∑m[(hθ(x(i))−y(i))x(i)+mλθj]for j=1,2,..,n}
注意, θ 0 \theta_0 θ0 是不参与其中的任何一个正则化的。
线性回归与逻辑回归的区别
线性回归与逻辑回归都是一种广义线性模型(generalized linear model)。线性回归假设因变量 y 服从高斯分布,而逻辑回归假设因变量 y 服从伯努利分布。 线性回归是回归任务,逻辑回归是分类任务。
逻辑回归与线性回归虽然代价函数求导后看起来形式一样,但是二者的假设函数 h θ ( x ) h_{\theta}(x) hθ(x) 是不同的。
附上课后作业的代码实现(github):
下一篇文章地址:机器学习入门之神经网络与反向传播推导