第二周课程学习
多元线性回归
1. 多元线性回归
1.1 多特征向量
具备多个变量的线性回归方程也叫做多元线性回归.
我们最初见到的线性回归的形式为:
h
(
θ
)
=
θ
0
+
θ
1
∗
x
h(θ)=θ_0+θ_1*x
h(θ)=θ0+θ1∗x
现在我们引入多个特征值, 这样就使得我们的线性回归方程的形式变为了:
h
(
θ
)
=
θ
0
+
θ
1
∗
x
1
+
θ
2
∗
x
2
+
.
.
.
+
θ
n
∗
x
n
h(θ)=θ_0+θ_1*x_1+θ_2*x_2+...+θ_n*x_n
h(θ)=θ0+θ1∗x1+θ2∗x2+...+θn∗xn
由于在上述形式中, θ 0 θ_0 θ0前面缺少对应的 x x x变量, 这就导致向量组 θ θ θ和向量组 x x x之间的维数不一致, θ θ θ向量组的维数为 n n n+1, 但是向量组 x x x的维数为 n n n.为此,我们引入特定的 x 0 x_0 x0=1保持向量组之间的维数的一致性.
在此基础上我们得到了新的形式:
h
(
θ
)
=
θ
0
∗
x
0
+
θ
1
∗
x
1
+
θ
2
∗
x
2
+
.
.
.
+
θ
n
∗
x
n
h(θ)=θ_0*x_0+θ_1*x_1+θ_2*x_2+...+θ_n*x_n
h(θ)=θ0∗x0+θ1∗x1+θ2∗x2+...+θn∗xn
进一步,我们可以将
h
(
θ
)
h(θ)
h(θ)看作向量
θ
θ
θ和向量
X
X
X的函数从而得到:
h
(
θ
)
=
θ
T
∗
X
h(θ)=θ^T*X
h(θ)=θT∗X
1.2 具有多个变量的梯度下降算法
梯度下降算法的方程形式是相同的. 我们只需要将其扩充为
n
n
n次的形式.
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
0
(
i
)
\theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
0
(
i
)
\theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}
θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)
θ
2
:
=
θ
2
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
⋅
x
2
(
i
)
\theta_2 := \theta_2 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)}
θ2:=θ2−αm1i=1∑m(hθ(x(i))−y(i))⋅x2(i)
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ; f o r ( j : = 0... n ) \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} ;for (j := 0...n) θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))⋅xj(i);for(j:=0...n)
1.3 梯度下降算法实践 — 特征放缩
我们可以通过将每个输入值都设置在大致相同的范围内来加快梯度下降的速度。 这是因为θ在小范围内会迅速下降,而在大范围内会缓慢下降。因此当变量的数据大小范围的分布非常不均匀时,会以很低的效率获得最终的结果。
防止这种情况的方法是修改输入变量的范围,来它们都大致相同。
理想情况下:
比如我们所有的特征向量
X
X
X中的数据全部分布在区间
(
−
1
,
1
)
(-1, 1)
(−1,1)上.
即
−
1
≤
x
(
i
)
≤
1
-1≤x_{(i)}≤1
−1≤x(i)≤1.
这只是一种理想的假设, 实际上我们的数据很难呈现出这样的分布.
我们经常使用特征缩放和均值归一化这两种方法来对我们的数据进行处理, 从而提高梯度下降算法的执行效率。
特征缩放将输入值除以输入变量的范围(即最大值减去最小值), 从而得到的新范围仅为1. 平均归一化从输入值的平均值中减去输入变量的平均值. 这将导致输入变量的新平均值仅为零.
要实现这两种方法, 请按照以下公式调整输入值:
x
i
=
x
i
−
μ
i
s
i
x_i = \frac {x_i - μ_i}{s_i}
xi=sixi−μi
其中,
μ
i
μ_i
μi是
X
X
X的平均值,
s
i
s_i
si是标准差,一般可以直接用
m
a
x
max
max-
m
i
n
min
min来计算.
[小结] 我们可以利用放缩手段使得各个特征值间的差异更小,从而使计算更加快速的收敛.公式可以简化为
x
=
x
−
x
ˉ
m
a
x
−
m
i
n
x=\frac{x-\bar x}{max-min}
x=max−minx−xˉ
1.4 梯度下降算法实践2 — 学习率
定义: 如果在一次迭代中, J ( θ ) J(θ) J(θ)的减少量小于 ϵ \epsilon ϵ, 则声明这次迭代之后结果收敛. ϵ \epsilon ϵ是某些极小的值. 事实上我们很难准确的选择这个阈值.
那么我们如何保证梯度下降函数能正确的工作呢?✔
我们在[吴恩达机器学习]第一周课程笔记
提到, 梯度下降算法和 α α α关系密切.
所以,绘制一个在 x x x轴上具有迭代次数的图. 现在在梯度下降的迭代次数上绘制成本函数 J ( θ ) J(\theta) J(θ)。 如果 J ( θ ) J(\theta) J(θ)随着迭代次数的增加而增大,则可能需要减小 α α α。
总之,
α
α
α对梯度下降算法的影响为:
α
α
α太小: 会导致迭代次数很大, 导致收敛很慢.
α
α
α太小: 会导致不收敛的情况发生.
1.5 特征和多项式回归
当我们具备了一个特征
x
1
x_1
x1的时候, 我们可以将这个特征值进行一些变换, 如果我们使用线性函数来作为假设函数不太合理, 我们同样可以尝试使用其他的函数形式, 就像我展示的这样, 尝试变换为带有根号的函数.
比如说我们的假设函数
h
(
x
)
h(x)
h(x)的形式可以做出如下改变:
h
(
x
)
=
θ
0
+
θ
1
∗
x
1
h(x) = θ_0 + \theta_1*x_1
h(x)=θ0+θ1∗x1
h
(
x
)
=
θ
0
+
θ
1
∗
x
1
+
θ
2
∗
(
x
1
)
h(x) = \theta_0 + \theta_1*x_1 + \theta_2*\sqrt{(x_1)}
h(x)=θ0+θ1∗x1+θ2∗(x1)
在这里我们实现了将
x
1
x_1
x1进行了复用, 但是我们需要对
h
(
x
)
h(x)
h(x)进行处理, 因为
x
1
x_1
x1和
x
1
\sqrt{x_1}
x1的取值范围可能会发生很大的变化. 这就要用到我们之前提到的放缩.
2. 分析计算参数
2.1 正规方程
之前我们提到了使用梯度下降法求解
J
(
θ
)
J(\theta)
J(θ)的最小值. 梯度下降法通过不断的迭代来寻找到
J
(
θ
)
J(\theta)
J(θ)在定义域中的可能的最小解.
现在我们学习一种新的求解最小值的方法,这是一种求
J
(
θ
)
J(\theta)
J(θ)的最小值的解析求法. 这种方法通过利用求导的方式来直接计算
J
(
θ
)
J(\theta)
J(θ)的最小值, 这样我们便无需再进行迭代.
正规方程的公式如下:
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{−1}X^Ty
θ=(XTX)−1XTy
正规方程和梯度下降算法的比较:
梯度下降 | 正规方程 |
---|---|
需要选择 α α α | 不需要选择 α α α |
需要多次迭代 | 不需迭代 |
O ( k n 2 ) O (kn^2) O(kn2) | O ( n 3 ) O(n^3) O(n3) |
n n n很大的时候性能也很好 | n n n很大会很慢 |
2.2 正规方程不可逆的情况
上面提到正规方程的公式为:
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{−1}X^Ty
θ=(XTX)−1XTy
那么是否存在
(
X
T
X
)
−
1
(X^TX)^{−1}
(XTX)−1不可逆的情况呢?
- 当某两个特征值之间存在某种特定关联的时候, 不可逆. 即某两个特征值之间线性相关.
- 特征值特别多的时候( m ≤ n m≤n m≤n)
解决上述问题的方法包括删除与另一个线性相关的特征值, 或者在特征值过多时删除一个或多个特征值.