注意⚠️阅读本文前,你应该需要掌握:机器学习线性回归模型、高等数学微积分部分内容、线性代数矩阵部分内容
前情提要:https://blog.csdn.net/weixin_45434953/article/details/130593910
一、多元线性回归的假设函数
首先我们考虑以下的例子:
有一个数据集,里面给出了房屋的价格、面积大小、楼层数、房龄和寝室数量,希望可以建立模型,根据面积大小、楼层数、房龄和寝室数量推测出房屋售价。
- n用于表示特征量数量
- x ( i ) x^{(i)} x(i)用于表示第i个样例
- x j ( i ) x_j^{(i)} xj(i)用于表示第i个样例的第j个特征的值
那么第二个样例写成矩阵形式如下:
x
(
2
)
=
[
1416
2
2
40
]
x^{(2)}=\begin{bmatrix}1416 \\2 \\2 \\40\end{bmatrix}
x(2)=
14162240
我们在前面的线性回归中,使用了
h
θ
=
θ
0
+
θ
1
x
h_\theta = \theta_0+\theta_1x
hθ=θ0+θ1x作为假设函数,但是在这里显然已无法满足有4个自变量的线性回归,那么当前样例的假设函数应该设置为
h
θ
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
θ
4
x
4
h_\theta = \theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4
hθ=θ0+θ1x1+θ2x2+θ3x3+θ4x4。当然,我们推广开来可得,如果
x
0
x_0
x0恒为1的话,对于拥有n个特征量的线性回归的假设函数应该为
h
θ
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
.
.
.
.
+
θ
n
x
n
h_\theta = \theta_0x_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+....+\theta_nx_n
hθ=θ0x0+θ1x1+θ2x2+θ3x3+....+θnxn,裆燃,如果你想用向量的形式表示,那么则如下所示
h
θ
=
[
θ
0
θ
1
θ
2
.
.
.
θ
n
]
[
x
0
x
1
x
2
.
.
.
x
n
]
(
x
0
=
1
)
h_\theta=\begin{bmatrix} \theta_0 & \theta_1 & \theta_2 & ... & \theta_n\end{bmatrix}\begin{bmatrix}x_0\\x_1 \\x_2 \\... \\x_n\end{bmatrix}(x_0=1)
hθ=[θ0θ1θ2...θn]
x0x1x2...xn
(x0=1)
二、多元梯度下降法
上面已经得出了假设函数,在含有n个特征的多元线性回归下我们可以将n个特征值看为一个有n个元素的向量,上面已经提到其假设函数为
h
θ
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
.
.
.
.
+
θ
n
x
n
(
x
0
=
1
)
h_\theta = \theta_0x_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+....+\theta_nx_n(x_0=1)
hθ=θ0x0+θ1x1+θ2x2+θ3x3+....+θnxn(x0=1),那么多元线性回归的代价函数是什么呢?根据之前学习单特征值的线性回归的经验推导,可知其代价函数为
J
(
θ
0
,
θ
1
.
.
.
,
θ
n
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
(1)
J(\theta_0,\theta_1...,\theta_n) = \frac{1}{2m}\sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)})^2\tag{1}
J(θ0,θ1...,θn)=2m1i=1∑m(hθ(x(i))−y(i))2(1)也就是会使用预测点和实际点的差值的平方的和作为代价函数
同时,他的梯度下降函数如下:
θ
j
:
=
θ
j
−
α
∂
J
(
θ
0
,
θ
1
.
.
.
,
θ
n
)
∂
θ
j
(2)
\theta_j := \theta_j-\alpha\frac{\partial J(\theta_0,\theta_1...,\theta_n)}{\partial \theta_j } \tag{2}
θj:=θj−α∂θj∂J(θ0,θ1...,θn)(2)
从
j
=
0
,
.
.
.
.
,
n
j=0,....,n
j=0,....,n循环该函数
将公式(1)和公式(2)合并起来,并且进行求导,可以得到梯度下降函数如下:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
(3)
\theta_j := \theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\tag{3}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)(3)
这里
j
=
0
,
1
,
2
,
.
.
n
j={0,1,2,..n}
j=0,1,2,..n,并且
(
x
0
=
1
)
(x_0=1)
(x0=1)
三、使用特征缩放改进梯度下降
这里我歪一下楼,先介绍一些梯度下降的技巧,其中一个技巧就是特征缩放,假设有一个拥有房屋面积和房间数两个特征量和一个房屋价值的结果变量的数据集,其中房屋面积
θ
1
\theta_1
θ1取值为0到2000,房间数
θ
2
\theta_2
θ2的取值为0到8。可以看出两个特征向量差别特别大。如果我们画出该数据集的代价函数
J
(
θ
)
J(\theta)
J(θ),会发现它特别的狭长,这对梯度下降并不友好,下降的路径可能会较为曲折并且花费的时间也会比较多
一个简单的解决办法就是,对特征值的取值进行缩放,比如
θ
1
:
=
θ
1
2000
,
θ
2
=
θ
2
8
\theta_1 := \frac{\theta_1}{2000},\theta_2=\frac{\theta_2}{8}
θ1:=2000θ1,θ2=8θ2,这样一来,
θ
1
\theta_1
θ1和
θ
2
\theta_2
θ2取值范围都是0到1,这样得到的梯度下降函数收敛将会更加快速
在更普遍的情况中,我们的目标一般是将特征值约束在
(
−
1
,
1
)
(-1,1)
(−1,1)的区间中,因此特征缩放又被称为归一化。假设有一个特征向量
x
1
x_1
x1,其取值范围为
(
0
,
2000
)
(0,2000)
(0,2000),平均值
A
v
g
(
x
1
)
=
1000
Avg(x_1)=1000
Avg(x1)=1000,那么一般采用以下式子进行归一化:
x
1
=
x
1
−
A
v
g
(
x
1
)
2000
x_1 = \frac{x_1-Avg(x_1)}{2000}
x1=2000x1−Avg(x1)
这又被称为均值归一化。
说到底,特征缩放是用于将特征向量的取值范围限制在一个相近的范围内,使得梯度下降更加顺滑,所需的次数更少。
四、多项式回归
假设有如下一个数据集合,其中特征为房屋大小,结果集为房屋价格
可以看到,这些点不太适合用线性回归,我们可以试着使用二元假设函数
h
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
h(x)=\theta_0+\theta_1x+\theta_2x^2
h(x)=θ0+θ1x+θ2x2来拟合。
但是这种二次方假设函数会让房子面积达到一定地步后,价格反而下降了,所以使用
h
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
h(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3
h(x)=θ0+θ1x+θ2x2+θ3x3会更合理。如果x的取值为0到2000,那么x3将会是相当大的数字,因此归一化是十分必要的。