|一文读懂机器学习( 三 )



在学习过程中有两个不同的点 。 在图的左侧 , 曲线很好地拟合了数据的总体趋势(已将其推广到基本的通用函数) , 但是训练误差不会接近于零 。 但是右图 , 随着网络的不断学习 , 最终将产生一个更复杂的模型 , 该模型具有较低的训练误差(接近于零) , 这意味着它已经记住了训练示例 , 包括其中的任何噪声成分 , 因此已经过拟合训练数据 。
验证集的出现
我们想在算法过拟合之前停止学习过程 , 这意味着我们需要知道它在每个时间步上的推广程度 。 我们不能为此使用训练数据 , 因为它是用来训练参数的 , 我们不会检测到过度拟合;我们也不能使用测试数据 , 它是用来看模型性能的 , 我们将其保存为最终测试 。 因此 , 我们需要用于此目的的第三组数据 , 称为验证集validation set , 因为到目前为止我们正在使用它来验证学习 , 这被称为统计中的交叉验证cross-validation 。 这是模型选择model selection的一部分:为模型选择正确的参数 , 以便尽可能地泛化 。

  • Training, Testing, and Validation Sets
不同数据集的作用
现在 , 我们需要三组数据:
  • 训练集train set:用于实际训练算法的训练集 , 把它拿来做函数拟合 , 使得模型好一点 。
  • 验证集validation:用于跟踪算法学习情况, 观察函数好不好调整(改模型的时候依赖它) , 每次训练完后把模型拿到它的上面去测试一下看看模型好不好 , 用于没见过的数据 , 防止模型过拟合 , 虽然没有训练模型 , 但是改模型是依据模型的 , 对于模型来说 , validation实际上是见过的 , 测试真正的效果应该给模型从来没有见过的数据 。
  • 测试集test set:当我们的模型都能忍受两个值的时候就定了 , 最后一步就是拿test来模型上作用看最终的看好坏(用过一次就不用第二次) 。 如果test数据上了效果还是不好 , 就要重新选择这三个数据了 , 因为test数据集已经被见过了 。
数据集划分
每种算法都需要一些合理量的数据去学习(精确度有所不同 , 但是算法看到的数据越多 , 看到每种可能输入类型的示例的可能性就越大 , 尽管更多的数据也会增加计算时间) 。
平衡的分配
一般来说 , 数据划分比例取决于你 , 如果有大量数据 , 通常执行2:1:1 , 否则进行3:1:1 。 拆分方式也很重要 。 如果你选择前几个作为训练集 , 接下来选择测试集 , 依此类推 , 那么结果将是非常糟糕的 , 因为训练没有看到所有的类别 。 这可以通过以下方法解决:首先对数据进行随机重新排序 , 或者将每个数据点随机分配给一组数据 , 如下图 。
|一文读懂机器学习
本文插图

缺乏训练数据
如果你确实缺乏训练数据 , 那么如果你有单独的验证集 , 可能会担心算法将无法得到充分训练;那么就可以执行leave-some-out, multi-fold cross-validation 。 这个想法如下图所示 。 数据集被随机分为K个子集 , 一个子集用作验证集 , 而算法对其他所有数据进行训练 。 然后遗漏另一个子集 , 并在该子集上训练一个新模型 , 并对所有不同的子集重复相同的过程 。 最后 , 测试并使用产生最小验证误差的模型 。 由于我们不得不训练K个不同的模型 , 而不仅仅是一个模型 , 因此我们权衡了数据的运行时间 。 在最极端的情况下 , 存在留一法交叉验证 , 该算法仅对一项数据进行验证 , 并对其余所有数据进行训练 。
|一文读懂机器学习
本文插图

  • The Confusion Matrix
无论我们使用多少数据来测试训练过的算法 , 我们仍然需要确定结果是否良好 。 我们将在这里介绍一种适用于分类问题的方法 , 称为混淆矩阵 。


推荐阅读