2.1模型偏差
由于模型过于简单(不符合实际情况),而造成的不可避免的误差是模型误差。
解决方法:重新设计一个模型。
2.2优化问题
梯度下降优化是很好的方法,但是会遇到很多问题。比如卡在了局部最小值。
判断方法:比较不同的模型。比如举例56层迭代的问题。实际上是优化的问题。
小技巧:用比较简单的方法做一个尝试,得到一组初步的参数。而后再用深度模型。有了浅的模型作为参照以后,就可以判断深的模型是优化问题还是其他问题。
2.3 过拟合
由于模型过于灵活。导致模型的复杂程度远高于实际曲线。虽然同样都在训练集上结果很好,但与实际预测相违背。测试集误差很大。
解决方法:1.增加训练集,尽可能多地锁定一条曲线。Data augmentation:根据问题的理解寻找符合题目要求的可能出现在训练集中的数据并把这些数据放在训练集中,作为锁定模型的训练点。
2.给模型限制。比如:少给一点参数。卷积神经网络、早停、正则化等。
2.4 交叉验证
数据分为训练集和验证集。(像做过的电力需求挑战赛)
训练集
训练集用来训练模型,即确定模型的权重和偏置这些参数,通常我们称这些参数为学习参数。
验证集
而验证集用于模型的选择,更具体地来说,验证集并不参与学习参数的确定,也就是验证集并没有参与梯度下降的过程。验证集只是为了选择超参数,比如网络层数、网络节点数、迭代次数、学习率这些都叫超参数。比如在k-NN算法中,k值就是一个超参数。所以可以使用验证集来求出误差率最小的k。
测试集
测试集只使用一次,即在训练完成后评价最终的模型时使用。它既不参与学习参数过程,也不参数超参数选择过程,而仅仅使用于模型的评价。
K折交叉验证法
在简单的交叉验证过程中,我们已经把原数据划分为训练集、验证集和测试集,但由于并不是所有的数据都参与了模型训练(至少验证集没有),因此就存在数据信息利用不全的弊端;此外,不同的划分结果也会导致模型不同的训练效果。
为了确保泛化误差的稳定性,从而得到理想的模型,我们就需要利用K折验证法,其一般流程如下:
(1) 将数据集分为训练集和测试集,测试集放在一边。
(2) 将训练集分为 k 份,每次使用 k 份中的1 份作为验证集,其他全部作为训练集。
(3) 通过 k 次训练后,得到了 k 个不同的模型。
(4) 评估 k 个模型的效果,从中挑选效果最好的超参数。
(5) 使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终所需模型,最后再到测试集上测试。
2.5 不匹配
反常点就是不匹配。这是因为训练集和测试集的分布不同。出现的特殊情况。