训练与测试

模型的训练和测试是任何机器学习模型都会涉及的问题, 同时也是初学者容易出错的地方

我们的学习过程中,经常会碰到作业与考试这两样东西。其中

  • 做作业可以帮助我们更好地理解所学内容
  • 考试可以检查我们对知识的理解程度

如果将做作业理解成模型的训练,那么考试就是模型的测试了。老师会直接将作业作为考试题目吗?显然不会的,老师一般都是选用新的题目作为考试题,这样才能真正的看出同学们有没有真正地掌握了知识。

在机器学习中,我们就需要将数据分为训练集和测试集,分别用来对模型进行训练和测试:

  • 训练集:作用是用来拟合模型,通过优化模型的参数,训练模型。
  • 测试集:通过训练集得出模型后,使用测试集进行模型测试。

举例来说,假设我们要拟合 $y=b+wx$,最终目的是未来有了新的 $x$ 数据,我可以知道 $y$ 的值。训练集的作用就是通过已知的 $x$ 和 $y$,学习出或者训练出合适的 $w$ 和 $b$ 使得实际值和预测值尽可能的接近。但是如果我把所有已知的 $x$ 和 $y$ 全部用作训练,新的数据 $x$ 来了以后,我没法知道预测出的 $y$ 有多接近真实数据。这怎么办呢?这个时候我们就需要测试集了。

将所有已知数据分为两部分,多数(比如75%)作为训练集,少数(比如25%)作为测试集。这个时候多数的训练集就是上面叙述过的作用和用法。测试集呢,我开始假装不知道 $y$ 是多少,然后输入 $x$,通过 $b+wx$ 变换,算出一个 $\hat y$,通过比较这个 $\hat y$ 与数据集中的 $y$ 有多接近,从而分析模型的好坏及其预测能力。

比较 $\hat y$ 与 $y$ 有多接近怎么做?我们可以使用前面介绍过的均方差 MSE 来判断。

同时注意,测试集还需要满足以下两个条件:

  • 规模足够大,可产生具有统计意义的结果。(考砸一次没关系,但是次次考砸肯定就有问题了)
  • 能代表整个数据集。(作业都是初等代数,考试却是高等数学,显然不合理吧) 测试集满足上述两个条件,才有可能得到一个很好地泛化到新数据的模型。

而且一定要注意:

  • 🚫绝对禁止使用测试数据进行训练。(泄露高考题可是严重的犯罪!)

反馈问题

文档有问题? 或者有其他意见和建议? 请在本文档的 Github 仓库直接反馈

点我反馈

进入反馈页面不知道如何反馈, 请点击这里

更新时间: