提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
机器学习之监督学习(一)
- 1.监督学习定义
- 2.监督学习分类
- 2.1回归 regression
- 2.2 分类 classification
- 3.线性回归 linear regression
- 3.1 单特征线性回归
- 补充一:梯度下降
- 3.2 多特征线性回归
- 补充二:正规方程 normal equation
1.监督学习定义
监督学习(supervised learning)是一种机器学习方法,在这种方法中,算法通过训练集中的输入数据(特征)和相应的输出标签(目标)来学习映射关系,从而能够对未见过的数据进行预测或分类。
2.监督学习分类
2.1回归 regression
回归的目标是根据输入数据预测连续的数值输出,输出标签是连续的实数,例如预测房价。
2.2 分类 classification
分类的目标是根据输入数据将样本分配到不同类别中,输出标签是离散的如有限的类别。例如垃圾邮件过滤。
3.线性回归 linear regression
3.1 单特征线性回归
案例:根据房子尺寸预测房价
符号定义
x:输入向量
y:输出/目标向量
m:训练数据量
(x,y): 训练集中的一个数据
(x(i),y(i)):训练集中第i个数据
线性回归模型
y
^
=
f
w
,
b
(
x
)
=
w
x
+
b
\hat{y}=f_{w,b}(x) =wx+b
y^=fw,b(x)=wx+b
代价函数 cost function
平均平方误差函数 squared error function
J
(
w
,
b
)
=
1
2
m
∑
i
=
1
m
(
y
^
(
i
)
−
y
(
i
)
)
2
J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^2
J(w,b)=2m1i=1∑m(y^(i)−y(i))2
说明:
1、额外乘
1
2
\frac{1}{2}
21是为了便于后续求导
2、代价函数J是关于线性系数w和b的函数
训练目标:最小化代价J
训练思路:梯度下降 gradient descent
补充一:梯度下降
何为梯度下降?
先看看单变量梯度下降:
一元函数中可以认为梯度即是导数,从下图中可以看出,我们从任意点出发,当该点导数大于0时,往左移动靠近极小值点,当该点导数小于0时,往右移动靠近极小值点。因此给出一种收敛到极小值点的方法:
w
−
w
−
α
∂
J
(
w
)
∂
w
w-w-\alpha\frac{\partial{J(w)}}{\partial{w}}
w−w−α∂w∂J(w),其中
α
\alpha
α是学习率,用来控制每一次移动步距。当学习率太小时,收敛缓慢,当学习率太大时,由于步距大,可能造成远离极值点而无法收敛,故应该选择合适的学习率进行训练。进行足够多次梯度下降后,w近似取到极小值点。
再来看多变量梯度下降,这里以方便可视化的二元函数梯度下降为例,学过高数的我们知道梯度的定义为:
∇
f
=
[
f
x
,
f
y
]
T
\nabla{f}=[f_x,f_y]^T
∇f=[fx,fy]T
即由两个偏导构成的梯度向量,当方向导数和梯度方向一致时,方向导数最大,方向相反时,方向导数最小。因此想要最快下降到山谷位置,应沿着梯度反方向走,用数学表述为(假设两个变量是w和b)
[
w
,
b
]
T
=
[
w
,
b
]
T
−
α
∇
f
[w,b]^T=[w,b]^T-\alpha\nabla{f}
[w,b]T=[w,b]T−α∇f
即
w
=
w
−
α
∂
J
∂
w
,
b
=
b
−
α
∂
J
∂
w
w=w-\alpha\frac{\partial{J}}{\partial{w}},b=b-\alpha\frac{\partial{J}}{\partial{w}}
w=w−α∂w∂J,b=b−α∂w∂J
对于多元函数,梯度下降表达式即
[
x
1
,
x
2
.
.
.
,
x
n
]
T
=
[
x
1
,
x
2
.
.
.
,
x
n
]
T
−
α
[
∂
J
∂
x
1
,
∂
J
∂
x
2
,
.
.
.
,
∂
J
∂
x
n
]
T
[x_1,x_2...,x_n]^T=[x_1,x_2...,x_n]^T-\alpha[\frac{\partial{J}}{\partial{x_1}},\frac{\partial{J}}{\partial{x_2}},...,\frac{\partial{J}}{\partial{x_n}}]^T
[x1,x2...,xn]T=[x1,x2...,xn]T−α[∂x1∂J,∂x2∂J,...,∂xn∂J]T
梯度下降算法的起始点随机确定,但收敛的极值点不一定是全局极值点,有可能陷入局部极值点,一种解决的思路是多次随机生成起点进行多次梯度下降,比较每次极值进行比较获取全局极值。
对于上面线性回归模型中提到的成本函数,其3D图像是凹函数,即只有一个极值点,因此不必考虑陷入局部极值的问题。
求偏导过程如下,注意求导和求和可以互换,即先导再求和:
∂
∂
w
J
(
w
,
b
)
=
∂
∂
w
1
2
m
∑
i
=
1
m
(
w
x
(
i
)
+
b
−
y
(
i
)
)
2
=
1
2
m
∑
i
=
1
m
2
(
w
x
(
i
)
+
b
−
y
(
i
)
)
x
(
i
)
=
1
m
∑
i
=
1
m
x
(
i
)
(
w
x
(
i
)
+
b
−
y
(
i
)
)
\frac{\partial}{\partial{w}}J(w,b)=\frac{\partial}{\partial{w}}\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})^2\\=\frac{1}{2m}\sum_{i=1}^{m}2(wx^{(i)}+b-y^{(i)})x^{(i)}=\frac{1}{m}\sum_{i=1}^{m}x^{(i)}(wx^{(i)}+b-y^{(i)})
∂w∂J(w,b)=∂w∂2m1i=1∑m(wx(i)+b−y(i))2=2m1i=1∑m2(wx(i)+b−y(i))x(i)=m1i=1∑mx(i)(wx(i)+b−y(i))
∂
∂
b
J
(
w
,
b
)
=
∂
∂
b
1
2
m
∑
i
=
1
m
(
w
x
(
i
)
+
b
−
y
(
i
)
)
2
=
1
2
m
∑
i
=
1
m
2
(
w
x
(
i
)
+
b
−
y
(
i
)
)
=
1
m
∑
i
=
1
m
(
w
x
(
i
)
+
b
−
y
(
i
)
)
\frac{\partial}{\partial{b}}J(w,b)=\frac{\partial}{\partial{b}}\frac{1}{2m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})^2\\=\frac{1}{2m}\sum_{i=1}^{m}2(wx^{(i)}+b-y^{(i)})=\frac{1}{m}\sum_{i=1}^{m}(wx^{(i)}+b-y^{(i)})
∂b∂J(w,b)=∂b∂2m1i=1∑m(wx(i)+b−y(i))2=2m1i=1∑m2(wx(i)+b−y(i))=m1i=1∑m(wx(i)+b−y(i))
关于学习率的选择
如果学习率太小,梯度下降速率太慢
如果学习率太大,可能无法收敛(发散)/无法抵达极小值点
可以绘制学习曲线cost-iteration,发现曲线下降太慢/没达到收敛时,说明学习率太小,适当增加学习率;当曲线上升(不收敛)时,说明学习率太大,适当减小学习率
推荐的学习率尝试是…0.003、0.01、0.03、0.1…,即以3倍的公比调整
代码实现:
一元线性回归梯度下降代码实现
3.2 多特征线性回归
案例:
根据房子尺寸、房间数量、楼层数、年龄预测房价
符号定义
x
j
表示第
j
个特征,
x
⃗
(
i
)
表示第
i
个数据,
n
表示特征数量,
m
表示数据量
,
,
x
⃗
j
(
i
)
表示第
i
个数据第
j
个特征
x_j表示第j个特征,\vec{x}^{(i)}表示第i个数据,n表示特征数量,m表示数据量,,\vec{x}^{(i)}_j表示第i个数据第j个特征
xj表示第j个特征,x(i)表示第i个数据,n表示特征数量,m表示数据量,,xj(i)表示第i个数据第j个特征
多元线性回归模型
w
=
[
w
1
,
w
2
,
.
.
.
,
w
n
]
y
^
(
i
)
=
f
w
⃗
,
b
(
x
⃗
)
=
w
⃗
⋅
x
⃗
+
b
w=[w_1,w_2,...,w_n]~~~\\ \hat{y}^{(i)}=f_{\vec{w},b}(\vec{x})=\vec{w}\cdot\vec{x}+b
w=[w1,w2,...,wn] y^(i)=fw,b(x)=w⋅x+b
代价函数 cost function
平均平方误差函数 squared error function
J
(
w
,
b
)
=
1
2
m
∑
i
=
1
m
(
y
^
(
i
)
−
y
(
i
)
)
2
J(w,b)=\frac{1}{2m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^2
J(w,b)=2m1i=1∑m(y^(i)−y(i))2
训练目标:最小化代价J
训练思路:梯度下降 gradient descent
n个特征,即参数包含n个w和1个b,共n+1个参数
先计算偏导:
∂
∂
w
j
J
(
w
⃗
,
b
)
=
∂
∂
w
j
1
2
m
∑
i
=
1
m
(
w
⃗
⋅
x
⃗
(
i
)
+
b
−
y
(
i
)
)
2
=
1
2
m
∑
i
=
1
m
2
(
w
⃗
⋅
x
⃗
(
i
)
+
b
−
y
(
i
)
)
x
j
(
i
)
=
1
m
∑
i
=
1
m
x
j
(
i
)
(
w
⃗
⋅
x
⃗
(
i
)
+
b
−
y
(
i
)
)
\frac{\partial}{\partial{w_j}}J(\vec{w},b)=\frac{\partial}{\partial{w_j}}\frac{1}{2m}\sum_{i=1}^{m}(\vec{w}\cdot\vec{x}^{(i)}+b-y^{(i)})^2\\=\frac{1}{2m}\sum_{i=1}^{m}2(\vec{w}\cdot\vec{x}^{(i)}+b-y^{(i)})x_j^{(i)}=\frac{1}{m}\sum_{i=1}^{m}x_j^{(i)}(\vec{w}\cdot\vec{x}^{(i)}+b-y^{(i)})
∂wj∂J(w,b)=∂wj∂2m1i=1∑m(w⋅x(i)+b−y(i))2=2m1i=1∑m2(w⋅x(i)+b−y(i))xj(i)=m1i=1∑mxj(i)(w⋅x(i)+b−y(i))
∂
∂
b
J
(
w
⃗
,
b
)
=
∂
∂
b
1
2
m
∑
i
=
1
m
(
w
⃗
⋅
x
⃗
(
i
)
+
b
−
y
(
i
)
)
2
=
1
2
m
∑
i
=
1
m
2
(
w
⃗
⋅
x
⃗
(
i
)
+
b
−
y
(
i
)
)
=
1
m
∑
i
=
1
m
(
w
⃗
⋅
x
⃗
(
i
)
+
b
−
y
(
i
)
)
\frac{\partial}{\partial{b}}J(\vec{w},b)=\frac{\partial}{\partial{b}}\frac{1}{2m}\sum_{i=1}^{m}(\vec{w}\cdot\vec{x}^{(i)}+b-y^{(i)})^2\\=\frac{1}{2m}\sum_{i=1}^{m}2(\vec{w}\cdot\vec{x}^{(i)}+b-y^{(i)})=\frac{1}{m}\sum_{i=1}^{m}(\vec{w}\cdot\vec{x}^{(i)}+b-y^{(i)})
∂b∂J(w,b)=∂b∂2m1i=1∑m(w⋅x(i)+b−y(i))2=2m1i=1∑m2(w⋅x(i)+b−y(i))=m1i=1∑m(w⋅x(i)+b−y(i))
更新参数:
w
j
=
w
j
−
α
∂
∂
w
j
J
(
w
⃗
,
b
)
(
j
=
1
、
2...
、
n
)
b
=
b
−
α
∂
∂
b
J
(
w
⃗
,
b
)
w_j=w_j-\alpha\frac{\partial}{\partial{w_j}}J(\vec{w},b)(j=1、2...、n)\\b=b-\alpha\frac{\partial}{\partial{b}}J(\vec{w},b)
wj=wj−α∂wj∂J(w,b)(j=1、2...、n)b=b−α∂b∂J(w,b)
代码实现:
多元线性回归梯度下降代码实现
补充二:正规方程 normal equation
优化损失函数,除了梯度下降这种不断迭代直至收敛的算法外,从数学角度上还有一种暴力解法叫正规方程。
正规方程(Normal Equation)是用于求解线性回归模型参数的一种解析方法。它通过最小化误差平方和来找到最佳参数,不需要使用迭代优化方法如梯度下降。正规方程尤其适用于小规模数据集,因为它在大规模数据集上计算成本可能较高。
首先列出需要用到的线代知识:
①y是一维向量,则
y
T
y
=
∣
∣
y
∣
∣
2
=
y
⋅
y
y^Ty=||y||^2=y\cdot{y}
yTy=∣∣y∣∣2=y⋅y
②转置相关公式:
(
A
+
B
)
T
=
A
T
+
B
T
(
A
B
)
T
=
B
T
A
T
(A+B)^T=A^T+B^T\\(AB)^T=B^TA^T
(A+B)T=AT+BT(AB)T=BTAT
③p,q是一维列向量,则
p
⋅
q
=
p
T
q
=
q
T
p
p\cdot{q}=p^Tq=q^Tp
p⋅q=pTq=qTp
④矩阵求导公式:
∂
(
A
X
)
∂
X
=
A
T
\frac{\partial (AX)}{\partial X} = A^T
∂X∂(AX)=AT
∂
(
X
T
A
X
)
∂
X
=
(
A
+
A
T
)
X
[
A
对称时
=
2
A
X
]
\frac{\partial (X^T A X)}{\partial X} = (A + A^T) X~~[A对称时=2AX]
∂X∂(XTAX)=(A+AT)X [A对称时=2AX]
假设我们有一个线性回归模型:
y = X β + ϵ y = X\beta + \epsilon y=Xβ+ϵ
其中:
y 是目标变量向量(
M
×
1
M \times 1
M×1)
X 是特征矩阵(
M
×
(
N
+
1
)
M \times (N+1)
M×(N+1)),第一列通常为1,对应于截距项
β 是待估参数向量(
(
N
+
1
)
×
1
(N+1) \times 1
(N+1)×1)
ϵ 是误差项向量(
M
×
1
M \times 1
M×1)
则代价函数表示为
J
(
β
)
=
∣
∣
y
−
X
β
∣
∣
2
=
(
y
−
X
β
)
T
(
y
−
X
β
)
=
(
y
T
−
β
T
X
T
)
(
y
−
X
β
)
=
y
T
y
−
y
T
X
β
−
β
T
X
T
y
+
β
T
X
T
X
β
=
y
T
y
−
2
y
T
X
β
+
β
T
X
T
X
β
J(\beta)=||y-X\beta||^2=(y-X\beta)^T(y-X\beta)=(y^T-\beta^TX^T)(y-X\beta)\\=y^Ty-y^TX\beta-\beta^TX^Ty+\beta^TX^TX\beta=y^Ty-2y^TX\beta+\beta^TX^TX\beta
J(β)=∣∣y−Xβ∣∣2=(y−Xβ)T(y−Xβ)=(yT−βTXT)(y−Xβ)=yTy−yTXβ−βTXTy+βTXTXβ=yTy−2yTXβ+βTXTXβ
求导,令导数为0
∂
J
(
β
)
∂
β
=
−
2
X
T
y
+
2
X
T
X
β
=
0
→
β
=
(
X
T
X
)
−
1
X
T
y
\frac{∂J(β)}{∂\beta}=-2X^Ty+2X^TX\beta=0\rightarrow\beta=(X^TX)^{-1}X^Ty
∂β∂J(β)=−2XTy+2XTXβ=0→β=(XTX)−1XTy
从最优参数向量的表达式可以看出,但矩阵规模较大时,计算成本很大,因此我们通常会在面对大规模数据集时选择梯度下降算法进行训练。
除此之外,我们还可以顺便证明一下平均平方损失函数是凸函数,如何判定凸函数,一般采用黑塞矩阵,是由目标函数在点X处的二阶偏导数组成的对称矩阵是否是半正定的,对J求二阶导:
J
′
′
(
β
)
=
2
X
T
X
J^{''}(\beta)=2X^TX
J′′(β)=2XTX
由于XTX为半正定矩阵,因此代价函数J的确是凸函数,计算出的极值即全局最值。
除此之外,正规方程法一个缺点是只适用于线性回归问题,而梯度下降在后续的逻辑回归、神经网络中都是我们优化算法的核心。