在 ML 中三个关键的锦囊妙计,一定要注意、遵循。

Occam’s Razor

如无必要,勿增实体

Entities must not be multiplied beyond necessity. ——William of Occam (1287-1347)

奥卡姆剃刀之意,就是除去所有不必要的东西,使得尽可能精简。这在之前的学习中也多有体现:尽可能使用最简单的模型来拟合数据。

简单的模型有两个角度的含义:

  1. 简单的假设 :这通常指模型的代价 简单, 的参数较少;
  2. 简单的假设集 :指该假设集中所含的假设数量较少,维度较低;

假设与假设集之间数量的联系是:

  • 假设集的规模是 ,即假设 是由 个 位/参数 确定;
  • 越小的 也就决定了越小的

从直观上看,越简单就越好:越简单的假设集 得到的 越小,这样虽然完全拟合当前数据的概率 较小,但是在更广范围内拟合未知数据的概率却上升了:

这给我们的经验是,在进行 ML 训练时,从线性模型做起,而不要选择过度复杂的模型

练习:计算数据集在假设集上可分的概率

Sampling Bias

无偏采样才能获得无偏模型

If the data is sampled in a biased way, learning will produce a similarly biased outcome.

从 VC Dimension 的角度看这句话,就是来自分布 的数据进行训练的模型,在测试时分布却是 ,这样分布的差异会导致 VC bound guarantee 失效

因此,要使 VC bound 成立,训练、测试时应当处于同一分布

  • 林老师举了一个自己遇到的例子:在 Netflix 的推荐系统改善竞赛中,林老师做出一个验证时改进了 的模型,但是在最终测试时却没有达到竞赛的要求,问题就是在于林老师的验证集是随机抽样的,但 Netflix 测试时选取的是用户最后观看影片的记录,其随着时间推移而权重上升:

这给我们的经验是,尽量使得训练场景与测试场景相同(相近)。

练习:选择无偏估计的子集

  • 不要引入任何偏见;

Data Snooping

要注意偷看数据的影响

If a data set has affected any step in the learning process, its ability to access the outcome has been compromised.

我们在前文提到,对数据集可视化后再选取模型,这样的行为是危险的,因为没有评估人在选择模型时的主观能动性,人的建模能力比算法要强得多。因此为了 VC bound 的可信,我们不能有偷看数据的行为。

这里 “偷看数据”之意其实远不止肉眼的观察,更细节的是在利用数据进行训练时

  • 这个问题中尝试对货币贸易数据进行评估,前 6 年做训练,后 2 年做测试,如果直接使用 8 年的数据进行训练,那就是“偷看了数据”(snooping),将会导致过于乐观的估计:
  • 因此要避免偷看数据,就要确保训练集和测试集的分离,模型训练只能使用训练集,测试集一定要保证“干净、保密”

另外,我们在阅读论文并逐步改进时,也是一种 snooping:

  • 这就是所谓“站在巨人的肩膀上”:
  • 这时相当于所有的论文都组成一篇 big paper ,最终其 VC Dimension 是 越靠后的作者就会基于越多的前人数据,这样不可避免地就会导致偷看数据,进而导致 bad generalization

要解决偷看数据,就必须遵循以下几个原则:

  • 尽量保证诚实,安全、隐秘地保存测试数据,
  • 如果实在无法避免偷看数据,那就要小心地筛选验证集和使用它,
  • 因此挑选模型时,不要根据数据的特点进行挑选、训练,而是保持 blind ,从线性模型一步步延伸下去,
  • 保持怀疑思维,无论任何人的结论、抑或是自己的模型运行结果,都要仔细地分析、思考。