线性回归
在数学上,线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
在机器学习中,线性回归则是使用线性模型解决回归问题的算法
问题分析
线性回归问题可以用数学语言描述为
- 目标函数
h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_{0}+\theta_{1} x hθ(x)=θ0+θ1x
-
代价函数
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
-
优化目标
minimize θ 0 , θ 1 J ( θ 0 , θ 1 ) \underset{\theta_{0}, \theta_{1}}{\operatorname{minimize}} J\left(\theta_{0}, \theta_{1}\right) θ0,θ1minimizeJ(θ0,θ1)
梯度下降
从一组参数开始,使评价函数不断减小, α \alpha α为学习率,决定了梯度下降的步长
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( for j = 0 and j = 1 ) \theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right) \quad(\text { for } j=0 \text { and } j=1) θj:=θj−α∂θj∂J(θ0,θ1)( for j=0 and j=1)
j = 0 : ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) h θ ( x ) = θ 0 + θ 1 x j = 1 : ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \begin{aligned} &j=0: \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \quad h_{\theta}(x)=\theta_{0}+\theta_{1} x\\ &j=1: \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x^{(i)}\right) \end{aligned} j=0:∂θ0∂J(θ0,θ1)=m1i=1∑m(hθ(x(i))−y(i))hθ(x)=θ0+θ1xj=1:∂θ1∂J(θ0,θ1)=m1i=1∑m((hθ(x(i))−y(i))⋅x(i))
参数必须同时更新,不能分开更新
多变量线性回归
目标函数
h
θ
(
x
)
=
θ
0
+
θ
x
1
+
θ
2
x
2
+
…
+
θ
n
x
n
h_{\theta}(x)=\theta_{0}+\theta_{x_{1}}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}
hθ(x)=θ0+θx1+θ2x2+…+θnxn
将
x
0
x_{0}
x0设为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}+\cdots+\theta_{n} x_{n}
hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn
用矩阵表示为
h
θ
(
x
)
=
θ
T
X
h_{\theta}(x)=\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}, \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=1∑m(hθ(x(i))−y(i))2
参数更新的计算方法
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
…
,
θ
n
)
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \ldots, \theta_{n}\right)\\ \theta_{j}:=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}
θj:=θj−α∂θj∂J(θ0,…,θn)θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
α
\alpha
α为学习率,决定了梯度下降的步长
数据归一化
-
目的:确保所有特征尺度都处于相同数量级,否则代价函数图像会因特征尺度差异过大而显得很扁,梯度下降算法需要非常多次的迭代才能收敛
-
方法:将所有特征的尺度都缩放到-1到1之间
常用方式:
x n = x n − μ n s n x_{n}=\frac{x_{n}-\mu_{n}}{s_{n}} xn=snxn−μn
其中 μ n \mu_{n} μn 是平均值, s n s_{n} sn是标准差
学习率
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,学习率过低会导致收敛速度较慢,过高可能会造成不收敛
可以尝试:
α=0.001 , 0.01 , 0.03 , 0.1 , ……
多项式回归
目标函数:
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
…
…
h_{\theta}(x)=\theta_{0}+\theta_{1} x+\theta_{2} x^{2}+\theta_{3} x^{3}……
hθ(x)=θ0+θ1x+θ2x2+θ3x3……
如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
正规方程(Normal equation)
区别于梯度下降法的另一种获得参数向量的方法。
假设我们的训练集特征矩阵为 X(包含了 x0=1)并且我们的训练集结果为向量 y, 则利用正规方程解出向量:
∂
∂
θ
j
J
(
θ
)
=
⋯
=
0
X
θ
−
y
=
0
X
T
X
θ
=
X
T
y
\frac{\partial}{\partial \theta_{j}} J(\theta)=\cdots=0\\ \begin{aligned} &X \theta-y=0\\ &X^{T} X \theta=X^{T} y \end{aligned}
∂θj∂J(θ)=⋯=0Xθ−y=0XTXθ=XTy
结果为:
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=\left(X^{T} X\right)^{-1} X^{T} y
θ=(XTX)−1XTy
对于不可求逆的训练集特征矩阵,正规方程法不适用。