机器学习学习笔记(三)

(三)多变量线性回归


1. 多维特征

在机器学习学习笔记(二)中,我们探讨了单变量/特征的回归模型,现在再对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为 ( x 0 , x 1 , . . . , x n ) (x_0,x_1,...,x_n) (x0,x1,...,xn)

在这里插入图片描述
增添更多特征后,再引入一系列新的注释:
n n n 代表特征的数量
x ( i ) x^{(i)} x(i) 代表第 i i i 个训练实例,是特征矩阵中的第 i i i 行,是一个向量(vector)。
比方说,上图的, x ( 2 ) = [ 1416 3 2 40 ] x^{(2)}=\left[\begin{matrix} 1416 \\ 3 \\ 2 \\ 40 \end{matrix}\right] x(2)=14163240

x j ( i ) x_j^{(i)} xj(i) 代表特征矩阵中第 i i i 行的第 j j j 个特征,也就是第 i i i 个训练实例的第 j j j 个特征。
如上图的 x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 x_2^{(2)}=3,x_3^{(2)}=2 x2(2)=3,x3(2)=2

支持多变量的假设 h h h 表示为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
这个公式中有 n + 1 n+1 n+1 个参数和 n n n 个变量,为了使得公式能够简化一些,引入 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

此时模型中的参数是一个 n + 1 n+1 n+1 维的向量,任何一个训练实例也都是 n + 1 n+1 n+1 维的向量,特征矩阵X的维度是 m ∗ ( n + 1 ) m*(n+1) m(n+1) 。 因此公式可以简化为: h θ ( x ) = θ T X h_\theta(x)=\theta^TX hθ(x)=θTX ,其中上标 T T T 代表矩阵转置。

2.多变量梯度下降

与单变量线性回归类似,在多变量线性回归中,也可以构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:
J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1...\theta_n)={1 \over 2m} \sum_{i=1}^{m} {(h_\theta(x^{(i)})-y^{(i)})^2} J(θ0,θ1...θn)=2m1i=1m(hθ(x(i))y(i))2
其中:
h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta^TX=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θTX=θ0+θ1x1+θ2x2+...+θnxn

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:
在这里插入图片描述
即:
在这里插入图片描述
求导数后得到:
在这里插入图片描述
n > = 1 n>=1 n>=1 时,
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 0 ( i ) ) \theta_0:=\theta_0-\alpha{{1 \over m}\sum_{i=1}^{m}((h_\theta(x^{(i)})-y^{(i)})\cdot x^{(i)}_0)} θ0:=θ0αm1i=1m((hθ(x(i))y(i))x0(i))
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) ) \theta_1:=\theta_1-\alpha{{1 \over m}\sum_{i=1}^{m}((h_\theta(x^{(i)})-y^{(i)})\cdot x^{(i)}_1)} θ1:=θ1αm1i=1m((hθ(x(i))y(i))x1(i))
θ 2 : = θ 2 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 2 ( i ) ) \theta_2:=\theta_2-\alpha{{1 \over m}\sum_{i=1}^{m}((h_\theta(x^{(i)})-y^{(i)})\cdot x^{(i)}_2)} θ2:=θ2αm1i=1m((hθ(x(i))y(i))x2(i))

我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。

计算代价函数
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = {1\over2m}\sum_{i=1}^{m} {(h_\theta(x^{(i)})-y^{(i)})^2} J(θ)=2m1i=1m(hθ(x(i))y(i))2
其中:
h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta^TX=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn

有幸在网上找到了Python代码,代码如下:

def computeCost(X, y, theta):

    inner = np.power(((X * theta.T) - y), 2)

    return np.sum(inner) / (2 * len(X))

3.梯度下降法实践1-特征缩放

在面对多维特征问题的时候,需要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。

以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
在这里插入图片描述
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。 如图:
在这里插入图片描述
最简单的方法是令: x n = x n − μ n s n x_n={x_n-\mu_n \over s_n} xn=snxnμn ,其中 μ n \mu_n μn 是平均值, s n s_n sn 是标准差。

