1.机器学习诊断法
这是一种测试法,通过这种测试能够了解算法在哪里出了问题,也能告知要想改进一种算法的效果什么样的尝试才是有意义的。这些诊断法的执行和实现是需要花些时间来理解和实现,但这样做的确是把时间用在了刀刃上,因为它能节省时间提早发现某些方式是无效的。
2.评估假设
如下给出了一种评价假设的标准方法
展示了一种典型的方法来训练和测试你的学习算法,如线性回归算法。
1.对训练集进行学习得到参数θ,即最小化训练误差J(θ),这里的J(θ)是使用70%数据来定义得到的(训练数据)
2.计算出测试误差
如果是考虑分类问题,比如说使用逻辑回归的时候,训练和测试逻辑回归的步骤与之前所说的非常类似:
1.要从训练数据中(即70%的数据中)学习得到参数θ
2.使用如下方法计算测试误差
3.模型选择和训练、验证、测试集
为了解决模型选择出现的问题,我们采用如下方法来评估一个假设:给定一个数据集,将它分为三个部分,训练集、交叉验证(验证集)、测试集。
我们已经定义了训练集、交叉验证集(又称验证集)、测试集,同样我们可以定义训练误差、交叉验证误差和测试误差
当面对模型选择问题时,我们要用交叉验证集来选择模型,而不是用测试集。
我们首先要选取第一种模型然后最小化代价函数,得到对应的参数向量θ,记第i个模型求得的参数向量为θ(i),接下来使用交叉验证集来测试,然后计算出Jcv(θ(i))来观察这些假设模型在交叉验证集上的效果如何。之后将选择交叉验证误差最小的那个假设作为我们的模型。这个假设是d次多项式,这意味着我们的参数d不再用测试集来拟合了,可以用Jtest(θ(d))来衡量算法选出的模型的泛化误差了
4.诊断方差和偏差
用d表示假设函数的多项式次数,已知训练误差与验证误差的定义如下:
随着多项式次数的增大,我们对数据拟合得越来越好,对应的训练误差和验证误差也会随之改变。
对于高偏差(欠拟合)的情况:
训练误差Jtest(θ)会很大,验证误差Jcv(θ) ≈ 训练误差Jtest(θ)
对于高方差(过拟合)的情况:
验证误差Jcv(θ)会很小,验证误差Jcv(θ) >> 训练误差Jtest(θ)
5.正则化和偏差、方差
有正则化项的线性回归
选择正则参数λ
已知我们对于Jtrain(θ)、Jcv(θ)、Jtest(θ)的定义都是平均的误差平方和,即不适用正则化项的训练集、验证集和测试集的平均的误差平方和的一半。
模型选择在选择正则化参数λ时的应用:
再次申明一下:我们用交叉验证集来拟合参数θ,选出最小的θ对应的模型,然后再用它的测试集来更准确的估计出参数θ对于新样本的泛化能力。
当改变正则化参数λ时,交叉验证误差和训练误差怎么变化:
6.学习曲线
学习曲线是一个很好的工具来判断某一个学习算法是否处于偏差、方差问题。
如果学习算法正处于高偏差的情形,那么选用更多的训练集数据对于改善算法表现无益。
当学习算法出现高方差时,使用更多的训练集数据对改进算法是有帮助的,同时能够知道你的学习算法是否处在高方差的问题。
7.小结
我们试图用正则化的线性回归拟合模型,发现并没有达到我们预期的效果,我们提出如下的选择,判断哪些方法对解决什么问题有效?
- 收集更多的训练集数据–>解决高方差问题;
- 减少特征–>解决高方差问题;
- 选用更多的方差–>解决高偏差问题;
- 增加多项式特征(x12,x22,x1x2,etc)–>解决高偏差问题;
- 减小正则化参数λ–>解决高偏差;
- 增大正则化参数λ–>解决高方差;
神经网络与欠拟合、过拟合