多维变量线性回归
x ( i ) {x^{\left( i \right)}} x(i)代表第 i i i 个训练实例,是特征矩阵中的第 i i i行,是一个向量。
x j ( i ) {x}_{j}^{\left( i \right)} xj(i)代表特征矩阵中第 i i i 行的第 j j j 个特征,也就是第 i i i 个训练实例的第 j j j 个特征。
多变量线性回归函数
支持多变量的假设 h h h 表示为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{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} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
此时模型中的参数是一个 n + 1 n+1 n+1维的向量,任何一个训练实例也都是 n + 1 n+1 n+1维的向量,特征矩阵 X X X的维度是 m ∗ ( n + 1 ) m*(n+1) m∗(n+1)。 因此公式可以简化为: h θ ( x ) = θ T X h_{\theta} \left( x \right)={\theta^{T}}X hθ(x)=θTX
多变量梯度下降
多变量回归代价函数: J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( {\theta_{0}},{\theta_{1}}...{\theta_{n}} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J(θ0,θ1...θn)=2m1i=1∑m(hθ(x(i))−y(i))2
多变量线性回归的批量梯度下降算法为:
即:
求导后得到:
当
n
>
=
1
n>=1
n>=1时,
θ
0
:
=
θ
0
−
a
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
{{\theta }_{0}}:={{\theta }_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{0}^{(i)}
θ0:=θ0−am1i=1∑m(hθ(x(i))−y(i))x0(i)
θ 1 : = θ 1 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) {{\theta }_{1}}:={{\theta }_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{1}^{(i)} θ1:=θ1−am1i=1∑m(hθ(x(i))−y(i))x1(i)
θ 2 : = θ 2 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 2 ( i ) {{\theta }_{2}}:={{\theta }_{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{2}^{(i)} θ2:=θ2−am1i=1∑m(hθ(x(i))−y(i))x2(i)
特征缩放
如果不进行特征缩放,则如图所示梯度下降算法需要多次迭代才可以收敛,比较复杂。
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图:
缩放原则和方法
- − 1 < x n < 1 {{-1}<{{x}_{n}<{1}}} −1<xn<1
- − 3 < x n < 3 {{-3}<{{x}_{n}<{3}}} −3<xn<3或者 − 1 3 < x n < 1 3 {{-\frac{1}{3}}<{{x}_{n}}<{\frac{1}{3}}} −31<xn<31都是可以的
- 最简单的方法是令: x n = x n − μ n s n {{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}} xn=snxn−μn,其中 μ n {\mu_{n}} μn是 x n {{x}_{n}} xn的平均值, s n {s_{n}} sn是 x m a x − x m i n {{x}_{max}}-{{x}_{min}} xmax−xmin的值**
学习率
绘制迭代次数( x {x} x 轴)和代价函数( y {y} y 轴)的图表来观测算法在何时趋于收敛,如下图
出现下面两种情况都是因为学习率 α \alpha α 过大,应该调低学习率。
总结:
梯度下降算法的每次迭代受到学习率的影响,如果学习率 α \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
正规方程
在数学中计算函数最小值通常先计算导数为0的点,即:
d
d
θ
j
(
θ
)
=
0
\frac{\mathrm{d}}{\mathrm{d}{\theta}}j\left( {\theta} \right)=0
dθdj(θ)=0
同样,也可以通过求偏导数来找出代价函数
J
(
θ
j
)
{J\left( {\theta_{j}} \right)}
J(θj) 最小的参数,即:
∂
∂
θ
j
J
(
θ
j
)
=
0
\frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0
∂θj∂J(θj)=0
假设训练集特征矩阵为
X
X
X(其中
x
0
=
1
{{x}_{0}}=1
x0=1)并且我们的训练集结果为向量
y
y
y,则利用正规方程解出向量
θ
=
(
X
T
X
)
−
1
X
T
y
\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y
θ=(XTX)−1XTy
梯度下降与正规方程比较
梯度下降 | 正规方程 |
---|---|
特征数量大于一百万则必定使用梯度下降 | 适用于特征数量较小的(通常适用于特征数量小于10000) |
多次迭代 | 一次算出 |
适用于各种模型 | 只适用于线性模型 |
正规方程的python实现:
import numpy as np
def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y
return theta
正规方程中矩阵不可逆
- 当两个特征线性相关时,则 X T X { {X^T}X} XTX 不可逆
- 当训练样本数量小于等于特征数量时,则
X
T
X
{ {X^T}X}
XTX 不可逆