2022.01.25开始学习第十章
2022.01.26继续学习
2022.01.27明天弄完
2022.01.28结束第十章
假设有这样一组的数据,下面只展示十组训练样本,为了确保可以评价假设函数,需要将这些数据分为两部分,一部分作为训练集,另一部分作为测试集。
将所有数据分成训练集和测试集的一种典型的分割方法,是按照 7:3 的比例进行分割,70%的数据作为训练集,30%的数据作为测试集。
定义如下符号:
Training
set:
(
x
(
1
)
,
y
(
1
)
)
(
x
(
2
)
,
y
(
2
)
)
.
.
.
(
x
(
m
)
,
y
(
m
)
)
(
m
依
然
表
示
训练
样
本
的
总
数
)
Test
set:
(
x
t
s
e
t
(
1
)
,
y
t
s
e
t
(
1
)
)
(
x
t
s
e
t
(
2
)
,
y
t
s
e
t
(
2
)
)
.
.
.
(
x
t
s
e
t
(
m
t
s
e
t
)
,
y
t
s
e
t
(
m
t
s
e
t
)
)
(
m
t
s
e
t
表
示
测试
样
本
的
总
数
)
(
样
本
的
下
标
t
e
s
t
表
示
这
些
样
本
来
自
测
试
集
)
\begin{aligned} &\textbf{Training\ \ set:}\\ &\qquad (x^{(1)},y^{(1)})\\ &\qquad(x^{(2)},y^{(2)})\\ &\qquad\quad\ \ \ ...\\ &\qquad(x^{(m)},y^{(m)})\\\ \\ &\qquad(m\ 依然表示\textbf{训练}样本的总数 )\\ &\textbf{Test\ \ set:}\\ &\qquad (x^{(1)}_{tset},y^{(1)}_{tset})\\ &\qquad(x^{(2)}_{tset},y^{(2)}_{tset})\\ &\qquad\qquad...\\ &\qquad(x^{(m_{tset})}_{tset},y^{(m_{tset})}_{tset})\\\ \\ &\qquad(m_{tset}\ 表示\textbf{测试}样本的总数)\\ &\qquad(样本的下标\ test\ 表示这些样本来自测试集)\\ \end{aligned}
Training set:(x(1),y(1))(x(2),y(2)) ...(x(m),y(m))(m 依然表示训练样本的总数)Test set:(xtset(1),ytset(1))(xtset(2),ytset(2))...(xtset(mtset),ytset(mtset))(mtset 表示测试样本的总数)(样本的下标 test 表示这些样本来自测试集)
注意: 如果数据不是随机排列的,需要先将其打乱顺序,再进行数据的分割(或者使用一种随机的顺序来构建数据)。
− L e a r n p a r a m e t e r θ f r o m t r a i n i n g d a t a ( m i n i m i z i n g t r a i n i n g e r r o r J ( θ ) ) − C o m p u t e t e s t s e t e r r o r : J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 \begin{aligned} &-Learn\ \ parameter\ \ \theta\ \ from\ \ training\ \ data\ \ (minimizing\\\ \ &\quad \ training\ \ error\ \ J(\theta))\ \ \\ &-Compute\ \ test\ \ set\ \ error:\\ &\qquad\large J_{test}(\theta)=\frac{1}{2m_{test}}\sum^{m_{test}}_{i=1}(h_\theta(x^{(i)}_{test})-y^{(i)}_{test})^2 \end{aligned} −Learn parameter θ from training data (minimizing training error J(θ)) −Compute test set error:Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
−
L
e
a
r
n
p
a
r
a
m
e
t
e
r
θ
f
r
o
m
t
r
a
i
n
i
n
g
d
a
t
a
−
C
o
m
p
u
t
e
t
e
s
t
s
e
t
e
r
r
o
r
:
J
t
e
s
t
(
θ
)
=
−
1
m
t
e
s
t
[
∑
i
=
1
m
t
e
s
t
(
y
t
e
s
t
(
i
)
l
o
g
h
θ
(
x
t
e
s
t
(
i
)
)
+
(
1
−
y
t
e
s
t
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
t
e
s
t
(
i
)
)
)
)
]
−
M
i
s
c
l
a
s
s
i
f
i
c
a
t
i
o
n
e
r
r
o
r
(
0
/
1
m
i
s
c
l
a
s
s
i
f
i
c
a
t
i
o
n
e
r
r
o
r
)
:
e
r
r
(
h
θ
(
x
)
,
y
)
=
{
1
if
h
θ
(
x
)
≥
0.5
y
=
0
or if
h
θ
(
x
)
<
0.5
y
=
1
0
otherwise
T
e
s
t
e
r
r
o
r
=
1
m
t
e
s
t
∑
i
=
1
m
t
e
s
t
e
r
r
(
h
θ
(
x
t
e
s
t
(
i
)
)
,
y
t
e
s
t
(
i
)
)
\begin{aligned} &-Learn\ \ parameter\ \ \theta\ \ from\ \ training\ \ data\\ &-Compute\ \ test\ \ set\ \ error:\\ &\qquad\large J_{test}(\theta)=-\frac{1}{m_{test}}\left[\sum^{m_{test}}_{i=1}(y^{(i)}_{test}logh_\theta(x^{(i)}_{test})+(1-y^{(i)}_{test})log(1-h_\theta(x^{(i)}_{test})))\right]\\\ \\ &-Misclassification\ \ error\ \ (0/1\ \ misclassification\ \ error):\\ &\qquad err(h_\theta(x),y)= \begin{cases} 1 &\text{if } \ \ h_\theta(x)\ge0.5\ \ \ \ \ \ \ \ \ \ y=0 \\ &\text{or\ \ if } \ \ \ h_\theta(x)<0.5\ \ \ \ y=1\\ 0 &\text{otherwise } \end{cases}\\\ \\ &\qquad Test\ \ error=\frac{1}{m_{test}}\sum^{m_{test}}_{i=1}err(h_\theta(x^{(i)}_{test}),y^{(i)}_{test}) \end{aligned}
−Learn parameter θ from training data−Compute test set error:Jtest(θ)=−mtest1⎣⎡i=1∑mtest(ytest(i)loghθ(xtest(i))+(1−ytest(i))log(1−hθ(xtest(i))))⎦⎤−Misclassification error (0/1 misclassification error):err(hθ(x),y)=⎩⎪⎨⎪⎧10if hθ(x)≥0.5 y=0or if hθ(x)<0.5 y=1otherwise Test error=mtest1i=1∑mtesterr(hθ(xtest(i)),ytest(i))
在过拟合的情况中,学习算法即便对训练集拟合的很好,也并不代表它是一个好的假设,一般来说,这就是为什么训练集误差不能用来判断该假设对新样本的拟合好坏。
具体来讲,如果用这些参数(如 θ0、θ1、θ2)来拟合训练集,即便假设在训练集上表现的很好,也并不意味着该假设对训练集中没有的新样本有多好的泛化能力。
更为普遍的规律是,如果你的参数对某个数据集拟合的很好(比如训练机或者其他数据集),那么用同一数据集计算得到的误差(比如训练误差),并不能很好地估计出实际的泛化误差,即该假设对新样本的泛化能力。
在测试选定的模型对新样本的泛化能力时,用测试集中的样本对测试集数据得到的模型(用测试集拟合了参数 d。计算 Jtest 的时候已经使用了测试集,再检验泛化时已经无新数据可用了,即测试集不能既确定模型又评估模型的泛化能力)来验证是存在问题的,为了解决这一问题,通常采用如下的方法来评估一个假设:
给定一个数据集,将其分为三个部分,分别是训练集(training set
)、交叉验证集(cross validation set)、测试集(test set
)。这些数据的典型分配比例是 6:2:2。
Training
set:
样
本
:
(
x
(
m
)
,
y
(
m
)
)
训
练
样
本
总
数
:
m
Training
set:
样
本
:
(
x
c
v
(
m
c
v
)
,
y
c
v
(
m
c
v
)
)
验
证
样
本
总
数
:
m
c
v
Test
set:
样
本
:
(
x
t
s
e
t
(
m
t
s
e
t
)
,
y
t
s
e
t
(
m
t
s
e
t
)
)
测
试
样
本
总
数
:
m
t
s
e
t
\begin{aligned} &\textbf{Training\ \ set:}\\ &\qquad 样本:(x^{(m)},y^{(m)})\\ &\qquad 训练样本总数:m\\ &\textbf{Training\ \ set:}\\ &\qquad 样本:(x^{(m_{cv})}_{cv},y^{(m_{cv})}_{cv})\\ &\qquad 验证样本总数:m_{cv}\\ &\textbf{Test\ \ set:}\\ &\qquad 样本:(x^{(m_{tset})}_{tset},y^{(m_{tset})}_{tset})\\ &\qquad 测试样本总数:m_{tset}\\ \end{aligned}
Training set:样本:(x(m),y(m))训练样本总数:mTraining set:样本:(xcv(mcv),ycv(mcv))验证样本总数:mcvTest set:样本:(xtset(mtset),ytset(mtset))测试样本总数:mtset
同样的也可以定义训练误差、交叉验证误差和测试误差:
Training
error:
J
t
r
a
i
n
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
Cross
Validation
error:
J
c
v
(
θ
)
=
1
2
m
c
v
∑
i
=
1
m
c
v
(
h
θ
(
x
c
v
(
i
)
)
−
y
c
v
(
i
)
)
2
Test
error:
J
t
e
s
t
(
θ
)
=
1
2
m
t
e
s
t
∑
i
=
1
m
t
e
s
t
(
h
θ
(
x
t
e
s
t
(
i
)
)
−
y
t
e
s
t
(
i
)
)
2
\begin{aligned} &\textbf{Training\ \ error: }\\ &\qquad\large J_{train}(\theta)=\frac{1}{2m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2\\ &\textbf{Cross\ \ Validation\ \ error: }\\ &\qquad\large J_{cv}(\theta)=\frac{1}{2m_{cv}}\sum^{m_{cv}}_{i=1}(h_\theta(x^{(i)}_{cv})-y^{(i)}_{cv})^2\\ &\textbf{Test\ \ error:}\\ &\qquad\large J_{test}(\theta)=\frac{1}{2m_{test}}\sum^{m_{test}}_{i=1}(h_\theta(x^{(i)}_{test})-y^{(i)}_{test})^2\\ \end{aligned}
Training error: Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2Cross Validation error: Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2Test error:Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
用验证集来选择模型(而不是用原来的测试集)
M o d e l h θ ( x ) ( d = i ) ( u s e t r a i n i n g s e t ) ⇒ min θ J ( θ ) ⇒ θ ( i ) ⇒ ( u s e v a l i d a t i o n s e t ) ⇒ J c v ( θ ( i ) ) ⇒ ( u s e t e s t s e t ) ⇒ P i c k d = 4 ⇒ E s t i m a t e g e n e r a l i z a t i o n e r r o r f o r t e s t s e t J t e s t ( θ ( 4 ) ) \begin{aligned} &Model\ \ h_\theta(x)\ \ (d=i)(use\ \ training\ \ set)\\ \Rightarrow \ \ &\min\limits_\theta J(\theta)\\ \Rightarrow \ \ &\theta^{(i)}\qquad\Rightarrow (use\ \ validation\ \ set)\\ \Rightarrow \ \ &J_{cv}(\theta^{(i)})\Rightarrow (use\ \ test\ \ set)\\ \Rightarrow \ \ &Pick\ \ d=4\\ \Rightarrow \ \ &Estimate\ \ generalizati\ \ on\ \ error\ \ for\ \ test\ \ set\ \ J_{test}(\theta^{(4)}) \end{aligned} ⇒ ⇒ ⇒ ⇒ ⇒ Model hθ(x) (d=i)(use training set)θminJ(θ)θ(i)⇒(use validation set)Jcv(θ(i))⇒(use test set)Pick d=4Estimate generalizati on error for test set Jtest(θ(4))
沿用之前所使用的训练误差和验证误差的定义,分别是用训练集和交叉验证集计算的均方误差(average square error)。
Training
error:
J
t
r
a
i
n
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
Cross
Validation
error:
J
c
v
(
θ
)
=
1
2
m
c
v
∑
i
=
1
m
c
v
(
h
θ
(
x
c
v
(
i
)
)
−
y
c
v
(
i
)
)
2
\begin{aligned} &\textbf{Training\ \ error: }\\ &\qquad\large J_{train}(\theta)=\frac{1}{2m}\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2\\ &\textbf{Cross\ \ Validation\ \ error: }\\ &\qquad\large J_{cv}(\theta)=\frac{1}{2m_{cv}}\sum^{m_{cv}}_{i=1}(h_\theta(x^{(i)}_{cv})-y^{(i)}_{cv})^2\\ \end{aligned}
Training error: Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2Cross Validation error: Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
横坐标表示多项式的次数,越往右多项式的次数越大。随着多项式次数的增大,我们对于训练集的拟合效果也越来越好,训练误差明显下降;通过前面的内容我们可以知道,中等复杂的假设对数据拟合的刚刚好,因此交叉训练误差先减小后增大。
Model: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 + θ 4 x 4 4 Learning algorithm objective : J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 n θ j 2 \begin{aligned} &\textbf{Model:}\\ &\qquad h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2+\theta_3x_3^3+\theta_4x_4^4\\ &\textbf{Learning\ \ algorithm\ \ objective :}\\ &\qquad J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2+\red{\frac{λ}{2m}\sum_{j=1}^nθ_j^2} \end{aligned} Model:hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44Learning algorithm objective :J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+2mλj=1∑nθj2
M o d e l ⟹ min θ J ( θ ) ⟹ θ ( i ) ⟹ J c v ( θ ( i ) ) ⟹ J t e s t ( θ ( 5 ) ) \begin{aligned} Model\Longrightarrow \min\limits_\theta J(\theta)\Longrightarrow \theta^{(i)}\Longrightarrow J_{cv}(\theta^{(i)})\Longrightarrow J_{test}(\theta^{(5)}) \end{aligned} Model⟹θminJ(θ)⟹θ(i)⟹Jcv(θ(i))⟹Jtest(θ(5))
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 n θ j 2 J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 \begin{aligned} &J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2+\red{\frac{λ}{2m}\sum_{j=1}^nθ_j^2}\\ &J_{train}(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2\\ &J_{cv}(\theta)=\frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}}(h_θ(x^{(i)}_{cv})-y^{(i)}_{cv})^2\\ \end{aligned} J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+2mλj=1∑nθj2Jtrain(θ)=2m1i=1∑m(hθ(x(i))−y(i))2Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
主要内容: 学习曲线如何指引我们采取或者不采取某些方法来改进学习算法。
回到最开始试图用正则化的线性回归拟合模型,发现并没有达到我们预期的效果,提出了以下选择:
−
G
e
t
m
o
r
e
t
r
a
i
n
i
n
g
e
x
a
m
p
l
e
s
−
T
r
y
s
m
a
l
l
e
r
s
e
t
s
o
f
f
e
a
t
u
r
e
s
−
T
r
y
g
e
t
t
i
n
g
a
d
d
i
t
i
o
n
a
l
f
e
a
t
u
r
e
s
−
T
r
y
a
d
d
i
n
g
p
o
l
y
n
o
m
i
a
l
f
e
a
t
u
r
e
s
(
x
1
2
,
x
2
2
,
x
1
x
2
,
e
t
c
.
)
−
T
r
y
d
e
c
r
e
a
s
i
n
g
λ
−
T
r
y
i
n
c
r
e
a
s
i
n
g
λ
\begin{aligned} &-Get\ \ more\ \ training\ \ examples\\ &-Try\ \ smaller\ \ sets\ \ of\ \ features\\ &-Try\ \ getting\ \ additional\ \ features\\ &-Try\ \ adding\ \ polynomial\ \ features(x_1^2,x_2^2,x_1x_2,etc.)\\ &-Try\ \ decreasing\ \ \lambda\\ &-Try\ \ increasing\ \ \lambda\\ \end{aligned}
−Get more training examples−Try smaller sets of features−Try getting additional features−Try adding polynomial features(x12,x22,x1x2,etc.)−Try decreasing λ−Try increasing λ
主要内容: 一些实用的经验,如何为神经网络模型选择结构或者连接形式。
在进行神经网络拟合的时候,可以选择一个相对比较简单的神经网络模型,比如只有很少甚至只有一个隐含层,并且只有少量的隐含单元,像这样简单的神经网络参数不会很多,容易出现欠拟合。这种比较小型的神经网络最大的优势在于计算量较小。
与之相对的一种情况是,拟合较大型的神经网络结构,比如每一层的隐含单元数很多,或者有很多个隐含层,这种比较复杂的神经网络参数一般较多,更容易出现过拟合。这种结构的一大劣势就是当网络有大量神经元时这种结构会有很大的计算量,最主要的潜在问题还是更容易出现过拟合现象,实际上,越大型的网络性能越好,但如果发生了过拟合,可以使用正则化的方法来修正。
一般来说,使用一个大型的神经网络,并且使用正则化来修正过拟合问题,通常比使用一个小型的神经网络效果更好,但主要可能出现的一个问题就是计算量相对较大。
最后还需要选择需要的隐含层的层数,使用一个隐含层是比较合理的默认选项,但是如果想要选择一个最适合的隐含层层数,也可以尝试把数据分割为训练集、验证集和测试集,然后训练不同隐含层的神经网络,选出在交叉验证集上表现的最理想的神经网络模型(计算每一个模型的交叉验证误差 Jcv(θ) )。