通过学习邹博《机器学习》的课程,学完之后感觉记忆支离破碎,现在再复习一下,加强记忆。
在统计学中,线性回归是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。
举个栗子:
我们要预测房价。当前自变量(输入特征)是房子面积
x
x
x,因变量是房价
y
y
y。给定了一批训练集数据。
我们要做的是利用手上的训练集数据,得出
x
x
x与
y
y
y之间的函数
f
f
f关系,并用f函数来预测任意面积
x
x
x对应的房价。
假设
x
x
x与
y
y
y是线性关系,则我们可以接着假设一元线性回归函数如下来代表
y
y
y的预测值:
h
Θ
=
θ
0
+
θ
1
x
h_\Theta = \theta_0+\theta_1x
hΘ=θ0+θ1x
带入
x
x
x,使得
h
(
x
)
h(x)
h(x)的值与实际值
y
y
y越接近越好,通常用两者之间的均方差的大小来决定当前未知参数
θ
0
,
θ
1
\theta_0, \theta_1
θ0,θ1是否是最优值。即我们要估计这个回归函数,本质上就是来估计
θ
0
,
θ
1
\theta_0, \theta_1
θ0,θ1的值。
多变量的情形:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
=
∑
i
=
0
n
θ
i
x
i
=
θ
T
x
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2 + ... + \theta_nx_n =\sum_{i=0}^{n}{\theta_ix_i} = \mathbf{\theta^Tx}
hθ(x)=θ0+θ1x1+θ2x2+...+θnxn=i=0∑nθixi=θTx
常用的成本函数(cost function)是最小二乘法:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2}\sum^{m}_{i=1}{(h_\theta(x^{(i)})-y^{(i)})^2}
J(θ)=21i=1∑m(hθ(x(i))−y(i))2
其中:
x
(
i
)
x^{(i)}
x(i)表示向量
x
x
x中的第
i
i
i个元素;
y
(
i
)
y^{(i)}
y(i)表示向量
y
y
y中的第
i
i
i个元素;
h
θ
(
x
(
i
)
)
h_\theta(x^{(i)})
hθ(x(i)) 表示回归函数;
m
m
m为训练集的数量;
为什么使用最小二乘法呢?
下面我们使用极大似然估计解释最小二乘(推导过程):
y ( i ) = θ T x ( i ) + ε ( i ) y^{(i)}=\theta^Tx^{(i)}+\varepsilon^{(i)} y(i)=θTx(i)+ε(i)
这里残差
ε
(
i
)
(
1
≤
i
≤
m
)
\varepsilon^{(i)} (1\leq i \leq m)
ε(i)(1≤i≤m)是独立同分布的,服从均值为0,方差为某定值
σ
2
\sigma^2
σ2的高斯分布。(原因:中心极限定理)
由残差
ε
(
i
)
(
1
≤
i
≤
m
)
\varepsilon^{(i)} (1\leq i \leq m)
ε(i)(1≤i≤m)服从均值为
0
0
0,方差为某定值
σ
2
\sigma^2
σ2的高斯分布,则
p ( ε ( i ) ) = 1 2 π σ e x p ( − ( ε ( i ) ) 2 2 σ 2 ) p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(\varepsilon^{(i)})^2}{2\sigma^2}) p(ε(i))=2πσ1exp(−2σ2(ε(i))2)
其中残差等于真实值减去预测值,代换有:
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
1
2
π
σ
e
x
p
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
p(y^{(i)}|x^{(i)};\theta)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2})
p(y(i)∣x(i);θ)=2πσ1exp(−2σ2(y(i)−θTx(i))2)
则似然函数即为所有样本出现的概率乘积,也就是同时看到 y 1 , y 2 , y 3 , . . . , y m y^1, y^2, y^3, ..., y^m y1,y2,y3,...,ym的概率
L ( θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m 1 2 π σ e x p ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) \begin{aligned} L(\theta) &= \prod_{i=1}^{m}{p(y^{(i)}|x^{(i)};\theta)} \\ &= \prod_{i=1}^{m}{\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2})} \end{aligned} L(θ)=i=1∏mp(y(i)∣x(i);θ)=i=1∏m2πσ1exp(−2σ2(y(i)−θTx(i))2)
对数似然函数为:
l
(
θ
)
=
l
o
g
L
(
θ
)
=
l
o
g
∏
i
=
1
m
1
2
π
σ
e
x
p
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
=
∑
i
=
1
m
l
o
g
1
2
π
σ
e
x
p
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
=
m
l
o
g
1
2
π
σ
−
1
σ
2
⋅
1
2
∑
i
=
1
m
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
\begin{aligned} l(\theta) &= logL(\theta) \\ &= log\prod_{i=1}^{m}{\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2})} \\ &= \sum_{i=1}^{m}{log\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2})} \\ &= mlog\frac{1}{\sqrt{2\pi}\sigma}-\frac{1}{\sigma^2}\cdot\frac{1}{2}\sum_{i=1}^{m}{(y^{(i)}-\theta^Tx^{(i)})^2} \end{aligned}
l(θ)=logL(θ)=logi=1∏m2πσ1exp(−2σ2(y(i)−θTx(i))2)=i=1∑mlog2πσ1exp(−2σ2(y(i)−θTx(i))2)=mlog2πσ1−σ21⋅21i=1∑m(y(i)−θTx(i))2
去掉上式的常数项,就得到了我们想要的公式:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2}\sum_{i=1}^{m}{(h_\theta(x^{(i)})-y^{(i)})^2}
J(θ)=21i=1∑m(hθ(x(i))−y(i))2
接下来看一下
θ
\theta
θ的解析式的求解过程
目标函数:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
J(\theta) = \frac{1}{2}\sum_{i=1}^{m}{(h_\theta(x^{(i)})-y^{(i)})^2}=\frac{1}{2}(\mathbf{X\theta-y})^T(\mathbf{X\theta-y})
J(θ)=21i=1∑m(hθ(x(i))−y(i))2=21(Xθ−y)T(Xθ−y)
对目标函数求梯度:
∇
θ
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
)
⟯
=
1
2
(
2
X
T
X
θ
−
X
T
y
−
(
y
T
X
)
T
)
=
X
T
X
θ
−
X
T
y
\begin{aligned} \nabla_\theta J(\theta)&=\nabla_\theta \lgroup \frac{1}{2}(\mathbf{X\theta-y})^T(\mathbf{X\theta-y})\rgroup \\ &= \nabla_\theta \lgroup \frac{1}{2}(\mathbf{\theta^TX^T-y^T})(\mathbf{X\theta-y})\rgroup \\ &=\nabla_\theta \lgroup \frac{1}{2}(\mathbf{\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty}) \rgroup \\ &=\frac{1}{2}(2\mathbf{X^TX\theta-X^Ty-(y^TX)^T}) \\ &=\mathbf{X^TX\theta-X^Ty} \end{aligned}
∇θJ(θ)=∇θ⟮21(Xθ−y)T(Xθ−y)⟯=∇θ⟮21(θTXT−yT)(Xθ−y)⟯=∇θ⟮21(θTXTXθ−θTXTy−yTXθ+yTy)⟯=21(2XTXθ−XTy−(yTX)T)=XTXθ−XTy
最后得到参数的解析式
θ
=
(
X
T
X
)
−
1
X
T
y
\mathbf{\theta=(X^TX)^{-1}X^Ty}
θ=(XTX)−1XTy
若 X T X \mathbf{X^TX} XTX不可逆或者防止过拟合,增加 λ \lambda λ扰动
θ = ( X T X + λ I ) − 1 X T y \mathbf{\theta=(X^TX+\lambda I)^{-1}X^Ty} θ=(XTX+λI)−1XTy
其中I是单位阵,出现过拟合的原因是求得的参数θ比较大,函数出现振荡,所以要解决过拟合就得使θ变小
来个简便的记忆方法来记住这个结论:
X
θ
=
y
⇒
X
T
X
θ
=
X
T
y
⇒
θ
=
(
X
T
X
)
−
1
X
T
y
\mathbf{X\theta=y}\Rightarrow \mathbf{X^TX\theta=X^Ty} \\ \Rightarrow \mathbf{\theta=(X^TX)^{-1}X^Ty}
Xθ=y⇒XTXθ=XTy⇒θ=(XTX)−1XTy
将目标函数增加平方和损失:
J ( θ ⃗ ) = 1 2 ∑ i = 1 m ( h θ ⃗ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 J(\vec{\theta}) = \frac{1}{2}\sum_{i=1}^{m}{(h_{\vec{\theta}}(x^{(i)})-y^{(i)})^2+\lambda\sum_{j=1}^{n}{\theta_j^2}} J(θ)=21i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2
后面的惩罚项防止过拟合。
梯度下降算法
梯度方向
∂
∂
θ
j
J
(
θ
)
=
∂
∂
θ
j
1
2
(
h
θ
(
x
)
−
y
)
2
=
2
⋅
1
2
(
h
θ
(
x
)
−
y
)
⋅
∂
∂
θ
j
(
h
θ
(
x
)
−
y
)
=
(
h
θ
(
x
)
−
y
)
⋅
∂
∂
θ
j
(
∑
i
=
0
n
θ
i
x
i
−
y
)
=
(
h
θ
(
x
)
−
y
)
x
j
\begin{aligned} \frac{\partial}{\partial \theta_j}J(\theta) &=\frac{\partial}{\partial \theta_j}\frac{1}{2}(h_\theta(x)-y)^2 \\ &= 2\cdot\frac{1}{2}(h_\theta(x)-y)\cdot\frac{\partial}{\partial \theta_j}(h_\theta(x)-y) \\ &=(h_\theta(x)-y)\cdot\frac{\partial}{\partial \theta_j}(\sum_{i=0}^{n}{\theta_ix_i-y}) \\ &=(h_\theta(x)-y)x_j \end{aligned}
∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=2⋅21(hθ(x)−y)⋅∂θj∂(hθ(x)−y)=(hθ(x)−y)⋅∂θj∂(i=0∑nθixi−y)=(hθ(x)−y)xj
批量梯度下降算法(BGD)(这种方式,是将所有的样本M都参与进去训练,这种方式当样本量比较大的话,计算量就会变得很大,所以这种方式适用的范围,仅是对那些样本较小的数据而言)
R
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
Repeat\ until\ convergence\ \{
Repeat until convergence {
θ
:
=
θ
j
+
α
∑
i
=
1
m
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\qquad\theta :=\theta_j+\alpha\sum_{i=1}^{m}{(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}}
θ:=θj+α∑i=1m(y(i)−hθ(x(i)))xj(i)
}
\}
}
随机梯度下降算法(SGD)(大体思路: 在给定的样本集合M中,随机取出副本N代替原始样本M来作为全集,对模型进行训练.这种训练由于是抽取部分数据,所以有较大的几率得到的是,一个局部最优解.但是一个明显的好处是,如果在样本抽取合适范围内,既会求出结果,而且速度还快.)
L
o
o
p
{
Loop \ \{
Loop {
f
o
r
i
=
1
t
o
m
,
{
\qquad for\ i=1\ to\ m, \{
for i=1 to m,{
θ
j
:
=
θ
j
+
α
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\qquad \qquad\theta_j:=\theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}
θj:=θj+α(y(i)−hθ(x(i)))xj(i)
}
\qquad\}
}
}
\}
}
与批量梯度下降对比,随机梯度下降求解的会是最优解吗?
(1)批量梯度下降—最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。
(2)随机梯度下降—最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。
折中:mini-batch
这是介于以上两种方法的折中,每次随机选取大小为
b
b
b的mini-batch,
b
<
m
b<m
b<m,
b
b
b通常取10,或者其他,这样既节省了计算整个批量的时间,同时用mini-batch计算的方向也会更加准确。