吴恩达机器学习4-多变量线性回归

吴恩达机器学习4-多变量线性回归

1.定义

实际问题中,对于问题的解决单一变量往往是不够的,往往要对多个变量进行分析:

支持多变量的假设 ℎ 表示为:

  h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n \ h_{\theta}(x)=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}  hθ(x)=θ0+θ1x1+θ2x2++θnxn

例如对房价不单单考虑面积,对于楼层等因素也会有诸多考量:

吴恩达机器学习4-多变量线性回归_第1张图片

公式的简化:

为了使得公式能够简化一些,引入0 = 1,则公式转化为:

h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n} hθ(x)=θ0x0+θ1x1+θ2x2++θnxn

此时模型中的参数是一个 + 1维的向量,任何一个训练实例也都是 +1维的向量,特

征矩阵的维度是 ∗ ( + 1)。因此公式可以简化为:

h θ ( x ) = θ T X h_{\theta}(x)=\theta^{T} X hθ(x)=θTX
吴恩达机器学习4-多变量线性回归_第2张图片
2.代价函数

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价

函数是所有建模误差的平方和:

J ( θ 0 , θ 1 … θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left(\theta_{0}, \theta_{1} \ldots \theta_{n}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ0,θ1θn)=2m1i=1m(hθ(x(i))y(i))2

h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n} hθ(x)=θ0x0+θ1x1+θ2x2++θnxn

多变量线性回归的批量梯度下降算法为:

Repeat {
θ j : = θ j − α ∂ ∂ θ j   J ( θ 0 , θ 1 , … , θ n ) \theta_{\mathrm{j}}:=\theta_{\mathrm{j}}-\alpha \frac{\partial}{\partial \theta_{j}} \mathrm{~J}\left(\theta_{0}, \theta_{1}, \ldots, \theta_{\mathrm{n}}\right) θj:=θjαθj J(θ0,θ1,,θn)
即:
Repeat {
θ j : = θ j − α ∂ ∂ θ j 1 2   m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \theta_{\mathrm{j}}:=\theta_{\mathrm{j}}-\alpha \frac{\partial}{\partial \theta_{\mathrm{j}}} \frac{1}{2 \mathrm{~m}} \sum_{\mathrm{i}=1}^{\mathrm{m}}\left(\mathrm{h}_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)-\mathrm{y}^{(\mathrm{i})}\right)^{2} θj:=θjαθj2 m1i=1m(hθ(x(i))y(i))2
}
求导数后得到:
Repeat {
θ j : = θ j − α 1   m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) \theta_{\mathrm{j}}:=\theta_{\mathrm{j}}-\alpha \frac{1}{\mathrm{~m}} \sum_{\mathrm{i}=1}^{\mathrm{m}}\left(\left(\mathrm{h}_{\theta}\left(\mathrm{x}^{(\mathrm{i})}\right)-\mathrm{y}^{(\mathrm{i})}\right) \cdot \mathrm{x}_{\mathrm{j}}^{(\mathrm{i})}\right) θj:=θjα m1i=1m((hθ(x(i))y(i))xj(i))
( simultaneously update θ j \theta_{\mathrm{j}} θj
for j = 0 , 1 , … , n \mathrm{j}=0,1, \ldots, \mathrm{n} j=0,1,,n )
}

3.梯度下降法之特征缩放

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

如果不进行特征缩放,将梯度下降法将很难收敛:

吴恩达机器学习4-多变量线性回归_第3张图片
上图给出的是具体实例,椭圆形不是我们所希望的。

特征缩放也就是常常提到的归一化思想:比如要把数据范围控制在-0.5-0.5之间,公式如下:

x n = x n − μ n s n x_{n}=\frac{x_{n}-\mu_{n}}{s_{n}} xn=snxnμn

其中 ,其中 是平均值, 是标准差(max-min)。

4.梯度下降法之学习率

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

如何判断学习率是否符合要求:
吴恩达机器学习4-多变量线性回归_第4张图片

  • 可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛

  • 将代价函数的变化值与某个阀值(例如 0.001)进行比较,达到则认为符合要求。

    但通常画图更直观。