4.梯度下降法实践2-学习率

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
在这里插入图片描述
也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如0.001)进行比较,但通常看上面这样的图表更好。

梯度下降算法的每次迭代受到学习率的影响,如果学习率 α \alpha α 过小,则达到收敛所需的迭代次数会非常高;如果学习率 α \alpha α 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试这些学习率:

α = 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 \alpha=0.01,0.03,0.1,0.3,1,3,10 α=0.01,0.03,0.1,0.3,1,3,10

5.特征和多项式回归

如房价预测问题,
在这里插入图片描述
h θ ( x ) = θ 0 + θ 1 × f r o n t a g e + θ 2 × d e p t h h_\theta(x)=\theta_0+\theta_1 \times frontage + \theta_2 \times depth hθ(x)=θ0+θ1×frontage+θ2×depth

x 1 = f r o n t a g e x_1=frontage x1=frontage (临街宽度), x 2 = d e p t h x_2=depth x2=depth (纵向深度), x = f r o n t a g e ∗ d e p t h x=frontage * depth x=frontagedepth (面积),则: h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x 。 线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型: h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 2 h_\theta(x)=\theta_0+\theta_1x+\theta_2x_2^2 hθ(x)=θ0+θ1x+θ2x22 或者三次方模型: h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 2 + θ 3 x 3 3 h_\theta(x)=\theta_0+\theta_1x+\theta_2x_2^2+\theta_3x_3^3 hθ(x)=θ0+θ1x+θ2x22+θ3x33
在这里插入图片描述
显然对于房价而言,三次方模型会比二次方模型拟合得更好,因为二次方模型的价格最终会随着面积的增大而下降,这不符合我们的现实生活。

通常我们需要先观察数据然后再决定准备尝试怎样的模型。 另外,我们可以令: x 2 = x 2 2 , x 3 = x 3 3 x_2=x_2^2,x_3=x_3^3 x2=x22,x3=x33 ,从而将模型转化为线性回归模型。

根据函数图形特性,我们还可以使:
h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 1 ( s i z e ) 2 h_\theta(x)=\theta_0+\theta_1(size)+\theta_1(size)^2 hθ(x)=θ0+θ1(size)+θ1(size)2
或者:
h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 1 s i z e h_\theta(x)=\theta_0+\theta_1(size)+\theta_1\sqrt{size} hθ(x)=θ0+θ1(size)+θ1size

注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。

6.正规方程

到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案。如:
在这里插入图片描述
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的: ∂ ∂ θ j J ( θ ) = 0 {\frac{\partial }{\partial \theta_j}J(\theta)}=0 θjJ(θ)=0 。 假设我们的训练集特征矩阵为 X X X (包含了 x 0 = 1 x_0=1 x0=1 )并且我们的训练集结果为向量 y y y ,则利用正规方程解出向量 θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy 。 上标 T T T 代表矩阵转置,上标 − 1 -1 1 代表矩阵的逆。设矩阵 A = X T X A=X^TX A=XTX ,则: ( X T X ) − 1 = A − 1 (X^TX)^{-1}=A^{-1} (XTX)1=A1 以下表示数据为例:
在这里插入图片描述
即:
在这里插入图片描述
运用正规方程方法求解参数:
在这里插入图片描述
注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量)。

再次有幸在网上找到了Python代码,代码如下:

import numpy as np

 def normalEqn(X, y):

   theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于X.T.dot(X)

   return theta

7.正规方程及不可逆性

对于正规方程 ( normal equation ),以及它们的不可逆性,这是一种比较深入的概念。

问题如下: θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy
当计算 θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy ,那对于矩阵 X T X X^TX XTX 的结果是不可逆(不可逆矩阵一般称为奇异或退化矩阵)的情况咋办呢?

