前言:由于本人今年考研结束后才开始接触ML,入门决定从Andrew Ng的ML课程学起。笔记内容主要来自Andrew Ng教授的讲义和学习视频,以及在学习过程中翻阅的资料,顺序大致按照网易云课堂上的目录,大多是自己觉得有意义的或者难懂的内容,然而其中难免掺杂自己的理解,如有错误,敬请大家批评指正。
三 线性代数回顾(Linear Algebra Review)
主要讲了矩阵、向量以及加法、乘法,和矩阵的逆。
此处之写一下矩阵的逆和转置吧,前面的大家应该都很熟了,就不再赘述了。
矩阵的逆:如矩阵是一个矩阵(方阵),如果有逆矩阵,则:
AA−1=A−1A=1
A
A
−
1
=
A
−
1
A
=
1
矩阵的转置:设A为
m×n
m
×
n
阶矩阵(即m行n列),第i行j列的元素是a(i,j),即:A=a(i,j)
定义B为A的转置矩阵,则B为
n×m
n
×
m
阶矩阵,满足B=a(j,i),即b(i,j)=a(i,j),记
AT=B
A
T
=
B
。
例如:
∣∣∣∣acebdf∣∣∣∣T
|
a
b
c
d
e
f
|
T
=
∣∣∣abcdef∣∣∣
|
a
c
e
b
d
f
|
矩阵的转置的基本性质:
(A±B)T=AT±BT
(
A
±
B
)
T
=
A
T
±
B
T
(A×B)T=BT×AT
(
A
×
B
)
T
=
B
T
×
A
T
(AT)T=A
(
A
T
)
T
=
A
(KA)T=KAT
(
K
A
)
T
=
K
A
T
四 多变量线性回归(Linear Regression with Multiple Variables)
多维特征(Multiple Features)
上一个Part我们探讨了单变量/特征的回归模型,现在我们增添特征。
原来单变量的假设h为:
hθ(x)=θ0+θ1x1
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
,现在变量/特征增多后变为
hθ(x)=θ0+θ1x1+...+θnxn
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
这个公式中有n+1个参数和n个变量,为了使得公式能够简化一些,引入
x0=1
x
0
=
1
(这样就是n+1个参数,n+1个变量了),则公式转化为:
hθ(x)=θ0x0+θ1x1+...+θnxn
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
此时模型中的参数是一个n+1维的向量,任何一个训练实例也都是n+1维的向量,特征矩阵X的维度是
m×(n+1)
m
×
(
n
+
1
)
。 因此公式可以简化为:
hθ(x)=θTx
h
θ
(
x
)
=
θ
T
x
,其中上标T代表矩阵转置。
多变量梯度下降(Gradient Descent for Multiple Variables)
与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:
J(θ0,θ1,...,θn)=12m∑mi=1(hθ(x(i))−y(i))2
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
。
其中,
hθ(x)=θTx=θ0+θ1x1+...+θnxn
h
θ
(
x
)
=
θ
T
x
=
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
多变量线性回归问题的目标和单变量问题一样,也是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:
Repeat{
θj:=θj−α12m∑mi=1(hθ(x(i))−y(i))2
θ
j
:=
θ
j
−
α
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
}
求导后得到:
Repeat{
θj:=θj−α1m∑mi=1(hθ(x(i)−y(i))⋅x(i)j)
θ
j
:=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
j
(
i
)
)
}
当
n≥1
n
≥
1
时,
θ0:=θ0−α1m∑mi=1(hθ(x(i)−y(i))⋅x(i)0)
θ
0
:=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
0
(
i
)
)
θ1:=θ1−α1m∑mi=1(hθ(x(i)−y(i))⋅x(i)1)
θ
1
:=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
1
(
i
)
)
…
我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
梯度下降法实践 (Gradient Descent in Practice)
特征缩放(Feature Scaling )
在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图:
最简单的方法是令:
xn=xn−μnsn
x
n
=
x
n
−
μ
n
s
n
,其中
μn
μ
n
是平均值,
sn
s
n
是标准差。
学习率(Learning Rate)
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
梯度下降算法的每次迭代受到学习率的影响,如果学习率过小,则达到收敛所需的迭代次数会非常高;如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率:
α=0.01,0.03,0.1,0.3,1,3,10
α
=
0.01
,
0.03
,
0.1
,
0.3
,
1
,
3
,
10
特征值和多项式回归(Features and Polynomial Regression)
线性回归并不适用于所有数据,有时我们需要曲线(多项式)来适应我们的数据。
比如一个二次方模型:
hθ(x)=θ0+θ1x1+θ2x22
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
.
或者三次方模型::
hθ(x)=θ0+θ1x1+θ2x22+θ3x33
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
+
θ
3
x
3
3
.
又或者带开方的::
hθ(x)=θ0+θ1x1+θ2x−−√2
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
通常我们需要先观察数据然后再决定准备尝试怎样的模型。如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
正规方程(Normal Equation)
到目前为止,我们一直在使用的线性回归的算法是梯度下降法。就是说为了最小化代价函数 J(θ) ,我们使用的迭代算法需要通过多次迭代来计算梯度下降来收敛到全局最小值。
对于某些线性回归问题,正规方程方法是更好的解决方案。与梯度下降法相比,正规方程可以一次性求解
θ
θ
的最优值。
比如:
J(θ)=aθ2+bθ+c
J
(
θ
)
=
a
θ
2
+
b
θ
+
c
,其中
θ
θ
是一个标量。其函数图像如图。
在以前的方法中,我们是对每个参数
θj
θ
j
求
J(θ)
J
(
θ
)
的偏导数,然后使得偏导数为0,继而求得
θ0,θ1...θn
θ
0
,
θ
1
.
.
.
θ
n
的值,然后得到
J(θ)
J
(
θ
)
的值。
现在,正规方程可以一次性求解
θ
θ
的最优值。
假设我们的训练集特征矩阵为 X(包含了
x0=1
x
0
=
1
)并且我们的训练集结果为向量 y,则利用正规方程解出向量
θ=(XTX)−1XTy
θ
=
(
X
T
X
)
−
1
X
T
y
。
Ng是用矩阵的求导法则推导的,这法则我也没学过,这里试着用定理推导一下,个人认为还是比较好理解的
(其实也就是
Xθ=y
X
θ
=
y
,
θ是n+1维的,X是m∗(n+1)维的,y是m∗1维的
θ
是
n
+
1
维
的
,
X
是
m
∗
(
n
+
1
)
维
的
,
y
是
m
∗
1
维
的
)
①:将等式左右两边同乘以
XT
X
T
,此时等式变为
XTXθ=XTy
X
T
X
θ
=
X
T
y
(要想消掉X首先想到的是乘以
X−1
X
−
1
,但是X是m*(n+1)维的矩阵,不一定是方阵,所以乘以
XT
X
T
使得
θ
θ
左边的项变为方阵)
②:将
XTXθ=XTy
X
T
X
θ
=
X
T
y
两边同乘以
(XTX)−1
(
X
T
X
)
−
1
,此时等式变为
Eθ=(XTX)−1XTy
E
θ
=
(
X
T
X
)
−
1
X
T
y
,即
θ=(XTX)−1XTy
θ
=
(
X
T
X
)
−
1
X
T
y
注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。此时把重复的特征(两行/列成比例)或者多余的不那么重要的(使得特征向量与训练数量相等)特征去掉,使得矩阵变为可逆矩阵就可以。
总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,通常使用正规方程法,而不使用梯度下降法。
随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。或者我们以后在课程中,会讲到的一些其他的算法,因为正规方程法不适合或者不能用在它们上。但对于这个特定的线性回归模型,正规方程法是一个比梯度下降法更快的替代算法。所以,根据具体的问题,以及你的特征变量的数量,这两种算法都是值得学习的。
注:PartⅡ我突然想用Markdown来写公式,而不是一味的去复制粘贴,一味的截图,并经有些东西还是自己写出来印象才深刻,尽管写这一个Part花了不少时间但是还是认为值得的。此处贴上Markdown公式指导手册链接https://www.zybuluo.com/codeep/note/163962#cmd-markdown-%E5%85%AC%E5%BC%8F%E6%8C%87%E5%AF%BC%E6%89%8B%E5%86%8C