机器学习主要要解决的问题是过拟合问题。

例如这根曲线,虽然这根曲线将样本点拟合得很好,总体误差很低,但如果来了一个新样本,它就不能进行很好的预测了。也就是说,这个模型的泛能力很弱。
泛化能力即由此及彼的能力。
我们训练模型不是为了这些已知的点,而是为也预测。因此模型对训练数据的拟合程度有多好是没有意义的。真正需要的是模型的泛化能力。

解决方法:
训练、测试数据分离。
模型只使用训练数据集获取。测试数据对于模型是全新的数据。
如果模型对于测试数据也有很好的结果,就说模型的泛化能力是很强的。
如果模型对训练数据集的效果好,而对测试数据的效果很差,就说模型的泛化能力很弱,通常是过拟合。

仍使用8-3的数据,degree取不同值时在test数据集上的效果对比

degree在训练数据集上的MSE在测试数据集上的MSEnote
线性3.07500257656365772.2199965269396573
21.09873921424178560.80356410562979使用二次模型得到的泛化结果比使用线性模型得到的要好
101.0508466763764170.9212930722150768在训练数据集上(8-3)degree取10效果更好,但在测试数据集上degree取10的效果变差了。说明degree取10时它的泛化能力变弱了。
1000.688000467871268614075796434.50641在训练数据集上效果最好,在测试数据集上效果极差

测试数据集的意义

对于不同的算法,模型复杂度代码不同的意思。
对于多项式回归算法来说,模型复杂度相当于degree,degree越高,模型越复杂。
对于KNN算法来说,K越小,模型越复杂。

如图所示:
对于训练数据来说,模型越复杂,模型准确率就越高。
对于测试数据来说,模型最简单时,测试数据的准确率会比较低,当模型变复杂时,训练数据的准确率会提升。随着模型越来越复杂,当准确率提升到一定程度时又开始下降。
这就是“欠拟合-合适-过拟合”的过程。
这只是一个示意图,不同模型得到的具体图像不同,但整体上是这样的趋势。

欠拟合 vs 过拟合

欠拟合 underfitting
算法所训练的模型不能完整表述数据关系。

过拟合 overfitting
算法所训练的模型过多地表达了数据间的噪音关系。