数据无处不在。此时此刻,成千上万的系统正在收集构成特定服务的历史记录、日志、用户交互数据,以及许多其他相关元素。仅在几十年前,大多数公司甚至无法有效地管理 1%的数据。出于这个原因,数据库会被定期清理,只有重要数据才能永久存储在服务器中。
而现如今,几乎每家公司都可以利用可扩展的云基础架构来应对不断增长的数据量。Apache Hadoop或Apache Spark等工具允许数据科学家和工程师实现大数据的复杂传输。在这一点上,所有的障碍都被扫除,大众化的进程已经到位。然而,这些大数据集合的真正价值又是什么呢?从商业角度看,信息只有在有助于做出正确决策、减少不确定性并提供更好的情境洞察时才有价值。这意味着,没有合适的工具和知识,一堆数据对于公司来说只会增加成本,需要限制以增加利润。
机器学习是计算机科学(特别是人工智能)的一个大分支,其目的是通过利用现有数据集来实现现实中描述性和预测性的模型。由于本书致力于实用的无监督解决方案,我们将只关注通过寻找隐藏原因和关系来描述此类情况的算法。虽然仅从理论角度出发,也有助于展示机器学习问题之间的主要差异,但是只有对目标有完全的认识(不局限于技术方面),才能对最初的问题产生理性回答。这就是我们需要机器学习的原因。
我们可以说人类非凡的认知能力启发了许多系统,但是当影响因素的数量显著增加时,人类就缺乏分析技能了。例如,如果你是第一次与班级学生见面的老师,在浏览整个小组后你能粗略地估计女生的百分比。通常,即便是对两个或更多人做出的估算,也可能是准确的或接近实际值的。然而,如果我们将全校所有人聚集在操场来重复这个实验,性别的区分就显得不那么明显了。这是因为所有学生在课堂上都是一目了然的,但是在操场里区分性别会受到某些因素的限制(例如较矮的人会被较高的人遮挡)。抛开这一层因素,我们可以认为大量的数据通常带有大量的信息。为了提取和分类信息,我们有必要采取自动化的方法。
在进入1.2.1节前,让我们讨论一下最初由高德纳(Gartner)定义的描述性分析(Descriptive Analysis)、诊断性分析(Diagnostic Analysis)、预测性分析(Predictive Analysis)和规范性分析(Prescriptive Analysis)的概念。但是,在这种情况下,我们希望关注正在分析的系统(例如通用情况),以便对其行为进行越来越多的控制。
描述性分析、诊断性分析、预测性分析和规范性分析的流程如图1-1所示。
图1-1 描述性分析、诊断性分析、预测性分析和规范性分析的流程
几乎所有的数据科学场景中要解决的第一个问题都是了解其本质。我们需要知道系统如何工作或数据集描述的内容是什么。如果没有这种分析,我们的知识又是有限的,将无法做出任何假设。例如我们可以通过图表观察一个城市几年的平均温度,但是如果我们无法描述发现现象的相关性、季节性、趋势性的时间序列,其他任何问题就不可能被解决。在具体情况下,如果没有发现对象组之间的相似性,就无法找到一种方法来总结它们的共同特征。数据科学家必须针对每个特定问题使用特定工具,但在此阶段结束时,所有可能(以及有用的)的问题将得到解答。
此外,这个过程具有明确的商业价值,让不同的利益相关者参与的目的是收集他们的知识并将其转化为共同语言。例如在处理医疗保健数据时,医生可能会谈论遗传因素,但就我们的目的而言,最好是某些样本之间存在相关性,因此我们并未完全将它们视为统计上的独立因素。一般而言,描述性分析的结果包含所有度量评估和结论的摘要,这些评估和结论是对某种情况进行限定和减少不确定性所必需的。在温度图表的例子中,数据科学家应该能够解答自动关联、峰值的周期、潜在异常值的数量以及趋势的出现等问题。
到目前为止,我们已经处理了输出数据,这是在特定的基础流程生成之后观察到的。系统描述的自然问题与很多因素有关。温度更多取决于气象和地理因素,这些因素既易于观测,又可以完全隐藏。时间序列中的季节性显然受一年中的周期影响,但所出现的异常值又该如何解释呢?
例如我们在一个处于冬季的地区发现了一个温度峰值,我们怎样才能证明它的合理性呢?在简单的方法中,我们可以将其视为可过滤掉的噪声异常值。但是,如果该值已经被观察到并且有存在价值(例如所有各方都认为这不是错误),我们应该假设存在隐藏(或潜在)原因。
这可能是令人惊讶的,但大多数复杂的场景都具有大量难以分析的潜在原因(有时称为因素)。总的来说,这不是一个糟糕的情况,但正如我们将要讨论的那样,将它们包含在模型中并通过数据集了解它们的影响是非常重要的。
另一方面,决定丢弃所有未知元素意味着降低模型的预测能力,并且会成比例地降低准确性。因此,诊断分析的主要目标不一定是找出所有因素,而是列出可观察和可测量的因素(也称为因子),以及所有的潜在因素(通常概括为单个全局因素)。
在某种程度上,因为我们可以轻松监控效果,诊断分析通常类似于逆向工程的过程,但要检测潜在原因与可观察效果之间存在的关系就较为困难。因此这种分析通常是概率性的,并且有助于找出某个确定的原因带来特定影响的概率。这样,排除非影响分量和确定最初排除的关系也更容易。然而,这个过程需要更深入的统计学知识,除了一些例子如高斯混合之外,这类分析将不会在本书中讨论。
如果收集了整体描述性知识并且对潜在原因的认识已令人满意,那么我们就可以创建预测模型了。创建预测模型的目的是根据模型本身的历史和结构来推断未来的结果。在许多情况下,我们将这个阶段与下一个阶段一起分析,因为我们很少对系统的自由演变感兴趣(例如温度将在下个月如何变化),而是对我们可以影响输出的方式感兴趣。
也就是说,我们只关注预测,考虑最重要的因素。第一个需要考虑的因素就是流程性质。我们不需要机器学习用于确定性过程,除非这些过程的复杂性太高以至于我们不得不将它们视为黑匣子。在本章将要讨论的大多数例子都是无法消除不确定性的随机过程。例如一天中的温度可以建模为条件概率(例如高斯),具体取决于前面的观测值。因此,预测不是将系统变为确定性系统,而是减少分布的方差,使概率只有在小的温度范围内,才会很高。另外,正如我们所知,许多潜在因素在幕后工作,该选择会对最终的准确定性产生极大的不利影响,因此不能接受基于尖峰分布的模型(例如基于概率为1的单一结果)。
如果模型被参数化,变量受学习过程影响(例如高斯的均值和协方差矩阵),那么我们的目标是在偏差-方差权衡中找出最佳平衡。由于本章只是概述,我们不用数学公式讲解概念,只需要一个定义即可(更多细节可以在Mastering machine Learning Algorithms一书中找到)。
定义统计预测模型的常用术语是估计量。估计量偏差受不正确的假设和学习过程可测量的影响。换句话说,如果一个过程的平均值是5.0,但我们的估计量平均值为3.0,那就可以说该模型是有偏差的。考虑到前面的例子,如果观测值和预测之间的误差不为零,则我们使用有偏估计。重要的是要理解并不是说每个估计都必须有一个零误差,而是在收集足够的样本并计算均值时,它的值应该非常接近零(只有无限样本才能为零)。当它大于零时,就意味着我们的模型无法正确预测训练值。很明显,我们正在寻找无偏估计量,这些估计量基本上可以产生准确的预测。
另一方面,估计量方差可以衡量不属于训练集的样本的鲁棒性。在本节开头,我们提到过程通常是随机的。这意味着任何数据集都必须被视为从特定数据生成过程pdata中提取的。如果我们有足够的代表性元素xi∈X,我们可以假设使用有限数据集X训练分类器会生成一个模型,该模型能够对从pdata中提取的所有潜在样本进行分类。
例如如果需要对仅限于肖像的面部分类器进行建模(不允许进一步的面部姿势),那么我们可以收集一些不同个体的肖像。建模过程需要关注的是不排除现实生活中可能存在的类别。假设我们有10000张不同年龄和性别的人物免冠照片,但没有任何戴帽子的肖像。当系统投入生产时,就会收到客户打来的电话,反映系统对许多图片进行了错误分类。经过分析,会发现发生错误分类的是戴帽子的人。显然,这个肖像模型对错误不负责,因为它用仅代表数据生成过程的一个区域的样本进行训练。因此,为了解决问题,我们要收集其他样本,并重复训练。但是,现在我们决定使用更复杂的模型,希望它能更好地运行。结果我们观察到更差的验证准确性(例如在训练阶段未使用子集的准确性)以及更高的训练精度。这里发生了什么?
当估计量学会完美地对训练集进行分类但是对未见过的样本分类能力较差时,我们可以说它是过拟合的,并且其方差对于特定任务来说太高(反之,一个欠拟合模型则具有较大的偏差,并且所有预测都非常不准确)。直观地讲,该模型对训练数据过于了解,已经失去了概括能力。为了更好地理解这个概念,让我们看一下高斯数据的生成过程,如图1-2所示。
图1-2 高斯数据的生成过程(实线)和样本数据的直方图
如果训练集没有以完全统一的方式,采样或者部分不平衡(某些类的样本比其他类少),或者模型过度拟合,则结果可能由不准确的分布表示,如图1-3所示。
图1-3 不准确的分布
在这种情况下,模型会被迫学习训练集的细节,直到它从分布中排除了许多潜在的样本。该结果不再是高斯分布,而是双峰分布,此时一些概率会偏低。当然,测试和验证集是从训练集未覆盖的小区域中采样的(因为训练数据和验证数据之间没有重叠),因此模型将在其任务中失败,从而提供完全错误的结果。
换句话说,模型已经学会了处理太多细节而导致方差太高,在合理的阈值范围内增加了不同分类的可能性范围。例如从肖像分类器可以了解到,戴蓝色眼镜的人是年龄范围在 30~40 岁的男性(这是不切实际的情况,因为细节水平通常非常低,但是对了解问题的本质是有帮助的)。
可以总结一下,一个好的预测模型必须具有非常低的偏差和适当低的方差。不幸的是,通常不可能有效地最小化这两个值,因此我们必须接受平衡。
具有良好泛化能力的系统可能具有较高的偏差,因为它无法捕获所有细节。相反,高方差允许非常小的偏差,但模型的能力几乎限于训练集。在本书中,我们不打算讨论分类器,但是你应该完全理解这些概念,以便理解在处理项目时可能遇到的不同行为。
这样做的主要目的是回答以下问题:如何影响系统的输出?为了避免混淆,最好将这个概念翻译成纯机器学习语言,因此问题可能是获得特定输出需要哪些输入值?
如1.2.3节所述,此阶段通常与预测性分析合并,因为模型通常用于这两个任务。但是,在某些特定情况下,预测仅限于空输入演变(例如在温度示例中),并且必须在规定阶段分析更复杂的模型。主要在于控制影响特定输出的所有因素。
有时,当没有必要时,我们就只做表面分析。当原因不可控时(例如气象事件),或者当包含全局潜在参数集更简单时,就会发生这种情况。后一种选择在机器学习中非常普遍,并且已经开发了许多算法,在已存在潜在因素(例如EM或SVD推荐系统)的情况下仍能够高效工作。出于这个原因,我们并没有关注这一特定方面(这在系统理论中非常重要),同时,我们隐含地假设模型有研究不同输入产生许多可能输出的能力。
例如在深度学习中,我们可以创建反向模型来生成输入空间的显著映射,从而强制产生特定的输出类。以肖像分类器为例,我们可能有兴趣发现哪些视觉因素会影响类的输出。诊断性分析通常对此是无效的,因为原因非常复杂并且其水平太低(例如轮廓的形状)。因此,反向模型可以通过显示不同几何区域的影响来帮助解决规范性问题。然而,完整的规范性分析超出了本书的范围,在许多情况下,也没有必要使用规范性分析,因此不会在后续章节中考虑这样的步骤。现在让我们来分析不同类型的机器学习算法。
本文摘自《Python无监督学习》