转载请注明出处
引言
本次,介绍第一个机器学习算法线性回归,主要参考Ng老师的机器学习课程,并对其内容进行了梳理、拓展与补充。
问题介绍
房价预测是介绍机器学习基础算法的基本引题,房价预测是指给定房子的一些属性,如房子大小、所处位置、房屋户型等,预测房价。
任务建模
分析任务
分析任务的目的是探究问题本质,清楚问题的定义。如房价预测,指预测出具体的房价数值,该问题归为机器学习的回归问题。
数学建模
使用线性回归Linear Regression算法介绍机器学习建模流程。
H
θ
=
θ
0
+
θ
1
x
1
+
.
.
.
θ
n
x
n
H_\theta=\theta_0+\theta_1x_1+...\theta_nx_n
Hθ=θ0+θ1x1+...θnxn
上式 表示线性回归数学表达式,是对输入变量计算的一种方式。其中
θ
表
示
\theta表示
θ表示参数,
x
x
x表示输入变量,
H
H
H表示预测的结果。
目标: m i n i m i z e θ 0 , θ 1 , , , , θ n J ( θ 0 , θ 1 , , , , θ n ) minimize_{\theta_0,\theta_1,,,,\theta_n}J(\theta_0,\theta_1,,,,\theta_n) minimizeθ0,θ1,,,,θnJ(θ0,θ1,,,,θn)即,最优解问题,最小化代价函数。
这就带来了一个问题:如何得到参数 ?
我们可将该问题分为三个部分:
- 初始化模型参数
- 拟合模型与真实数据
- 优化模型参数
1. 初始化模型参数
这个部分比较容易理解,就是对初始状态参数进行赋值,经常使用的方式为初始化为标准正态分布。
2. 拟合模型与真实数据
这部分内容为核心内容,首先我们需要找到一种方法度量模型与真实数据拟合程度,在机器学习中我们称之为损失函数(Loss Function)。
常用的损失函数包括:
- 0-1损失函数 (0-1 Loss Function) L ( Y , f ( X ) ) = 1 L(Y, f(X))=1 L(Y,f(X))=1 if Y = = f ( X ) Y==f(X) Y==f(X) || L ( Y , f ( X ) ) = 0 L(Y, f(X))=0 L(Y,f(X))=0 if Y ! = f ( X ) Y!=f(X) Y!=f(X)
- 平方损失函数 (Quadratic Loss Function) L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y, f(X))=(Y-f(X))^2 L(Y,f(X))=(Y−f(X))2
- 绝对值损失函数 (Absolute Loss Function) L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y, f(X))=|Y-f(X)| L(Y,f(X))=∣Y−f(X)∣
- 对数损失函数 (Logarithmic Loss Function) 或对数似然损失函数 (Log-likelihood Loss Function)
L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y, P(Y|X))=-logP(Y|X) L(Y,P(Y∣X))=−logP(Y∣X)
损失函数越小,模型对真实数据的拟合程度越好。
损失函数并不是固定的,算法研究者可根据具体问题设计损失函数
一些Paper就是通过对问题的分析,提出新的损失函数,使得模型表现性能更好。
如何在所有数据上计算损失,从而为第三部分参数优化做准备那?
从而引入一个概念,风险损失,表示平均意义上模型预测的表现性能,为损失函数的期望。
风险损失包含两个方面:
- 经验风险
- 结构风险
在NG的课程中我们最开始听到的就是代价函数Cost Function,在这里代价损失函数就是表示经验风险。我们在后面还是称经验损失,这部分知识属于前期理论补充。
经验风险 模型关于训练集的平均损失,称为经验风险和经验损失。
结构风险 当模型对训练数据拟合的过好,就出现了过拟合情况,需要对经验风险进行惩罚,或者说正则化。后面内容再对其详细地介绍。
3. 优化模型参数
常用的方法有:
- 梯度下降 Gradient Descent(将会详细介绍)
- 牛顿法和拟牛顿法
- 共轭梯度法
- 启发式优化方法
扯回正题,房价预测问题上使用的代价函数(经验风险)为
J
θ
=
1
2
m
∑
i
=
1
m
(
H
θ
(
x
i
)
−
Y
i
)
2
J_\theta=\frac{1}{2m}\sum^m_{i=1}(H_\theta(x^i)-Y^i)^2
Jθ=2m1i=1∑m(Hθ(xi)−Yi)2,
所使用的损失函数为平方损失。其中
2
m
2m
2m中 “2”是为了使用梯度下降求导时,与平方相抵消便于计算,‘m’ 表示样本的总个数,
x
i
x^i
xi表示第 i 个样本的属性(房屋大小、房龄等),
y
i
y^i
yi表示房价(标签)。
这里介绍一下 属性和特征? 属性是现实世界中我们对物体的特性的称谓,比如房子的面积,长度,宽度,房子的年龄等。当进行机器学习建模时,我们需要用到属性,这时我们称之为特征。
已知代价函数和初始化参数,如何依据训练数据优化参数那?
梯度下降算法常用于参数最优化,其公式描述为:
Repeat until convergence {
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
,
,
,
,
,
θ
n
)
\theta_j := \theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1,,,,,\theta_n)
θj:=θj−α∂θj∂J(θ0,θ1,,,,,θn)
t
e
m
p
0
:
=
θ
0
−
α
∂
∂
θ
0
J
(
θ
0
,
θ
1
,
,
,
,
,
θ
n
)
temp0 := \theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1,,,,,\theta_n)
temp0:=θ0−α∂θ0∂J(θ0,θ1,,,,,θn)
t
e
m
p
1
:
=
θ
1
−
α
∂
∂
θ
1
J
(
θ
0
,
θ
1
,
,
,
,
,
θ
n
)
temp1 := \theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1,,,,,\theta_n)
temp1:=θ1−α∂θ1∂J(θ0,θ1,,,,,θn)
.
.
.
.
.
.
.
.......
.......
t
e
m
p
n
:
=
θ
n
α
∂
∂
θ
n
J
(
θ
0
,
θ
1
,
,
,
,
,
θ
n
)
tempn := \theta_n\alpha\frac{\partial}{\partial\theta_n}J(\theta_0,\theta_1,,,,,\theta_n)
tempn:=θnα∂θn∂J(θ0,θ1,,,,,θn)
θ
0
:
=
t
e
m
p
0
\theta_0:=temp0
θ0:=temp0
θ
1
:
=
t
e
m
p
1
\theta_1:=temp1
θ1:=temp1
.
.
.
.
.
.
......
......
θ
n
:
=
t
e
m
p
n
\theta_n:=tempn
θn:=tempn
}
梯度下降就是从一个点开始,往梯度最大的方向移动。要计算当前点的梯度最大方向,如果不同步更新的话,计算的就不是当前点,也就无法保证得到局部最优。
现在我们来介绍一下随机梯度更新的意义:
首先,以单变量线性回归为例
J
θ
=
θ
0
+
θ
1
x
J_\theta=\theta_0+\theta_1x
Jθ=θ0+θ1x,进一步简化计算,令
θ
0
=
0
\theta_0=0
θ0=0,下面给出
J
θ
J_\theta
Jθ随着
θ
1
\theta1
θ1变化而变化的曲线图:
可以看到代价函数曲线,其J关于
θ
\theta
θ的导数表示了曲线上某点的斜率,通过上述的公式,我们可以看出无论当前处于哪个点,都是沿最大梯度方向更新
θ
\theta
θ的值。
另外给出关于两个变量
θ
0
\theta_0
θ0,
θ
1
\theta_1
θ1的3D图:
图中可以看出,也是存在一个最低点,但是这样来看对于梯度的变化不是很形象,下面给出两个变量变化的等高线图:
从图可以看出,等高线图相当于3D的图从上往下的压缩。matlab可以绘制该图。
注意到梯度下降公式中 α \alpha α参数,该参数称为 “学习率”(learning rate),其表示了每次参数更新的幅度。若 α \alpha α设置地过小,参数更新速度慢,模型收敛速度就慢。若 α \alpha α设置地过大,参数更新幅度过大就会跳过最优点,造成 来回震荡,模型难以收敛。
引入矩阵计算
多元线性回归公式
H
θ
=
θ
0
+
θ
1
x
1
+
.
.
.
θ
n
x
n
H_\theta=\theta_0+\theta_1x_1+...\theta_nx_n
Hθ=θ0+θ1x1+...θnxn也可以表示为:
x
=
[
x
0
,
x
1
,
,
,
,
x
n
]
θ
=
[
θ
0
,
θ
1
,
,
,
,
,
θ
n
]
H
θ
=
θ
T
x
x=[x_0,x_1,,,,x_n] \\ \theta = [\theta_0,\theta_1,,,,,\theta_n] \\ H_\theta = \theta^Tx
x=[x0,x1,,,,xn]θ=[θ0,θ1,,,,,θn]Hθ=θTx
这样就将矩阵引入到了模型中,这样我们可以利用矩阵运算提高计算效率。
有别于梯度下降求解最小值的方法 正规方程(最小二乘法)
首先介绍正规方程与最小二乘法之间的关系:
正规方程(引用百度百科):最小二乘法可以将误差方程转化为有确定解的代数方程(其方程式数目正好等于未知数的个数),从而可求解 出这些未知参数。这个有确定解的代数方程组称为最小二乘法估计的正规方程。
最小二乘法:设给定无解的线性方程组
A
X
=
B
AX=B
AX=B,这里
A
=
(
a
i
j
)
s
×
n
,
B
=
(
b
1
,
b
2
,
,
,
,
b
s
)
T
,
X
=
(
x
1
,
x
2
,
,
,
,
,
x
n
)
T
A=(a_{ij})_{s\times n},B=(b_1,b_2,,,,b_s)^T, X=(x_1,x_2,,,,,x_n)^T
A=(aij)s×n,B=(b1,b2,,,,bs)T,X=(x1,x2,,,,,xn)T,因为这方程组无解,设法找出一组数
x
1
0
,
x
2
0
,
,
,
,
,
x
n
0
x_1^0,x_2^0,,,,,x_n^0
x10,x20,,,,,xn0,使得平方误差
δ
=
∑
i
=
1
s
(
a
i
1
x
1
+
a
i
2
x
2
+
.
.
.
.
+
a
i
n
x
n
−
b
i
)
2
\delta=\sum_{i=1}^s(a_{i1}x_1+a_{i2}x_2+....+a_{in}x_n-b_i)^2
δ=i=1∑s(ai1x1+ai2x2+....+ainxn−bi)2 最小。这组数称为此方程的最小二乘解,这一方法叫做最小二乘法。经过公式推导,得到:
A
T
A
X
=
A
T
B
X
=
(
A
T
A
)
−
1
A
T
B
A^TAX=A^TB\\ X=(A^TA)^{-1}A^TB
ATAX=ATBX=(ATA)−1ATB
上述变形过的公式,上述省略的推导是矩阵分析引论给出的方法,数理统计上也有相关的介绍,周志华《西瓜书》上也有相关的介绍。具体可参照我的另一篇博客《机器学习算法—最小二乘法&&正规方程》,其中有详细的推导过程。
θ
=
(
X
T
X
)
−
1
X
T
Y
\theta=(X^TX)^{-1}X^TY
θ=(XTX)−1XTY
其中涉及了逆运算,这时候需要评估
X
T
X
X^TX
XTX是否可逆,通常情况下都是不可逆,需要使用奇异矩阵或退化矩阵相关的知识。
总结
机器学习本质上属于最优化问题
后续
后续将更新机器学习中另外一个基础算法----逻辑回归(分类算法)