发现学习率不符合要求怎么办:
若无法收敛(振荡或者扩大,则减小),若收敛过慢,则适当增大

如何选择学习率
按照10倍、3倍这样依次选择,比如:
= 0.01,0.03,0.1,0.3*,1,3,10

5.特征和多项式回归

如同单一变量不能模拟出合适模型,线性回归并不适用于所有数据,我们需要有自由设计特征的思想,有时需要曲线来适应我们的数据,比如二次函数、三次函数、平方根函数模型等来是实现。

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

6.正规方程

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:

∂ ∂ θ j J ( θ j ) = 0 \frac{\partial}{\partial \theta_{j}} J\left(\theta_{j}\right)=0 θjJ(θj)=0

导数的思想,也就是在该处取得极值点

具体计算实现:

θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)1XTy

推导过程:

θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)1XTy 的推导过程:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2  其中:  h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \text { 其中: } h_{\theta}(x)=\theta^{T} X=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n} J(θ)=2m1i=1m(hθ(x(i))y(i))2 其中hθ(x)=θTX=θ0x0+θ1x1+θ2x2++θnxn
将向量表达形式转为矩阵表达形式, 则有 J ( θ ) = 1 2 ( X θ − y ) 2 J(\theta)=\frac{1}{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 列的矩阵, y y y m m m 行 1 列的矩阵, 对 J ( θ ) J(\theta) J(θ) 进行如下变换:
J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) = 1 2 ( θ T X T − y T ) ( X θ − y ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ − y T y ) \begin{gathered} J(\theta)=\frac{1}{2}(X \theta-y)^{T}(X \theta-y) \\ =\frac{1}{2}\left(\theta^{T} X^{T}-y^{T}\right)(X \theta-y) \\ =\frac{1}{2}\left(\theta^{T} X^{T} X \theta-\theta^{T} X^{T} y-y^{T} X \theta-y^{T} y\right) \end{gathered} J(θ)=21(Xθy)T(Xθy)=21(θTXTyT)(Xθy)=21(θTXTXθθTXTyyTXθyTy)
接下来对 J ( θ ) J(\theta) J(θ) 偏导, 需要用到以下几个矩阵的求导法则:
d A B d B = A T \frac{d A B}{d B}=A^{T} dBdAB=AT

d X T A X d X = 2 A X \frac{d X^{T} A X}{d X}=2 A X dXdXTAX=2AX
所以有:
∂ J ( θ ) ∂ θ = 1 2 ( 2 X T X θ − X T y − ( y T X ) T − 0 ) = 1 2 ( 2 X T X θ − X T y − X T y − 0 ) = X T X θ − X T y \begin{gathered} \frac{\partial J(\theta)}{\partial \theta}=\frac{1}{2}\left(2 X^{T} X \theta-X^{T} y-\left(y^{T} X\right)^{T}-0\right) \\ =\frac{1}{2}\left(2 X^{T} X \theta-X^{T} y-X^{T} y-0\right) \\ =X^{T} X \theta-X^{T} y \end{gathered} θJ(θ)=21(2XTXθXTy(yTX)T0)=21(2XTXθXTyXTy0)=XTXθXTy
Δ ∂ J ( θ ) ∂ θ = 0 , \Delta \frac{\partial J(\theta)}{\partial \theta}=0, ΔθJ(θ)=0,
则有 θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)1XTy

代码实现:

pinv(X'*X)*X'*y

举例:

吴恩达机器学习4-多变量线性回归_第5张图片

梯度下降 正规方程
需要选择学习率 不需要
需要多次迭代 一次运算得出
当特征数量大时也能较好适用 运算代价大,因为矩阵逆的计算时间复杂度为(3),通常来说当小于 10000 时还是可以接受的
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等

注意事项:

由于 ( X T X ) − 1 \left(X^{T} X\right)^{-1} (XTX)1可能不可逆,故编程时要用:pinv

产生原因:

  • 参数之间线性相关,比如x和x2
  • 不是方阵

你可能感兴趣的:(吴恩达机器学习系列笔记,机器学习,线性回归,算法)