本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片
机器学习 | Coursera
吴恩达机器学习系列课程_bilibili
目录
10 应用机器学习的建议
10-1 决定下一步做什么
10-2 评估假设函数
随机选择数据集中的70%作为训练集,30%作为测试集,将数据集分为两个部分
- 首先根据训练集计算出参数 Θ \Theta Θ
- 把参数
Θ
\Theta
Θ代入测试集计算代价函数的值(这里是线性回归的代价函数,逻辑回归的代价函数同理):
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 J_{test}(θ)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}(h_θ(x^{(i)}_{test})-y^{(i)}_{test})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
逻辑分类中有另一种形式的测试度量,称作错误分类或0/1错误分类,计算过程如上图
10-3 模型选择和训练、验证、测试集
随机选择数据集中的60%作为训练集(Training Set),20%作为交叉验证集(验证集,Cross Validation Set,cv),20%作为测试集(Test Set),将数据集分为三个部分
上图,计算训练误差、验证误差和测试误差
用
d
d
d来表示假定函数的多项式的最高次幂
- 先用训练集求每一个假定函数的代价函数 J ( Θ ) J(\Theta) J(Θ)取到最小值时 Θ \Theta Θ的值,再把这个求得的 Θ \Theta Θ代入交叉验证集求得 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ),对每一个假定函数进行以上步骤的计算,得到 d = 1 , . . . , 10 d=1,...,10 d=1,...,10的10个代价函数的值,取最小的那个,这里假定是 d = 4 d=4 d=4,再使用 d = 4 d=4 d=4时的 Θ \Theta Θ代入测试集得到泛化误差
10-4 判断偏差与方差
上图坐标系
y
y
y轴为误差,
x
x
x轴为
d
d
d(多项式最高次幂)的大小
以上图为例,
- 当 d d d过小时,出现欠拟合(underfit),偏差(bias)过大,此时的训练集误差 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)很大,并且 J c v ( Θ ) ≈ J t r a i n ( Θ ) J_{cv}(\Theta)\approx J_{train}(\Theta) Jcv(Θ)≈Jtrain(Θ)
- 当 d d d过大时,出现过拟合(overfit),方差(variance)过大,此时的训练集误差 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain(Θ)很小,并且 J c v ( Θ ) > > J t r a i n ( Θ ) J_{cv}(\Theta)>> J_{train}(\Theta) Jcv(Θ)>>Jtrain(Θ)
10-5 正则化和偏差、方差
- 若正则化参数 λ \lambda λ过大,会导致欠拟合,高偏差,并且参数 θ 1 ≈ 0 , θ 2 ≈ 0 , . . . \theta_1\approx 0,\theta_2\approx 0,... θ1≈0,θ2≈0,...,假定函数的结果 h θ ( x ) ≈ θ 0 h_{\theta}(x)\approx \theta_0 hθ(x)≈θ0,如上图最左侧坐标系
- 若正则化参数
λ
\lambda
λ过小,会导致过拟合,高方差,如上图最右侧坐标系
使用不带正则化项的 J t r a i n ( Θ ) 、 J c v ( Θ ) 、 J t e s t ( Θ ) J_{train}(\Theta)、J_{cv}(\Theta)、J_{test}(\Theta) Jtrain(Θ)、Jcv(Θ)、Jtest(Θ)
J ( Θ ) J(\Theta) J(Θ)取下图中的带正则化项的代价函数
- 首先取多种 λ \lambda λ的情况,这里从0,0.01开始,下一个 λ \lambda λ是上一个的两倍,一直取到 λ = 10.24 \lambda=10.24 λ=10.24,由于此时小数部分对结果影响不大,所以也可以直接取 λ = 10 \lambda=10 λ=10
- 将每一种情况的 λ \lambda λ代入带正则化项的代价函数 J ( Θ ) J(\Theta) J(Θ)中,这里共能得到12个不同的 Θ \Theta Θ值
- 再把这12个 Θ \Theta Θ代入到交叉验证集代价函数 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)中,注意这里的 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)是不带正则化项的,最后得到12个不同的 J c v ( Θ ) J_{cv}(\Theta) Jcv(Θ)值
- 取最小的那个
J
c
v
(
Θ
)
J_{cv}(\Theta)
Jcv(Θ)值对应的
λ
\lambda
λ(这里认为第5个
λ
\lambda
λ是最合适的)代入到测试集的代价函数
J
t
e
s
t
(
Θ
)
J_{test}(\Theta)
Jtest(Θ)中,计算泛化误差,注意这里的
J
t
e
s
t
(
Θ
)
J_{test}(\Theta)
Jtest(Θ)也是不带正则化项的
10-6 学习曲线
如上图是高偏差/欠拟合的情形
此时增加数据集数量对于误差的缩小没有明显帮助
如上图是高方差/过拟合的情形
此时交叉验证集的曲线和训练集的曲线中间相差较大,所以增加数据集数量对于减小误差是有帮助的
10-7 决定接下来做什么
解决高偏差或高方差的一些方法如下图:
如上图
- 在一个小型的神经网络中,容易出现欠拟合现象,但它的好处是计算量较小
- 在一个大型的神经网络中,容易出现过拟合现象,可以通过正则化来避免,它的好处是效果较好,但是计算量较大