本次学习笔记主要记录学习机器学习时的各种记录,包括吴恩达老师视频学习、李宏毅老师视频学习、周志华老师的《机器学习》(西瓜书)以及李航老师的《统计学习方法》。作者能力有限,如有错误等,望联系修改,非常感谢!
机器学习笔记(八)-应用机器学习的建议
第一版 2022-03-09 初稿
一、决定下一步做什么
我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。
在接下来的两段视频中,我首先介绍怎样评估机器学习算法的性能,然后在之后的几段视频中,我将开始讨论这些方法,它们也被称为"机器学习诊断法"。“诊断法〞的意思是:这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。这通常也能够告诉你,要想改进一种算法的效果,什么样的尝试,才是有意义的。在这一系列的视频中我们将介绍具体的诊断法,但我要提前说明一点的是,这些诊断法的执行和实现,是需要花些时间的,有时候确实需要花很多时间来理解和实现,但这样做的确是把时间用在了刀刃上,因为这些方法让你在开发学习算法时,节省了几个月的时间,因此,在接下来几节课中,我将先来介绍如何评价你的学习算法。
二、评估假设
假设具有很小的训练误差,并不能说明它一定是一个好的假设函数。
为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用 70%的数据作为训练集,用剩下 30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。
三、模型选择和交叉验证集
应选择一个更能适应一般情况的模型。
四、诊断偏差(bias)和方差(variance)
算法表现不理想:
(1)偏差过大
(2)方差过大
也就是欠(过)拟合问题。
Training error:
J
t
r
a
i
n
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J_{train}\left( \theta \right) \,\,=\,\,\frac{1}{2m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) \,\,-\,\,y^{\left( i \right)} \right) ^2}
Jtrain(θ)=2m1i=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
J_{cv}\left( \theta \right) \,\,=\,\,\frac{1}{2m_{cv}}\sum_{i=1}^{m_{cv}}{\left( h_{\theta}\left( {x_{cv}}^{\left( i \right)} \right) \,\,-\,\,{y_{cv}}^{\left( i \right)} \right) ^2}
Jcv(θ)=2mcv1i=1∑mcv(hθ(xcv(i))−ycv(i))2
诊断偏差和方差:
假设你的学习曲线比你想象的表现差。(Jcv或者Jtrain很高)
是偏差问题还是方差问题呢?
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
五、正则化和偏差/方差
λ通常是0-10之间的值:(如0,0.01,0.02 - 5.12,10共12个)
选择λ的方法为:
1.使用训练集训练出 12 个不同程度正则化的模型
2.用12个模型分别对交叉验证集计算的出交叉验证误差
3.选择得出交叉验证误差最小的模型
4.运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上
- 当λ较小时,训练集误差较小(过拟合)而交叉验证集误差较大
- 随着λ的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加
六、学习曲线
学习曲线是学习算法的一个很好的合理检验。
学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。
七、决定下一步做什么(重温)
1.1提出的六种可选的下一步