在本文中,我们将讨论所有机器学习问题的通用工作流程。如果您是“应用”人工智能的新手,这篇文章可以为您提供分步清单,帮助您将第一个机器学习模型变为现实。如果您以前有更广泛地构建神经网络或更广泛的机器学习模型的经验,那么此博客将有助于确保您没有错过任何步骤;它还将概述您(希望如此!)已经熟悉的最佳实践流程,并为您提供有关如何改进模型的实用技巧。
构建机器学习模型的第一步是确定其目的。在开始构建模型之前,应该明确项目的目标——如果部署的模型符合您和您团队的目标,那么它将更有价值。在现阶段,应广泛讨论并商定以下几点:
这里不能夸大的一个明显点是,机器学习只能用于学习和预测训练数据中看到的模式——也就是说,模型只能识别它已经看到的内容。
构建机器学习模型的下一步是通过探索性数据分析过程动手探索数据。根据项目的目标,以及团队的规模、结构和成熟度,此步骤通常由数据科学家领导。此步骤的目标是让团队基本掌握数据集的特征、组件和分组。了解手头的数据后,您可以选择要构建的算法类型——最终选择取决于模型需要执行的任务类型以及手头数据集的特征。
选择的机器学习算法类型还取决于对核心数据和手头问题的理解程度。机器学习模型通常分为三个主要类别,每个类别都以不同的方式训练模型,因此需要不同类型的数据集。在模型构建之前有意识地了解这些差异是根本性的,并将对项目的结果产生重大影响。让我们看一下三种类型的机器学习算法,以及每种算法所需的数据类型。
这种方法需要数据科学家准备标记的数据集。该模型将从由输入数据和标记输出数据组成的训练数据中学习,并将着手学习输入和输出之间的关系,以便在输入新数据点时能够复制和预测这种关系。这就是为什么监督式机器学习模型通常用于预测结果和对新数据进行分类的原因。
与监督学习模型不同,无监督机器学习模型不需要标记数据集进行模型训练;训练数据集只需要输入变量。这种类型的机器学习模型从数据集中学习,用于识别数据集中的趋势、分组或模式;它主要用于对数据进行聚类和分类,以及确定数据集的管理原则。
强化机器学习是机器学习算法的第三种主要类型。强化学习与监督学习的不同之处在于,它既不需要标记的输入/输出对,也不需要对次优行为进行显式纠正。在这个过程中,学习是通过试错或反馈循环来完成的:每次成功执行操作时,都会释放奖励信号,系统通过犯错获得知识。强化学习算法的一个真实例子是无人驾驶汽车的开发——系统通过与环境交互来学习,以执行给定的任务,从以前的经验中学习,并进行改进。
机器学习模型需要大量高质量的训练数据才能健壮并能够做出准确的预测,因为模型将学习训练集中存在的输入数据和输出之间的联系,并在输入新数据点时尝试复制这些数据。
根据正在进行的机器学习训练类型,这些数据集将包含不同类型的数据。如前所述,监督式机器学习模型将在同时具有标记输入和标记输出变量的标记数据集上进行训练。此过程从注释器开始,通常完成手动准备和分类数据的劳动密集型过程。注释工具也开始构建,可以帮助您标记数据——为了加快流程和准确性,有必要为您的用例选择合适的注释工具。例如,如果您正在构建计算机视觉模型并需要标记图像和视频,那么 Encord 等平台具有帮助您进行数据标记的功能。优化此步骤不仅大大减少了完成数据准备过程所需的时间,而且还产生了更高质量的数据,这反过来又提高了模型的准确性及其性能,从而节省了您以后的时间——因此,在此步骤中进行投资非常重要,而刚起步的团队往往会忽略这一点。
相反,由于无监督机器学习模型不需要标记的输入数据,因此训练数据集将仅包含输入变量或特征。在这两种情况下,输入数据的质量都会显着影响模型的整体成功——因为模型是从数据中学习的,低质量的训练数据可能会导致模型在投入使用后无法达到预期的效果。为了标准化数据、识别任何缺失数据并找到任何异常值,应对数据进行验证和清理。
在准备数据集和构建模型之前,首先必须有一些指标来逐步衡量成功。您应该清楚如何衡量实现模型目标的进度,这应该成为您评估项目成功的后续步骤的指路明灯。最常用的评估方法有以下三种:
该方法涉及将数据的特定子集指定为测试数据,然后使用验证集调整模型的参数,使用数据的剩余部分训练模型,然后使用测试数据评估其性能。
在这种方法下,数据被分为三个部分以防止信息泄露。
这里,使用K折方法将数据分为K个相等大小的部分。该模型在每个分区 i 的剩余 K-1 个分区上进行训练,然后在该分区 i 上进行评估。
所有K个分数的平均值用于确定最终分数。当模型的性能与训练测试分割明显不同时,此方法特别有用。
当尝试在可用数据很少的情况下尽可能精确地评估模型时,此技术尤其重要。
这是通过在重新排列数据的同时重复执行 K 折验证,然后将数据划分为 K 个部分来完成的。每个 K 折验证周期结束时获得的平均分数构成最终分数。
由于需要训练和评估的模型数量是 I x K 倍,因此该策略的计算成本可能极其昂贵。 I 代表迭代,而 K 代表分区。
要构建机器学习模型,数据清理和预处理是关键,以便最大限度地减少过度拟合和偏差等常见挑战的影响。现实世界的数据是混乱的;非数字列、缺失值、离群数据点和不良特征只是执行此步骤时会遇到的数据错误的几个示例。
在开始预处理数据之前,您必须仔细检查并理解数据集;既可以在单个列级别(如果可行),也可以在聚合级别。让我们看看访问数据的几种方法以及如何预处理数据集。
机器学习算法理解数字,但不理解字符串,因此如果存在带有字符串的列,则应将它们转换为整数。可以使用标签编码和one-hot编码等方法将字符串转换为数字。但是,如果列中的每个点都是不同的字符串(例如,具有唯一名称的数据集)怎么办?在这种情况下,通常必须删除该列,因此仔细查看数据集非常重要。
由于多种原因,现实世界的数据集可能会存在缺失值。这些缺失值通常被识别为 NaN、空字符串,甚至空白单元格 (“”)。根据输入数据缺失的方式,可以采用以下技术处理缺失值:
在任何给定的数据集中,一些观察结果会偏离大多数其他观察结果,从而导致权重有利于它们。这些数据点被称为异常值,必须将它们删除以避免不必要的偏差。如果数据点是二维的,那么它们可以被可视化,并且对异常值进行阈值处理可能会起作用。然而,具有大量特征的数据集通常具有更高的维度,因此不容易可视化。因此,您必须依靠算法来检测这些异常值。让我们讨论两种常见的异常值检测算法:
Z 分数直观地告诉我们数据点与中间位置(大多数数据点所在的位置)的距离。如果数据是高斯分布的,这会很有帮助。如果不是,则应使用对数转换或 Bob Cox 转换(在倾斜列的情况下)对数据进行标准化。 z 分数异常值检测的局限性之一是它不能用于非参数数据。
聚类算法 DBSCAN 根据数据点的密度对数据点进行分组;异常值可以被识别为位于低密度区域的点。
特征对于在数据点和目标值之间建立联系至关重要。如果这些特征中的任何一个被损坏或独立于目标值,那么这些特征将不会对映射该关系有任何帮助,因此数据清理的一个重要部分是找出这些特征并将其从数据集中消除。
我们可以使用两种不同类型的算法来查找这些属性:单变量和多变量。
单变量算法的目标是确定每个特征与目标列之间的关系,独立于其他特征。仅当连接牢固时,才应保留该功能。
多元算法识别特征与特征之间的依赖关系,本质上是计算每个特征的分数并选择最佳的分数。
F检验、互信息检验等统计方法和算法都是单变量算法;递归特征选择是一种常用的多元特征选择。这里重要的是要记住,应根据您的数据集选择特征选择算法。 scikit-learn 的文章,例如 f 检验和互信息之间的比较,展示了这些算法之间的差异以及它们的 Python 实现。
准备好数据集后,下一个目标是创建一个基准模型,作为我们可以衡量更有效算法性能的基线。
根据用例以及团队的规模、成熟度和结构,此步骤通常由机器学习工程师来执行。对于用作基准的实验,它们必须是相似的、可测量的和可重复的。目前,可用的数据科学库随机分割数据集;这种随机性必须在所有运行中保持恒定。对模型进行基准测试可以让您了解数据集可能的预测能力。
在开发机器学习模型时,模型优化(即减少机器学习模型不可避免的不准确程度的过程)对于在现实环境中实现准确性至关重要。此步骤的目标是调整模型配置以提高精度和有效性。还可以改进模型以适应特定的目的、目的或用例。
机器学习算法中有两种不同类型的参数:第一类是在模型训练阶段学习的参数,第二类是超参数,其值用于控制学习过程。
在模型训练过程之后调试模型时可以分析训练过程中学到的参数。这将使您能够找到失败案例并在基准模型的基础上构建更好的模型。有些工具具有主动学习框架,可以提高模型可见性并允许您调试学习的参数。
在构建机器学习模型时选择正确的超参数也很关键 - 《机器学习中的超参数优化》一书是超参数优化的一本很好的指南,并提供了代码实现的教程。
在本博客中,我们讨论了构建机器学习模型的最重要部分。如果您是一位经验丰富的数据科学从业者,我希望这篇文章能够帮助您概述和可视化构建模型所需的步骤。如果您是初学者,请将此作为确保您的第一个机器学习项目成功的清单!