出现 X T X X^TX XTX 的结果是不可逆的原因可能如下:
1.在所有的特征值中可能有两个或两个以上相关联的特征值,这时可以将相关联的特征值进行等价替换,直至没有相关的特征值,例如预测房价时 x 1 x_1 x1 是以英尺为尺寸规格计算房子,而 x 2 x_2 x2 是以平方米为尺寸规格计算房子,这时两个特征值之间就满足: x 1 = x 2 ∗ ( 3.28 ) 2 x_1=x_2*(3.28)^2 x1=x2(3.28)2 ,所以 x 1 x_1 x1 就可以用 x 2 x_2 x2 替代。
2.特征值的数量 n n n 远大于训练集的数量 m m m ,这时会使用一种叫正规化的线性代数的方法,通过删除某些特征或者是使用某些技术,来解决当 m m m n n n 小的时候的问题。即使如果有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。

需要说明的时,在现有成熟的线性代数库中,即使矩阵不可逆,也有相应的函数求得伪逆矩阵,以方便计算使用。

8.总结

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

梯度下降正规方程
需要选择学习率 α \alpha α不需要
需要多次迭代一次运算得出
当特征数量 n n n 较大时也能较好适用需要计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)1 ,如果特征数量 n n n 较大则运算代价也会较大,因为矩阵逆的计算时间复杂度为 O ( n 3 ) O(n^3) O(n3) ,通常来说当小于10000 时还是可以接受的
适用于各种类型的模型只适用于线性模型,不适合逻辑回归模型等其他模型

总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数 θ \theta θ 的替代方法。具体地说,只要特征变量数量小于一万,通常可以使用标准方程法,而不使用梯度下降法。

实际上对于那些分类算法,像逻辑回归算法等算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题或者一些其他的算法,因为标准方程法不适合或者不能用在它们上。但对于这个特定的线性回归模型,标准方程法是一个比梯度下降法更快的替代算法。所以,根据具体的问题,以及特征变量的数量,这两种算法都是值得学习的。

θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy 的推导过程:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = {1\over2m}\sum_{i=1}^{m} {(h_\theta(x^{(i)})-y^{(i)})^2} J(θ)=2m1i=1m(hθ(x(i))y(i))2
其中

h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta^TX=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn

将向量表达形式转为矩阵表达形式,则有 J ( θ ) = 1 2 ( X θ − y ) 2 J(\theta)={1 \over 2}(X\theta-y)^2 J(θ)=21(Xθy)2 ,其中 X X X m m m n n n 列的矩阵( m m m 为样本个数, n n n 为特征个数), θ \theta θ n n n 1 1 1 列的矩阵,对 J ( θ ) J(\theta) J(θ) 进行如下变换

J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta)={1 \over 2}(X\theta-y)^T(X\theta-y) J(θ)=21(Xθy)T(Xθy)

= 1 2 ( θ T X T − y T ) ( X θ − y ) ={1 \over 2}(\theta^TX^T-y^T)(X\theta-y) =21(θTXTyT)(Xθy)

= 1 2 ( θ T X T X θ − θ T X T y − y T X θ − y T y ) ={1 \over 2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta-y^Ty) =21(θTXTXθθTXTyyTXθyTy)

接下来对 J ( θ ) J(\theta) J(θ) 求偏导,需要用到以下几个矩阵的求导法则:
d A B d B = A T \frac{d AB}{d B}=A^T dBdAB=AT
d X T A X d X = 2 A X \frac{d X^TAX}{d X}=2AX dXdXTAX=2AX
所以有:

∂ J ( θ ) ∂ θ = 1 2 ( 2 X T X θ − X T y − ( y T X ) T − 0 ) \frac{\partial J(\theta)}{\partial \theta}={1 \over 2}(2X^TX\theta-X^Ty-(y^TX)^T-0) θJ(θ)=21(2XTXθXTy(yTX)T0)

= 1 2 ( 2 X T X θ − X T y − X T y − 0 ) ={1 \over 2}(2X^TX\theta-X^Ty-X^Ty-0) =21(2XTXθXTyXTy0)

= X T X θ − X T y =X^TX\theta-X^Ty =XTXθXTy

∂ J ( θ ) ∂ θ = 0 \frac{\partial J(\theta)}{\partial \theta}=0 θJ(θ)=0

则有 θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值