Machine Learning
1. 泛化
- 蓝点代表生病的树
- 橙点代表健康的树
接下来,我们来看看图 1
您能设想出一个有效的模型来预测以后的生病或健康的树吗?花点时间在脑海里绘制一条弧线将蓝点与橙点分开,或者在脑海中圈住一些橙点或蓝点。然后再看看图 2,它显示某种机器学习模型如何将生病的树与健康的树区分开。请注意,该模型产生的损失非常低。
乍一看,图 2 所示的模型在将健康的树与生病的树区分开方面似乎表现得非常出色。真的是这样吗?
####损失很低,但仍然是糟糕的模型?
图 3 显示我们向该模型中添加了新数据后所发生的情况。结果表明,该模型在处理新数据方面表现非常糟糕。请注意,该模型对大部分新数据的分类都不正确
图 2 和图 3 所示的模型过拟合了训练数据的特性。过拟合模型在训练过程中产生的损失很低,但在预测新数据方面的表现却非常糟糕。如果某个模型在拟合当前样本方面表现良好,那么我们如何相信该模型会对新数据做出良好的预测呢?过拟合是由于模型的复杂程度超出所需程度而造成的。机器学习的基本冲突是适当拟合我们的数据,但也要尽可能简单地拟合数据
。
机器学习的目标是对从真实概率分布(已隐藏)中抽取的新数据做出良好预测。遗憾的是,模型无法查看整体情况;模型只能从训练数据集中取样。如果某个模型在拟合当前样本方面表现良好,那么您如何相信该模型也会对从未见过的样本做出良好预测呢?
奥卡姆的威廉是 14 世纪一位崇尚简单的修士和哲学家。他认为科学家应该优先采用更简单(而非更复杂)的公式或理论。奥卡姆剃刀定律在机器学习方面的运用如下:
机器学习模型越简单,良好的实证结果就越有可能不仅仅基于样本的特性。
现今,我们已将奥卡姆剃刀定律正式应用于统计学习理论
和计算学习理论领域
。这些领域已经形成了泛化边界,即统计化描述模型根据以下因素泛化到新数据的能力:
模型的复杂程度
模型在处理训练数据方面的表现
虽然理论分析在理想化假设下可提供正式保证,但在实践中却很难应用。机器学习速成课程则侧重于实证评估,以评判模型泛化到新数据的能力。
机器学习模型旨在根据以前未见过的新数据做出良好预测。但是,如果您要根据数据集构建模型,如何获得以前未见过的数据呢?一种方法是将您的数据集分成两个子集:
训练集 - 用于训练模型的子集
测试集 - 用于测试模型的子集
####机器学习细则:
以下三项基本假设阐明了泛化:
我们从分布中随机抽取独立同分布 (i.i.d) 的样本。换言之,样本之间不会互相影响。(另一种解释:i.i.d. 是表示变量随机性的一种方式)
分布是平稳的;即分布在数据集内不会发生变化
我们从同一分布的数据划分中抽取样本
在实践中,我们有时会违背这些假设。例如:
- 想象有一个选择要展示的广告的模型。如果该模型在某种程度上根据用户以前看过的广告选择广告,则会违背 i.i.d. 假设。
- 想象有一个包含一年零售信息的数据集。用户的购买行为会出现季节性变化,这会违反平稳性。
如果违背了上述三项基本假设中的任何一项,那么我们就必须密切注意指标。
####总结:
如果某个模型尝试紧密拟合训练数据,但却不能很好地泛化到新数据,就会发生过拟合
如果不符合监督式机器学习的关键假设,那么我们将失去对新数据进行预测这项能力的重要理论保证
2. 表示 (Representation):特征工程
传统编程的关注点是代码。在机器学习项目中,关注点变成了表示。也就是说,开发者通过添加和改善特征来调整模型
####将原始数据映射到特征
图 左侧表示来自输入数据源的原始数据,右侧表示特征矢量,也就是组成数据集中样本的浮点值集。 特征工程指的是将原始数据转换为特征矢量
。进行特征工程预计需要大量时间。
机器学习模型通常期望样本表示为实数矢量。这种矢量的构建方法如下:为每个字段衍生特征,然后将它们全部连接到一起。
####映射数值
机器学习模型根据浮点值进行训练,因此整数和浮点原始数据不需要特殊编码。如图 所示,将原始整数值 6 转换为特征值 6.0 是没有意义的:
映射字符串值
模型无法通过字符串值学习规律,因此您需要进行一些特征工程来将这些值转换为数字形式
- 首先为您要表示的所有特征的字符串值定义一个词汇表。对于 street_name 特征,该词汇表中将包含您知道的所有街道。
- 然后使用该词汇表创建一个
独热编码
,用于将指定字符串值表示为二元矢量
。在该矢量(与指定的字符串值对应)中:- 只有一个元素设为 1
- 其他所有元素均设为 0
- 该矢量的长度等于词汇表中的元素数。
下图 显示了某条特定街道 (Shorebird Way) 的独热编码。在此二元矢量中,代表 Shorebird Way 的元素的值为 1,而代表所有其他街道的元素的值为 0。