以线性回归模型为例,讨论两种不同的训练方法来得到模型的最优解:
- 直接求解参数的解析式的解,得到模型在当前训练集上的最优参数(即在训练集上
使损失函数达到最小值的模型参数) - 使用迭代优化方法:梯度下降(GD),在训练集上,它可以逐渐调整模型参数以获得最
小的损失函数,最终,参数会收敛到和第一种方法相同的的值。
同时,介绍一些梯度下降的变体形式:批量梯度下降(Batch GD)、小批量梯度下降(Mini-batch
GD)、随机梯度下降(Stochastic GD),在神经网络部分,会多次使用它们。
接下来,上升到一般回归模型:多项式回归,它可以拟合非线性数据集(非线性特征的线性组合),由于它比线性模型拥有更多的参数,于是它更容易出现模型的过拟合。因此,我们将介绍如何通过学习曲线去判断模型是否出现了过拟合,并介绍几种正则化方法以减少模型出现过拟合的风险。
最后,我们将介绍两个常用于分类的模型:Logistic回归和Softmax回归
理解要点:模型+策略+算法。
回归模型(模型+策略+算法)
模型表达(模型)
表达式子:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_{\theta}(x)=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+...+\theta_{n} x_{n}
hθ(x)=θ0+θ1x1+θ2x2+...+θnxn
- h θ ( x ) h_{\theta}(x) hθ(x)表示预测结果
- n n n表示特征的个数
- x i x_{i} xi表示第 i 个特征的值
- θ j \theta_{j} θj表示第 j个参数(包括偏置项 θ 0 \theta_{0} θ0 和特征权重值 θ 1 \theta_{1} θ1, θ n \theta_{n} θn )
向量表示:
h
θ
(
x
)
=
∑
i
=
0
n
θ
i
x
i
=
θ
T
x
h_{\theta}(x)=\sum_{i=0}^{n} \theta_{i} x_{i}=\theta^{T} \mathbf{x}
hθ(x)=i=0∑nθixi=θTx
- θ \theta_{} θ表示模型的参数向量包括偏置项 θ 0 \theta_{0} θ0 和特征权重值 θ 1 \theta_{1} θ1 到 θ n \theta_{n} θn
- θ T \theta^T θT表示向量的转置
- x \mathbf{x} x为每个样本中特征值的向量形式,包括 x 1 x_{1} x1 到 x n x_{n} xn,而且 x 0 x_{0} x0恒为 1
- θ T x \theta^{T} \mathbf{x} θTx表示 θ T \theta^{T} θT和 x \mathbf{x} x 的点积
- h θ ( x ) h_{\theta}(x) hθ(x)表示假设模型参数为 θ \theta θ时的预测结果
怎么样去训练一个线性回归模型呢?(策略)
损失函数
训练一个模型指的是设置模型的参数使得这个模型在训练集的表现较好。为此,我们首先需要找到一个衡量模型好坏的评定方法。最常见的评定标准是均方根误差(RMSE)。因此,为了训练一个线性回归模型,你需要找到一个值,它使得均方根误差(标准误差)达到最小值。
实践过程中,最小化均方误差比最小化均方根误差更加的简单,这两个过程会得到相同的 ,因为函数在最小值时候的自变量,同样能使函数的方根运算得到最小值。
MSE 损失函数(最小二乘法):
MSE
(
x
,
h
θ
)
=
1
m
∑
i
=
1
m
(
θ
T
⋅
x
(
i
)
−
y
(
i
)
)
2
\operatorname{MSE}\left(\mathbf{x}, h_{\theta}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(\theta^{T} \cdot \mathbf{x}^{(i)}-y^{(i)}\right)^{2}
MSE(x,hθ)=m1i=1∑m(θT⋅x(i)−y(i))2
- m m m是计算MSE的数据集中的实例数量。
- x ( i ) \mathbf{x}^{(i)} x(i)是数据集第 i i i个实例的所有特征值(不包含标签)的向量, y ( i ) y^{(i)} y(i)是它的标签(这个实例的输出值)。
- 本质还是最小二乘法:
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ)=21i=1∑m(hθ(x(i))−y(i))2
使用极大似然估计解释最小二乘
对于第i个实例引入误差的表达式如下:
y
(
i
)
=
θ
T
x
(
i
)
+
ε
(
i
)
y^{(i)}=\theta^{T} x^{(i)}+\varepsilon^{(i)}
y(i)=θTx(i)+ε(i)
由中心极限定理,
ε
(
i
)
(
i
=
1
,
2
,
.
.
.
,
m
)
\varepsilon^{(i)}(i=1,2,...,m)
ε(i)(i=1,2,...,m),是独立同分布的,服从均值为0,方差为某定值
σ
2
\sigma^{2}
σ2的高斯分布。
似然函数表达式:
p
(
ϵ
(
i
)
)
=
1
2
π
σ
exp
(
−
(
ϵ
(
i
)
)
2
2
σ
2
)
p\left(\epsilon^{(i)}\right)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(\epsilon^{(i)}\right)^{2}}{2 \sigma^{2}}\right)
p(ϵ(i))=2πσ1exp(−2σ2(ϵ(i))2)
进一步表达,如果已知
θ
\theta
θ则模型确定,给定第
i
i
i个实例的输入
x
(
i
)
x^{(i)}
x(i),就会得到输出
y
(
i
)
y^{(i)}
y(i)的一个分布,其概率密度函数如下:
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
1
2
π
σ
exp
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
p\left(y^{(i)} | x^{(i)} ; \theta\right)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right)
p(y(i)∣x(i);θ)=2πσ1exp(−2σ2(y(i)−θTx(i))2)
接下来,引入极大似然估计,写出似然函数:
L
(
θ
)
=
∏
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
=
1
m
1
2
π
σ
exp
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
L(\theta)=\prod_{i=1}^{m} p\left(y^{(i)} | x^{(i)} ; \theta\right)=\prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right)
L(θ)=i=1∏mp(y(i)∣x(i);θ)=i=1∏m2πσ1exp(−2σ2(y(i)−θTx(i))2)
对数似然表达:
ℓ
(
θ
)
=
log
L
(
θ
)
=
log
∏
i
=
1
m
1
2
π
σ
exp
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
=
∑
i
=
1
m
log
1
2
π
σ
exp
(
−
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
2
σ
2
)
=
m
log
1
2
π
σ
−
1
σ
2
⋅
1
2
∑
i
=
1
m
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
\begin{aligned} \ell(\theta) &=\log L(\theta) \\ &=\log \prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) \\ &=\sum_{i=1}^{m} \log \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) \\ &=m \log \frac{1}{\sqrt{2 \pi} \sigma}-\frac{1}{\sigma^{2}} \cdot \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2} \end{aligned}
ℓ(θ)=logL(θ)=logi=1∏m2πσ1exp(−2σ2(y(i)−θTx(i))2)=i=1∑mlog2πσ1exp(−2σ2(y(i)−θTx(i))2)=mlog2πσ1−σ21⋅21i=1∑m(y(i)−θTx(i))2
最大似然的目的式,求解使得
ℓ
(
θ
)
\ell(\theta)
ℓ(θ)最大的
θ
\theta
θ,进一步化简等效与求:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}
J(θ)=21i=1∑m(hθ(x(i))−y(i))2的最小值,上式就是最小二乘法的目标函数。
如何求解最小二乘的参数θ?(算法)
参数θ的解析式的求解过程
目标函数的向量表达:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}=\frac{1}{2}(X \theta-y)^{T}(X \theta-y)
J(θ)=21i=1∑m(hθ(x(i))−y(i))2=21(Xθ−y)T(Xθ−y)
梯度解析式:
∇
θ
J
(
θ
)
=
∇
θ
(
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
)
=
∇
θ
(
1
2
(
θ
T
X
T
−
y
T
)
(
X
θ
−
y
)
)
\begin{array} {l}{\nabla_{\theta} J(\theta)=\nabla_{\theta}\left(\frac{1}{2}(X \theta-y)^{T}(X \theta-y)\right)=\nabla_{\theta}\left(\frac{1}{2}\left(\theta^{T} X^{T}-y^{T}\right)(X \theta-y)\right)} \end{array}
∇θJ(θ)=∇θ(21(Xθ−y)T(Xθ−y))=∇θ(21(θTXT−yT)(Xθ−y))
= ∇ θ ( 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) ) \\ {=\nabla_{\theta}\left(\frac{1}{2}\left(\theta^{T} X^{T} X \theta-\theta^{T} X^{T} y-y^{T} X \theta+y^{T} y\right)\right)} =∇θ(21(θTXTXθ−θTXTy−yTXθ+yTy))
= 1 2 ( 2 X T X θ − X T y − ( y T X ) T ) = X T X θ − X T y =\frac{1}{2}\left(2 X^{T} X \theta-X^{T} y-\left(y^{T} X\right)^{T}\right)=X^{T} X \theta-X^{T} y =21(2XTXθ−XTy−(yTX)T)=XTXθ−XTy
上式推到过程涉及正交阵求导等线性代数知识,建议亲自推导。
问题转化为直接求上式的驻点,得到最优参数
θ
.
\theta.
θ.
最小二乘意义下的参数最优解
- 参数解释式: θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)−1XTy
这就是著名的线性回归求解模型参数
θ
\theta
θ的解析解表达,为了方便记忆,可以记住:
X
θ
=
y
⇒
X
T
X
θ
=
X
T
y
X \theta=y \Rightarrow X^{T} X \theta=X^{T} y
Xθ=y⇒XTXθ=XTy
简单变化,提出 θ \theta θ到等式左边:
⇒
θ
=
(
X
T
X
)
−
1
X
T
y
\Rightarrow \theta=\left(X^{T} X\right)^{-1} X^{T} y
⇒θ=(XTX)−1XTy
若
X
T
X
X^{T} X
XTX不可逆或者防止过拟合,在主对角线增加扰动
λ
\lambda
λ:
θ
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
\theta=\left(X^{T} X+\lambda I\right)^{-1} X^{T} y
θ=(XTX+λI)−1XTy
为什么这么做往下看线性回归的复杂度惩罚因子。
梯度下降算法
线性回归模型的损失函数是凸函数,这个最优参数一定在‘碗’的底部。
目标函数的向量表达:
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ)=21i=1∑m(hθ(x(i))−y(i))2
一般步骤
- 初始化 θ \theta θ(随机初始化)
- 沿着负梯度方向迭代,更新后的 θ \theta θ使 J ( θ ) J(\theta) J(θ)更小,不强调全局最优,但求局部最优即可。 θ = θ − α ⋅ ∂ J ( θ ) ∂ θ \theta=\theta-\alpha \cdot \frac{\partial J(\theta)}{\partial \theta} θ=θ−α⋅∂θ∂J(θ) 其中, α \alpha α是学习率,步长
梯度方向
对推到出梯度表达式:
∂
∂
θ
j
J
(
θ
)
=
∂
∂
θ
j
1
2
(
h
θ
(
x
)
−
y
)
2
=
2
⋅
1
2
(
h
θ
(
x
)
−
y
)
⋅
∂
∂
θ
j
(
h
θ
(
x
)
−
y
)
=
(
h
θ
(
x
)
−
y
)
⋅
∂
∂
θ
j
(
∑
i
=
0
n
θ
i
x
i
−
y
)
=
(
h
θ
(
x
)
−
y
)
x
j
\begin{aligned} \frac{\partial}{\partial \theta_{j}} J(\theta) &=\frac{\partial}{\partial \theta_{j}} \frac{1}{2}\left(h_{\theta}(x)-y\right)^{2} \\ &=2 \cdot \frac{1}{2}\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(h_{\theta}(x)-y\right) \\ &=\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(\sum_{i=0}^{n} \theta_{i} x_{i}-y\right) \\ &=\left(h_{\theta}(x)-y\right) x_{j} \end{aligned}
∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=2⋅21(hθ(x)−y)⋅∂θj∂(hθ(x)−y)=(hθ(x)−y)⋅∂θj∂(i=0∑nθixi−y)=(hθ(x)−y)xj
批量梯度下降
计算所有的样本后下降一次: Loop { θ j : = θ j + α ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) } \begin{array}{l}{\text { Loop }\{ } \\ {\quad} \\ {\quad \theta_{j} :=\theta_{j}+\alpha \sum_{i=1}^{m}\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right) x_{j}^{(i)}} \\ {\}}\end{array} Loop {θj:=θj+α∑i=1m(y(i)−hθ(x(i)))xj(i)}
SGD随机梯度下降
来一个样本就下降: Loop { θ j : = 1 to m , { θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) } \begin{array}{l}{\text { Loop }\{ } \\ {\quad \theta_{j} :=1 \text { to } \mathrm{m},\{ } \\ {\quad \theta_{j} :=\theta_{j}+\alpha\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right) x_{j}^{(i)}} \\ {\}}\end{array} Loop {θj:=1 to m,{θj:=θj+α(y(i)−hθ(x(i)))xj(i)}
小批量梯度下降
一旦你理解了批量梯度下降和随机梯度下降,再去理解小批量梯度下降是非常简单的。在迭代的每一步,批量梯度使用整个
训练集,随机梯度时候用仅仅一个实例,在小批量梯度下降中,它则使用一个随机的小型实例集。
目前大家说的随机梯度下降都是指的小批量梯度下降。
参数空间的梯度下降路径
小批量梯度下降在参数空间上的表现比随机梯度下降要好的多,尤其在有大量的小型实例集时。作为结果,小批量梯度下降会比随机梯度更靠近最小值。但是,另一方面,它有可能陷在局部最小值中(在遇到局部最小值问题的情况下,和我们之前看到的线性回归不一样)。
下图显示了训练期间三种梯度下降算法在参数空间中所采用的路径。
他们都接近最小值,但批量梯度的路径最后停在了最小值,而随机梯度和小批量梯度最后都在最小值附近摆动。
但是,批次梯度需要花费大量时间来完成每一步,往往随机梯度和小批量梯度也可以得到最小值。
早期停止
随着随机和小批量梯度下降,曲线不那么光滑,可能很难知道你是否达到了最小值。一种解决方案是,只在验证错误超过最小值一段时间之后停止(当您确信模型不会做得更好时),然后将模型参数回滚到验证错误最小值的位置。
注意标准化
当我们使用梯度下降的时候,应该确保所有的特征有着相近的尺度范围(例如:使用Scikit Learn 的 StandardScaler 类),否则它将需要很长的时间才能够收敛。
线性回归的复杂度惩罚因子
线性回归的目标函数:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}
J(θ)=21i=1∑m(hθ(x(i))−y(i))2
增加平方和损失:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
m
θ
j
2
J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{m}\theta_{j}^2
J(θ)=21i=1∑m(hθ(x(i))−y(i))2+λj=1∑mθj2
本质即假设参数
θ
\theta
θ服从高斯分布。
L1和L2正则
上式的 λ ∑ j = 1 m θ j 2 \lambda \sum_{j=1}^{m}\theta_{j}^2 λ∑j=1mθj2 是正则项,称为L2正则。如果 λ \lambda λ取0,对应标准线性回归; λ \lambda λ取非零正数,对应岭回归(Ridge Regression)。
- 在使用岭回归前,对数据进行放缩(可以使用 StandardScaler )是非常重要的,算法对于输入特征的数值尺度(scale)非常敏感。大多数的正则化模型都是这样的。
如果正则项换作: λ ∑ j = 1 m ∣ θ j ∣ \lambda \sum_{j=1}^{m}\mid\theta_{j}\mid λ∑j=1m∣θj∣,称为L1正则,此目标函数对应Lasso回归。
Ridge 回归和 Lasso 回归对比
Lasso 回归的一个重要特征是它倾向于完全消除最不重要的特征的权重(即将它们设置为零)。换句话说,Lasso回归自动的进行特征选同时输出一个稀疏模型(即,具有很少的非零权重)。
你可以从下图知道为什么会出现这种情况:
左上角图中,后背景的等高线(椭圆)表示了没有正则化的均方差损失函数(
λ
=
0
\lambda=0
λ=0),白色的小圆点表示在当前损失函数上批量梯度下降的路径。前背景的等高线(菱形)表示L1惩罚,黄色的三角形表示了仅在这个惩罚下批量梯度下降的路径(
λ
→
∞
\lambda\rightarrow\infty
λ→∞)。注意路径第一次是如何到达
θ
1
=
0
\theta_1=0
θ1=0,然后向下滚动直到它到达
θ
2
=
0
\theta_2=0
θ2=0。
右上角图中,等高线表示的是相同损失函数再加上一个 λ = 0.5 \lambda=0.5 λ=0.5 的惩罚。这幅图中,它的全局最小值在 θ 2 = 0 \theta_2=0 θ2=0这根轴上。批量梯度下降首先到达 θ 2 = 0 \theta_2=0 θ2=0 ,然后向下滚动直到达到全局最小值。
- 在 Lasso 损失函数中,批量梯度下降的路径趋向于在低谷有一个反弹的轨迹形式。这是因为在 θ 2 = 0 \theta_2=0 θ2=0时斜率会有一个突变。为了最后真正收敛到全局最小值,你需要逐渐的降低学习率。
- Lasso 损失函数上进行梯度下降,使用的是 θ i \theta_i θi不为零的子梯度向量。
下面两个图显示了相同的情况,只是使用了L2惩罚。 L2正则后的 θ \theta θ中的最小值可能会很接近于零 ,但始终不会为零。
ElasticNet弹性网络
弹性网络介于 Ridge 回归和 Lasso 回归之间。它的正则项是 Ridge 回归和 Lasso 回归正则项的简单混合,同时你可以控制它们的混合率
r
r
r ,当
r
=
0
r=0
r=0时,弹性网络就是 Ridge 回归,当
r
=
1
r=1
r=1时,其就是 Lasso 回归。
具体表示如下:
J
(
θ
)
=
M
S
E
(
θ
)
+
r
λ
∑
i
=
1
n
∣
θ
i
∣
+
1
−
r
2
λ
∑
i
=
1
n
θ
i
2
J(\theta)=M S E(\theta)+r \lambda \sum_{i=1}^{n}\left|\theta_{i}\right|+\frac{1-r}{2} \lambda \sum_{i=1}^{n} \theta_{i}^{2}
J(θ)=MSE(θ)+rλi=1∑n∣θi∣+21−rλi=1∑nθi2
L1正则化如何处理梯度
-
θ i = 0 \theta_i=0 θi=0处,Lasso 损失函数不可微,进行梯度下降时,使用的是 θ i \theta_i θi不为零的子梯度 g ( θ , J ) g(\theta, J) g(θ,J):
g ( θ , J ) = ∇ θ MSE ( θ ) + λ ( sign ( θ 1 ) sign ( θ 2 ) ⋮ sign ( θ n ) ) where sign ( θ i ) = { − 1 if θ i < 0 0 if θ i = 0 + 1 if θ i > 0 g(\theta, J)=\nabla_{\theta} \operatorname{MSE}(\theta)+\lambda \left( \begin{array}{c}{\operatorname{sign}\left(\theta_{1}\right)} \\ {\operatorname{sign}\left(\theta_{2}\right)} \\ {\vdots} \\ {\operatorname{sign}\left(\theta_{n}\right)}\end{array}\right) \text { where sign }\left(\theta_{i}\right)=\left\{\begin{array}{l}{-1 \text { if } \theta_{i}<0} \\ {0 \quad \text { if } \theta_{i}=0} \\ {+1 \text { if } \theta_{i}>0}\end{array}\right. g(θ,J)=∇θMSE(θ)+λ⎝⎜⎜⎜⎛sign(θ1)sign(θ2)⋮sign(θn)⎠⎟⎟⎟⎞ where sign (θi)=⎩⎨⎧−1 if θi<00 if θi=0+1 if θi>0 -
引入可导的近似函数
目标函数: J ( θ ⃗ ) = 1 2 ∑ i = 1 m ( h θ ~ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n ∣ θ j ∣ J(\vec{\theta})=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\tilde{\theta}}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{n}\left|\theta_{j}\right| J(θ)=21i=1∑m(hθ~(x(i))−y(i))2+λj=1∑n∣θj∣给定近似与L1正则的可导函数: f ( x ; α ) = x + 1 α log ( 1 + exp ( − α x ) ) , x ≥ ∣ 0 f(x ; \alpha)=x+\frac{1}{\alpha} \log (1+\exp (-\alpha x)), x \geq | 0 f(x;α)=x+α1log(1+exp(−αx)),x≥∣0
如何近似? ∣ x ∣ ≈ f ( x ; α ) + f ( − x ; α ) = 1 α log ( 1 + exp ( − α x ) + 1 + exp ( α x ) ) |x| \approx f(x ; \alpha)+f(-x ; \alpha)=\frac{1}{\alpha} \log (1+\exp (-\alpha x)+1+\exp (\alpha x)) ∣x∣≈f(x;α)+f(−x;α)=α1log(1+exp(−αx)+1+exp(αx))
梯度表达: ∇ ∣ x ∣ ≈ 1 1 + exp ( − α x ) − 1 1 + exp ( α x ) \nabla|x| \approx \frac{1}{1+\exp (-\alpha x)}-\frac{1}{1+\exp (\alpha x)} ∇∣x∣≈1+exp(−αx)1−1+exp(αx)1
二阶导: ∇ 2 ∣ x ∣ ≈ 2 α exp ( α x ) ( 1 + exp ( α x ) ) 2 \nabla^{2}|x| \approx \frac{2 \alpha \exp (\alpha x)}{(1+\exp (\alpha x))^{2}} ∇2∣x∣≈(1+exp(αx))22αexp(αx)
实践中,对于一般问题,如取一个较大的 α = 1 0 6 \alpha=10^{6} α=106。
超参与过拟合感知
交叉验证
使用交叉验证来估计一个模型的泛化能力。如果一个模型在训练集上表现良好,通过交叉验证指标却得出其泛化能力很差,那么你的模型就是过拟合了。如果在这两方面都表现不好,那么它就是欠拟合了。这种方法可以告诉我们,你的模型是太复杂还是太简单了。如果你的模型在训练集上是欠拟合的,添加更多的样本是没用的。你需要使用一个更复杂的模型或者找到更好的特征。
拟合曲线
另一种方法是观察学习曲线:画出模型在训练集上的表现,同时画出以训练集规模为自变量的训练集函数。为了得到图像,需要在训练集的不同规模子集上进行多次训练。下面的代码定义了一个函数,用来画出给定训练集后的模型学习曲线:
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
def plot_learning_curves(model, X, y):
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)
train_errors, val_errors = [], []
for m in range(1, len(X_train)):
model.fit(X_train[:m], y_train[:m])
y_train_predict = model.predict(X_train[:m])
y_val_predict = model.predict(X_val)
train_errors.append(mean_squared_error(y_train_predict, y_train[:m]))
val_errors.append(mean_squared_error(y_val_predict, y_val))
plt.plot(np.sqrt(train_errors), "r-+", linewidth=2, label="train")
plt.plot(np.sqrt(val_errors), "b-", linewidth=3, label="val")
外部评价指标
拟合优度
R
2
R^2
R2:
R
2
=
1
−
R
S
S
T
S
S
=
1
−
∑
i
=
1
m
(
y
^
i
−
y
i
)
2
∑
i
=
1
m
(
y
i
−
y
‾
)
2
R^{2}=1-\frac{R S S}{T S S}=1-\frac{\sum_{i=1}^{m}\left(\hat{y}_{i}-y_{i}\right)^{2}}{\sum_{i=1}^{m}\left(y_{i}-\overline{y}\right)^{2}}
R2=1−TSSRSS=1−∑i=1m(yi−y)2∑i=1m(y^i−yi)2
- R 2 R^2 R2越大,拟合效果越好
- R 2 R^2 R2最优值为1,说明模型完美拟合(预测值等于实际值)
- R 2 R^2 R2最优值为0,说明用模型和用样本均值直接估计效果一样
- R 2 R^2 R2最优值为负数,说明用模型效果比较差,还不如用样本均值直接估计
用于回归模型解决分类问题
Logistic回归
模型表达(模型)
Logistic/Sigmoid函数: g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
令
z
=
θ
T
x
z= \theta^{T} x
z=θTx得到Logistic回归模型表达:
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}}
hθ(x)=g(θTx)=1+e−θTx1
回顾一下Logistic/Sigmoid函数导数:
g
′
(
x
)
=
(
1
1
+
e
−
x
)
′
=
e
−
x
(
1
+
e
−
x
)
2
=
1
1
+
e
−
x
⋅
e
−
x
1
+
e
−
x
=
1
1
+
e
−
x
⋅
(
1
−
1
1
+
e
−
x
)
=
g
(
x
)
⋅
(
1
−
g
(
x
)
)
\begin{array}{l}{g^{\prime}(x)=\left(\frac{1}{1+e^{-x}}\right)^{\prime}=\frac{e^{-x}}{\left(1+e^{-x}\right)^{2}}} =\frac{1}{1+e^{-x}} \cdot \frac{e^{-x}}{1+e^{-x}}=\frac{1}{1+e^{-x}} \cdot\left(1-\frac{1}{1+e^{-x}}\right){=g(x) \cdot(1-g(x))}\end{array}
g′(x)=(1+e−x1)′=(1+e−x)2e−x=1+e−x1⋅1+e−xe−x=1+e−x1⋅(1−1+e−x1)=g(x)⋅(1−g(x))
模型参数估计(策略)
假定: P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) \begin{array}{l}{P(y=1 | x ; \theta)=h_{\theta}(x)} \\ {P(y=0 | x ; \theta)=1-h_{\theta}(x)}\end{array} P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1−hθ(x)
合并两式得到如下形式:
p
(
y
∣
x
;
θ
)
=
(
h
θ
(
x
)
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
p(y | x ; \theta)=\left(h_{\theta}(x)\right)^{y}\left(1-h_{\theta}(x)\right)^{1-y}
p(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
写出最大似然估计的似然函数:
L
(
θ
)
=
p
(
y
⃗
∣
X
;
θ
)
=
∏
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
=
1
m
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
\begin{aligned} L(\theta) &=p(\vec{y} | X ; \theta) \\ &=\prod_{i=1}^{m} p\left(y^{(i)} | x^{(i)} ; \theta\right) \\ &=\prod_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)\right)^{y^{(i)}}\left(1-h_{\theta}\left(x^{(i)}\right)\right)^{1-y^{(i)}} \end{aligned}
L(θ)=p(y∣X;θ)=i=1∏mp(y(i)∣x(i);θ)=i=1∏m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
两边取对数得到对数似然:
ℓ
(
θ
)
=
log
L
(
θ
)
=
∑
i
=
1
m
y
(
i
)
log
h
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
(
x
(
i
)
)
)
\begin{aligned} \ell(\theta) &=\log L(\theta) \\ &=\sum_{i=1}^{m} y^{(i)} \log h\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h\left(x^{(i)}\right)\right) \end{aligned}
ℓ(θ)=logL(θ)=i=1∑my(i)logh(x(i))+(1−y(i))log(1−h(x(i)))
目标函数就是上式,求
θ
\theta
θ使得释然函数最大。
参数的学习规则(算法)
参数迭代(沿梯度增量迭代(梯度向上))。
参数迭代前需要求解目标函数对
θ
\theta
θ的梯度表达式,对每一个
θ
j
\theta_j
θj求偏导,实现对
θ
\theta
θ求导:
∂
∂
θ
j
ℓ
(
θ
)
=
(
y
1
g
(
θ
T
x
)
−
(
1
−
y
)
1
1
−
g
(
θ
T
x
)
)
∂
∂
θ
j
g
(
θ
T
x
)
=
(
y
1
g
(
θ
T
x
)
−
(
1
−
y
)
1
1
−
g
(
θ
T
x
)
)
g
(
θ
T
x
)
(
1
−
g
(
θ
T
x
)
)
∂
∂
θ
j
θ
T
x
=
(
y
(
1
−
g
(
θ
T
x
)
)
−
(
1
−
y
)
g
(
θ
T
x
)
)
x
j
=
(
y
−
h
θ
(
x
)
)
x
j
\begin{aligned} \frac{\partial}{\partial \theta_{j}} \ell(\theta) &=\left(y \frac{1}{g\left(\theta^{T} x\right)}-(1-y) \frac{1}{1-g\left(\theta^{T} x\right)}\right) \frac{\partial}{\partial \theta_{j}} g\left(\theta^{T} x\right) \\ &=\left(y \frac{1}{g\left(\theta^{T} x\right)}-(1-y) \frac{1}{1-g\left(\theta^{T} x\right)}\right) g\left(\theta^{T} x\right)\left(1-g\left(\theta^{T} x\right)\right) \frac{\partial}{\partial \theta_{j}} \theta^{T} x \\ &=\left(y\left(1-g\left(\theta^{T} x\right)\right)-(1-y) g\left(\theta^{T} x\right)\right) x_{j} \\ &=\left(y-h_{\theta}(x)\right) x_{j} \end{aligned}
∂θj∂ℓ(θ)=(yg(θTx)1−(1−y)1−g(θTx)1)∂θj∂g(θTx)=(yg(θTx)1−(1−y)1−g(θTx)1)g(θTx)(1−g(θTx))∂θj∂θTx=(y(1−g(θTx))−(1−y)g(θTx))xj=(y−hθ(x))xj
Logistic回归的学习规则:
θ
j
:
=
θ
j
+
α
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\theta_{j} :=\theta_{j}+\alpha\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right) x_{j}^{(i)}
θj:=θj+α(y(i)−hθ(x(i)))xj(i)
线性回归可以用解析解,这里
h
θ
(
x
(
i
)
)
h_{\theta}(x^{(i)})
hθ(x(i))是
P
(
y
=
1
∣
x
;
θ
)
P(y=1 | x ; \theta)
P(y=1∣x;θ),没有解析解,只能迭代求解。
注意这里参数迭代部分是加号
+
+
+,所以是(梯度向上)方向迭代的,也可以叫梯度下降,本质上升。
对数线性模型
一个事件的几率Odds,是指该事件发生的概率与该事件不发生的概率的比值。
对数几率:logit函数
P
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
P
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
\begin{array}{l}{P(y=1 | x ; \theta)=h_{\theta}(x)} \\ {P(y=0 | x ; \theta)=1-h_{\theta}(x)}\end{array}
P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1−hθ(x)
log
i
t
(
p
)
=
log
p
1
−
p
=
log
h
θ
(
x
)
1
−
h
θ
(
x
)
=
log
(
1
1
+
e
−
θ
T
x
e
−
θ
T
x
1
+
e
−
θ
T
x
)
=
θ
T
x
\log i t(p)=\log \frac{p}{1-p}=\log \frac{h_{\theta}(x)}{1-h_{\theta}(x)}=\log \left(\frac{\frac{1}{1+e^{-\theta^{T} x}}}{\frac{e^{-\theta^{T} x}}{1+e^{-\theta^{T} x}}}\right)=\theta^{T} x
logit(p)=log1−pp=log1−hθ(x)hθ(x)=log⎝⎛1+e−θTxe−θTx1+e−θTx1⎠⎞=θTx
根据结果,也是关于特征的线性组合形式,所以说Logistic回归属于广义线性模型,属于线性模型。
其他策略(损失函数角度)
对于二分类问题: y i ∈ { 0 , 1 } y_{i} \in\{0,1\} yi∈{0,1}
y
^
i
=
{
p
i
y
i
=
1
1
−
p
i
y
i
=
0
\hat{y}_{i}=\left\{\begin{array}{c}{p_{i} \quad y_{i}=1} \\ {1-p_{i} \quad y_{i}=0}\end{array}\right.
y^i={piyi=11−piyi=0
似然概率函数到对数似然的表达式:
L
(
θ
)
=
∏
i
=
1
m
p
i
y
i
(
1
−
p
i
)
1
−
y
i
⇒
l
(
θ
)
=
∑
i
=
1
m
ln
[
p
i
y
i
(
1
−
p
i
)
1
−
y
i
]
\begin{array}{l}{L(\theta)=\prod_{i=1}^{m} p_{i}^{y_{i}}\left(1-p_{i}\right)^{1-y_{i}}} {\Rightarrow l(\theta)=\sum_{i=1}^{m} \ln \left[p_{i}^{y_{i}}\left(1-p_{i}\right)^{1-y_{i}}\right]}\end{array}
L(θ)=∏i=1mpiyi(1−pi)1−yi⇒l(θ)=∑i=1mln[piyi(1−pi)1−yi]
令
p
i
=
1
1
+
e
−
f
i
p_{i}=\frac{1}{1+e^{-f_{i}}}
pi=1+e−fi1,表示为Sigmoid函数形式,
f
i
f_i
fi是Sigmoid输入,得到:
l
(
θ
)
=
∑
i
=
1
m
ln
[
(
1
1
+
e
−
f
i
)
y
i
(
1
1
+
e
f
i
)
1
−
y
i
]
l(\theta)=\sum_{i=1}^{m} \ln \left[\left(\frac{1}{1+e^{-f_{i}}}\right)^{y_{i}}\left(\frac{1}{1+e^{f_{i}}}\right)^{1-y_{i}}\right]
l(θ)=i=1∑mln[(1+e−fi1)yi(1+efi1)1−yi]
习惯上损失函数越小越好,所以损失函数为似然函数的相反数(负对数似然NLL):
loss
(
y
i
,
y
^
i
)
=
−
l
(
θ
)
=
∑
i
=
1
m
[
y
i
ln
(
1
+
e
−
f
i
)
+
(
1
−
y
i
)
ln
(
1
+
e
f
i
)
]
\begin{array}{l}{\operatorname{loss}\left(y_{i}, \hat{y}_{i}\right)=-l(\theta)} {=\sum_{i=1}^{m}\left[y_{i} \ln \left(1+e^{-f_{i}}\right)+\left(1-y_{i}\right) \ln \left(1+e^{f_{i}}\right)\right]}\end{array}
loss(yi,y^i)=−l(θ)=∑i=1m[yiln(1+e−fi)+(1−yi)ln(1+efi)]
Softmax回归
K分类问题,通过Logistic拓展,参数数量增加K-1倍。
概率(模型表达):
p
(
c
=
k
∣
x
;
θ
)
=
exp
(
θ
k
T
x
)
∑
l
=
1
K
exp
(
θ
l
T
x
)
,
k
=
1
,
2
,
⋯
 
,
K
p(c=k | x ; \theta)=\frac{\exp \left(\theta_{k}^{T} x\right)}{\sum_{l=1}^{K} \exp \left(\theta_{l}^{T} x\right)}, \quad k=1,2, \cdots, K
p(c=k∣x;θ)=∑l=1Kexp(θlTx)exp(θkTx),k=1,2,⋯,K
似然函数: J m ( θ ) = ln L ( θ ) = ∑ i = 1 m ∑ k = 1 K ( y k ( i ) ⋅ θ k T x ( i ) − ln ∑ l = 1 K exp ( θ l T x ( i ) ) ) J_{m}(\theta)=\ln L(\theta)=\sum_{i=1}^{m} \sum_{k=1}^{K}\left(y_{k}^{(i)} \cdot \theta_{k}^{T} x^{(i)}-\ln \sum_{l=1}^{K} \exp \left(\theta_{l}^{T} x^{(i)}\right)\right) Jm(θ)=lnL(θ)=i=1∑mk=1∑K(yk(i)⋅θkTx(i)−lnl=1∑Kexp(θlTx(i)))
对数似然(策略,目标函数): L ( θ ) = ∏ i = 1 m ∏ k = 1 K p ( c = k ∣ x ( i ) ; θ ) γ k ( i ) = ∏ i = 1 m ∏ k = 1 K exp ( θ k T x ( i ) ) γ k ( i ) ∑ l = 1 K exp ( θ l T x ( i ) ) L(\theta)=\prod_{i=1}^{m} \prod_{k=1}^{K} p\left(c=k | x^{(i)} ; \theta\right)^{\gamma_{k}^{(i)}}=\prod_{i=1}^{m} \prod_{k=1}^{K} \frac{\exp \left(\theta_{k}^{T} x^{(i)}\right)^{\gamma_{k}^{(i)}}}{\sum_{l=1}^{K} \exp \left(\theta_{l}^{T} x^{(i)}\right)} L(θ)=i=1∏mk=1∏Kp(c=k∣x(i);θ)γk(i)=i=1∏mk=1∏K∑l=1Kexp(θlTx(i))exp(θkTx(i))γk(i)
J
(
θ
)
=
∑
k
=
1
K
y
k
⋅
(
θ
k
T
x
−
ln
∑
l
=
1
K
exp
(
θ
l
T
x
)
)
J(\theta)=\sum_{k=1}^{K} y_{k} \cdot\left(\theta_{k}^{T} x-\ln \sum_{l=1}^{K} \exp \left(\theta_{l}^{T} x\right)\right)
J(θ)=k=1∑Kyk⋅(θkTx−lnl=1∑Kexp(θlTx))
梯度表达:
∂
J
(
θ
)
∂
θ
k
=
(
y
k
−
p
(
y
k
∣
x
;
θ
)
)
⋅
x
\frac{\partial J(\theta)}{\partial \theta_{k}}=\left(y_{k}-p\left(y_{k} | x ; \theta\right)\right) \cdot x
∂θk∂J(θ)=(yk−p(yk∣x;θ))⋅x
采用随机梯度下降,做参数求解(算法)