由于部分公式较长,手机端无法完整显示,建议使用PC端阅读博客。
1. 模型假设首先,我们来看一个例子,假设某用户向银行贷款,银行可以根据以往多个用户的信息,(在这里,假定每个用户的信息涉及工资、年龄以及贷款额度),结合该用户的个人信息,初步预测其贷款额度值。
用户编号 | 工资 | 年龄 | 额度 |
---|---|---|---|
1 | 4000 | 25 | 10000 |
2 | 5000 | 23 | 15000 |
3 | 6000 | 48 | 8000 |
4 | 20000 | 30 | 40000 |
5 | 30000 | 50 | 60000 |
这个预测过程首先根据以往的数据信息拟合一个函数模型,然后利用某用户的个人信息,通过该拟合模型预测出最终的结果值,这就是一个线性回归过程。
假设
Θ
1
\Theta_1
Θ1是年龄的参数,
Θ
2
\Theta_2
Θ2是工资的参数,那么需要拟合的平面函数如下:
h
Θ
(
x
)
=
Θ
0
+
Θ
1
x
1
+
Θ
2
x
2
(1)
h_\Theta (x)=\Theta_0+\Theta_1x_1+\Theta_2x_2\tag{1}
hΘ(x)=Θ0+Θ1x1+Θ2x2(1)
整合一下上面的公式:
h
Θ
(
x
)
=
∑
i
=
0
n
Θ
i
x
i
=
Θ
T
x
(2)
h_\Theta (x)=\sum_{i=0}^n\Theta_ix_i=\Theta^Tx\tag{2}
hΘ(x)=i=0∑nΘixi=ΘTx(2)
以上拟合的这个函数,即我们需要得到的线性回归预测模型。然而,要根据已有的数据,拟合出这个函数,即找到最优的 Θ \Theta Θ值,这是线性回归问题中的关键,在后续的内容中我们将进行详细讲解。
补充:将上面公式转换成矩阵形式,可以使得计算过程更高效。
2.目标函数 接下来,我们先提出误差这个概念,在预测过程中,真实值与预测值之间的误差是不可能避免的,这里我们用
ε
(
i
)
\varepsilon ^{(i)}
ε(i) 来表示误差。那么,对于每个样本,实际上满足以下公式:
y
i
=
Θ
T
x
(
i
)
+
ε
(
i
)
(3)
y^i=\Theta^Tx^{(i)}+\varepsilon^{(i)}\tag{3}
yi=ΘTx(i)+ε(i)(3)
对误差进行分析,误差 ε ( i ) \varepsilon ^{(i)} ε(i)是独立同分布的,同时服从均值为0方差为 σ 2 \sigma ^2 σ2的高斯分布。具体来说,
1. 独立:e.p. 张三和李四来贷款,他俩之间的行为本身是没有任何影响的;
2. 同分布:e.p. 他俩去的是同一家银行,因此从银行层面来说,对他们是“同等”看待的,即根据他们的工资和年龄,公平公正的给予其相应的贷款额度;
3. 高斯分布:e.p. 银行很可能会多给,也可能会少给,但大多数情况下这个浮动不会太大。极少情况下幅度比较大,这也符合正常情况。 (高斯分布即正太分布,正常情况下的随机分布)
由于误差服从均值为0高斯分布,可得到以下公式:
p
(
ε
(
i
)
)
=
1
2
π
σ
e
x
p
(
−
(
ε
(
i
)
)
2
2
σ
2
)
(4)
p(\varepsilon^{(i)})=\frac{1}{\sqrt{2\pi}\sigma }exp(-\frac{(\varepsilon ^{(i)})^2}{2\sigma ^2})\tag{4}
p(ε(i))=2πσ1exp(−2σ2(ε(i))2)(4)
将(3)式代入(4)式可得到
p
(
y
(
i
)
∣
x
(
i
)
;
Θ
)
=
1
2
π
σ
e
x
p
(
−
(
y
(
i
)
−
Θ
T
x
(
i
)
)
2
2
σ
2
)
(5)
p(y^{(i)}|x^{(i)};\Theta)=\frac{1}{\sqrt{2\pi}\sigma }exp(-\frac{(y^{(i)}-\Theta^Tx^{(i)})^2}{2\sigma ^2})\tag{5}
p(y(i)∣x(i);Θ)=2πσ1exp(−2σ2(y(i)−ΘTx(i))2)(5)
这样便得到了关于 y ( i ) y^{(i)} y(i)的条件概率 p ( y ( i ) ∣ x ( i ) ; Θ ) p(y^{(i)}|x^{(i)};\Theta) p(y(i)∣x(i);Θ),这里要使得预测值更接近于真实值,即条件概率 p ( y ( i ) ∣ x ( i ) ; Θ ) p(y^{(i)}|x^{(i)};\Theta) p(y(i)∣x(i);Θ)越大越好。
我们假设用于训练的样本为 m m m个,那么可通过找到最大似然估计,得到最优的解。
根据似然函数
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
)
(6)
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})\tag{6}
L(Θ)=i=1∏mp(y(i)∣x(i);Θ)=i=1∏m2πσ1exp(−2σ2(y(i)−ΘTx(i))2)(6)
由于正态分布中累乘不利于计算,这里采用一个小技巧,利用对数形式将式(6)简化。在对数形式中,可以将累乘转换成累加,利于计算,且不影响其函数单调性。
对数似然函数
l
o
g
L
(
Θ
)
=
l
o
g
∏
i
=
1
m
1
2
π
σ
e
x
p
(
−
(
y
(
i
)
−
Θ
T
x
(
i
)
)
2
2
σ
2
)
(7)
logL(\Theta)=log\prod _{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma }exp(-\frac{(y^{(i)}-\Theta^Tx^{(i)})^2}{2\sigma ^2})\tag{7}
logL(Θ)=logi=1∏m2πσ1exp(−2σ2(y(i)−ΘTx(i))2)(7)
进一步将上式化简:
l
o
g
L
(
Θ
)
=
∑
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
σ
2
∑
i
=
1
m
(
y
(
i
)
−
Θ
T
x
(
i
)
)
2
(9)
\begin{aligned} logL(\Theta)&=\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}{2\sigma^2}\sum_{i=1}^m(y^{(i)}-\Theta^Tx^{(i)})^2 \end{aligned}\tag{9}
logL(Θ)=i=1∑mlog2πσ1exp(−2σ2(y(i)−ΘTx(i))2)=mlog2πσ1−2σ21i=1∑m(y(i)−ΘTx(i))2(9)
要让上面的式(9)取到最大,就需要让式(10)最小,从而求得
Θ
\Theta
Θ值。(在式(9)中,与
Θ
\Theta
Θ有关的主要是负号后面的部分,因此,对式(9)求最大,可以对式(10)求最小。)
J
(
Θ
)
=
1
2
∑
i
=
1
m
(
y
(
i
)
−
Θ
T
x
(
i
)
)
2
(10)
J(\Theta)=\frac{1}{2}\sum_{i=1}^m(y^{(i)}-\Theta^Tx^{(i)})^2\tag{10}
J(Θ)=21i=1∑m(y(i)−ΘTx(i))2(10)
这里一般可采用最小二乘法求解。
补充,让似然函数越大越好,是让预测值成为真实值的可能性越大越好。
由以上可以得到其目标函数为
J
(
Θ
)
=
1
2
∑
i
=
1
m
(
y
(
i
)
−
Θ
T
x
(
i
)
)
2
=
1
2
(
X
Θ
−
y
)
T
(
X
Θ
−
y
)
(11)
J(\Theta)=\frac{1}{2}\sum_{i=1}^m(y^{(i)}-\Theta^Tx^{(i)})^2=\frac{1}{2}(X\Theta-y)^T(X\Theta-y)\tag{11}
J(Θ)=21i=1∑m(y(i)−ΘTx(i))2=21(XΘ−y)T(XΘ−y)(11)
求偏导:
▽ Θ 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 ( Θ 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 . (12) \begin{aligned} \triangledown_{\Theta}J(\Theta)&=\triangledown_{\Theta}\frac{1}{2}(X\Theta-y)^T(X\Theta-y)=\triangledown_{\Theta}\frac{1}{2}(\Theta^TX^T-y^T)(X\Theta-y)\\ &=\triangledown_{\Theta}(\frac{1}{2}(\Theta^TX^TX\Theta-\Theta^TX^Ty-y^TX\Theta+y^Ty))\\ &=\triangledown_{\Theta}(\frac{1}{2}(\Theta^TX^TX\Theta-\Theta^TX^Ty-y^TX\Theta+y^Ty))\\ &=\frac{1}{2}(2X^TX\Theta-X^Ty-(y^TX)^T)\\ &=X^TX\Theta-X^Ty \end{aligned}.\tag{12} ▽ΘJ(Θ)=▽Θ21(XΘ−y)T(XΘ−y)=▽Θ21(ΘTXT−yT)(XΘ−y)=▽Θ(21(ΘTXTXΘ−ΘTXTy−yTXΘ+yTy))=▽Θ(21(ΘTXTXΘ−ΘTXTy−yTXΘ+yTy))=21(2XTXΘ−XTy−(yTX)T)=XTXΘ−XTy.(12)
令偏导等于0,可得
Θ
=
(
X
T
X
)
−
1
X
T
y
(13)
\Theta=(X^TX)^{-1}X^Ty\tag{13}
Θ=(XTX)−1XTy(13)
这里所求得的解,即为我们需要找到的参数,但其实很多回归任务中, X T X X^TX XTX并不一定是可逆的,即上式不一定能够求解。在机器学习中,对于本类问题一般采用梯度下降法进行求解。
3. 梯度下降法简单介绍一下梯度下降法的思想,详细讲解可参考(待更新连接)。
这里形象的描述一下,假设要寻找山谷的最低处,那么应该如何以最快的方式找到呢?
主要分为以下几步:
1. 找到最合适的方向(对目标函数求偏导);
2.沿着最合适的方向走一小步(更新参数);
3.重复迭代步骤1和步骤2,最终找到最低处(找到最优解)。
4. 梯度下降法求解目标函数 由上面的推导得到要求解的目标函数为
J
(
Θ
)
=
1
2
∑
i
=
1
m
(
y
(
i
)
−
Θ
T
x
(
i
)
)
2
(14)
J(\Theta)=\frac{1}{2}\sum_{i=1}^m(y^{(i)}-\Theta^Tx^{(i)})^2\tag{14}
J(Θ)=21i=1∑m(y(i)−ΘTx(i))2(14)
对目标函数求偏导,即寻找梯度方向
∂
J
(
Θ
)
∂
Θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
−
h
Θ
(
x
i
)
)
x
j
i
(15)
\frac{\partial J(\Theta)}{\partial\Theta_j}=-\frac{1}{m}\sum_{i=1}^{m}(y^i-h_{\Theta}(x^i))x_j^i\tag{15}
∂Θj∂J(Θ)=−m1i=1∑m(yi−hΘ(xi))xji(15)
x j i x_j^i xji在这里表示第 i i i个样本的第 j j j个属性,即对某一个样本, x j x_j xj对应公式(1)中的 x 1 x_1 x1、 x 2 x_2 x2、 x 3 x_3 x3。
这里讲解三种梯度下降法的方式
1.批量梯度下降法
批量梯度下降法容易得到最优解,但由于每次考虑所有样本,速度很慢。
Θ j ′ = Θ j + 1 m ∑ i = 1 m ( y i − h Θ ( x i ) ) x j i (16) {\Theta}'_j=\Theta_j+\frac{1}{m}\sum_{i=1}^m(y^i-h_\Theta(x^i))x_j^i\tag{16} Θj′=Θj+m1i=1∑m(yi−hΘ(xi))xji(16)
2.随机梯度下降法
在随机梯度下降法中,每一次迭代一个样本,即式(15)中的
m
m
m取1,迭代速度快,但不能保证每一次都朝着收敛的方向更新
Θ
j
′
=
Θ
j
+
(
y
i
−
h
Θ
(
x
i
)
)
x
j
i
(17)
{\Theta}'_j=\Theta_j+(y^i-h_\Theta(x^i))x_j^i\tag{17}
Θj′=Θj+(yi−hΘ(xi))xji(17)
3.小批量梯度下降法
每次更新使用一小部分数据来算,即式(15)中的
m
m
m取 16 (在这里,数字的选择视情况而定,后面的内容有提到),迭代速度比较快,并且收敛也比较快,较为常用。
Θ
j
′
=
Θ
j
+
α
1
16
∑
k
=
i
i
+
15
(
y
(
k
)
−
h
Θ
(
x
(
k
)
)
)
x
j
(
k
)
(18)
{\Theta}'_j=\Theta_j+\alpha\frac{1}{16} \sum_{k=i}^{i+15}(y^{(k)}-h_\Theta(x^{(k)}))x_j^{(k)}\tag{18}
Θj′=Θj+α161k=i∑i+15(y(k)−hΘ(x(k)))xj(k)(18)
公式中假定一个小批量为16个数据,比较常见的为16、32、64、128,这个在很多时候还得考虑内存和效率问题。