本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
选择算法
机器学习可以帮助你完成需要某种归纳推理的经验任务。此任务涉及归纳,因为它使用数据来训练算法以做出可概括的推论。这意味着算法可以做出统计学上可靠的预测或决策,或者在应用于未用于训练它们的新数据时完成其他任务。
为了帮助您为您的任务选择最佳算法,我们将这些任务按不同的抽象级别进行分类。在最高级别的抽象层面,机器学习试图找到特征或结构化程度较低的项目(例如数据集中的文本)之间的模式或关系。模式识别技术可以分为不同的机器学习范例,每种范例都解决特定的问题类型。目前,机器学习有三种基本范例用于解决各种问题类型:
每个学习范式可以解决的问题类型是通过考虑你想要从你已经或可能收集的数据类型中得出的推论(或预测、决策或其他任务)来确定的。机器学习范例使用算法方法来解决其各种问题类型。这些算法提供了解决这些问题的秘诀。
但是,许多算法,例如神经网络,可以使用不同的学习范式和不同类型的问题进行部署。多种算法也可以解决特定的问题类型。有些算法更普遍适用,而另一些算法则对某些类型的目标和数据非常具体。因此,机器学习算法和问题类型之间的映射是 many-to-many. 此外,还有多种实现选项可用于算法。
以下各节提供有关实现选项、机器学习范例和适用于不同问题类型的算法的指导。
选择算法实现
选择算法后,必须决定要使用哪种算法实现。亚马逊 SageMaker 支持三个需要加大工作量的实施选项。
-
预先训练的模型只需最少的精力,模型是否已准备好部署,或者使用以下方法进行微调和部署 SageMaker JumpStart.
-
内置算法如果数据集很大,并且需要大量资源来训练和部署模型,则需要更多的精力和规模。
-
如果没有可行的内置解决方案,请尝试开发一个使用用于机器和深度学习框架的预制图像对于支持的框架,例如 Scikit-Learn, TensorFlow, PyTorch、MXNet 或 Chainer。
-
如果你需要运行自定义软件包或使用任何不属于支持的框架的代码,或者可以通过以下方式获得 PyPi,那么你需要建造您自己的 Docker 镜像配置为安装必要的软件包或软件。自定义镜像还必须推送到在线存储库,例如亚马逊弹性容器注册表。
算法实施指南 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
实现 | 需要代码 | 预编码算法 | Support 第三方软件包 | Support 自定义代码 | 努力程度 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
内置 | 否 | 是 | 否 | 否 | 低 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Scikit-learn | 是 | 是 | PyPi 仅限 | 是 | 中 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Spark ML | 是 | 是 | PyPi 仅限 | 是 | 中 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
xgBoost(开源) | 是 | 是 | PyPi 仅限 | 是 | 中 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TensorFlow | 是 | 否 | PyPi 仅限 | 是 | 中高 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PyTorch | 是 | 否 | PyPi 仅限 | 是 | 中高 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MXNet | 是 | 否 | PyPi 仅限 | 是 | 中高 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Chainer | 是 | 否 | PyPi 仅限 | 是 | 中高 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
自定义映像 | 是 | 否 | 是的,来自任意来源 | 是 | 高 |
使用内置算法
在为您的问题和数据类型选择算法时,最简单的选择是使用亚马逊之一 SageMaker的内置算法。这些内置算法有两个主要优点。
-
内置算法无需编码即可开始运行实验。您需要提供的唯一输入是数据、超参数和计算资源。这使您可以更快地运行实验,减少跟踪结果和代码更改的开销。
-
内置算法具有跨多个计算实例的并行化功能,并且对所有适用算法开箱即用的 GPU 支持(由于固有的限制,某些算法可能不包括在内)。如果您有大量数据可用于训练模型,则大多数内置算法可以轻松扩展以满足需求。即使你已经有了预先训练的模型,使用它的必然结果可能还是更容易的 SageMaker 然后在支持的框架上使用脚本模式输入你已经知道的超参数,然后将其移植过来。
有关内置算法的更多信息 SageMaker请参阅使用 Amazon SageMaker 内置算法或预训练模型.
有关 docker 注册表路径、数据格式、推荐的 EC2 实例类型以及 CloudWatch 提供的所有内置算法的通用日志 SageMaker请参阅有关内置算法的常见信息.
在支持的框架中使用脚本模式
如果您要用于模型的算法不受内置选项的支持,并且您愿意编写自己的解决方案,那么您应该考虑使用亚马逊 SageMaker支持的框架。这被称为 “脚本模式”,因为您在文本文件中写入自定义代码(脚本)时使用.py
延期。如上表所示, SageMaker 支持大多数常用的机器学习框架。这些框架预先加载了相应的框架和一些额外的 Python 包,例如 Pandas 和 NumPy,因此您可以编写您自己的代码来训练算法。这些框架还允许你安装托管在上的任何 Python 包 PyPi 通过在训练代码中添加一个 requirements.txt 文件或添加你自己的代码目录。R 还原生支持 SageMaker 笔记本内核。有些框架,例如 scikit-learn 和 Spark ML,有可以轻松使用的预编码算法,而其他框架则如 TensorFlow 和 PyTorch可能需要你自己实现算法。使用支持的框架映像时的唯一限制是您无法导入任何未托管的软件包 PyPi 或者尚未包含在框架图像中的内容。
有关支持的框架的更多信息 SageMaker请参阅在亚马逊上使用Machine Learning 框架、Python 和 R SageMaker.
使用自定义 Docker 镜像
亚马逊 SageMaker的内置算法和支持的框架应该涵盖大多数用例,但有时你可能需要使用任何支持的框架中都不包含的软件包中的算法。您可能还会选择预先训练好的模型或将其保存在需要部署的某个地方。 SageMaker 使用 Docker 镜像托管所有模型的训练和服务,因此,如果您需要的软件包或软件未包含在支持的框架中,则可以提供自己的自定义 Docker 镜像。这可能是你自己的 Python 包,也可以是用 Stan 或 Julia 之类的语言编码的算法。对于这些图像,您还必须在 Dockerfile 中正确配置算法的训练和模型的服务。这需要对 Docker 有中等的了解,除非你熟悉编写自己的机器学习算法,否则不建议这样做。必须先将您的 Docker 镜像上传到在线存储库,例如亚马逊弹性容器注册表 (ECR),然后才能正确训练和提供模型。
有关自定义 Docker 镜像的更多信息,请访问 SageMaker请参阅将 Docker 容器与 SageMaker.
基本机器学习范例的问题类型
以下三节描述了机器学习的三个基本范例所解决的主要问题类型。有关内置算法的列表 SageMaker 提供解决这些问题类型的信息,请参阅使用 Amazon SageMaker 内置算法或预训练模型.
监督学习
如果您的数据集由包含目标值(输出)的要素或属性(输入)组成,则说明您遇到了监督学习问题。如果你的目标值是分类值(数学上是离散的),那么你有一个分类问题. 区分二进制和多类分类是一种标准做法。
-
二进制分类是一种监督式学习,它根据个人的属性将个人分配到两个预定义且相互排斥的类别之一。之所以受到监督,是因为模型是使用示例训练的,在这些示例中,为属性提供了正确标记的对象。基于诊断测试的结果对个人是否患有疾病的医学诊断是二元分类的一个示例。
-
多类别分类是一种监督式学习,它根据个人的属性将个人分配到多个课程中的一个。之所以受到监督,是因为模型是使用示例训练的,在这些示例中,为属性提供了正确标记的对象。一个例子是预测与文本文档最相关的主题。文档可以归类为与宗教、政治或金融有关的文档,也可以归类为其他几个预定义的主题类别之一。
如果你要预测的目标值在数学上是连续的,那么你有一个回归问题。回归根据一个或多个与其相关的其他变量或属性来估计因果目标变量的值。例如,使用浴室和卧室的数量以及房屋和花园的平方英尺等特征预测房价。回归分析可以创建一个模型,该模型将其中一个或多个特征作为输入并预测房屋价格。
有关提供的内置监督学习算法的更多信息 SageMaker请参阅监督学习.
无监督学习
如果您的数据集由不包含标签或目标值(输出)的要素或属性(输入)组成,则存在无监督学习问题。在这种类型的问题中,必须根据在输入数据中发现的模式预测输出。无监督学习问题的目标是发现数据中的分组等模式。无监督学习可以应用于各种各样的任务或问题类型。主成分分析和聚类分析是通常用于预处理数据的两种主要方法。以下是可通过无监督学习解决的问题类型的简短列表:
-
维度减小通常是数据探索步骤的一部分,该步骤用于确定用于模型构造的最相关的特征。其想法是将数据从高维、人口稀少的空间转换为保留原始数据最重要属性的低维空间。这缓解了维度诅咒,这种诅咒可能因人口稀少、高维数据而导致统计分析出现问题。它还可以用来帮助理解数据,将高维数据简化为可以可视化的较低维度。
-
聚类分析是一类用于将物体或案例分为几组的技术,称为集群。它尝试在数据中寻找离散组,其中一个组的成员尽可能彼此相似,而与其他组的成员尽可能互不相同。您可以定义希望算法用来确定相似度的要素或属性,选择距离函数来测量相似度,并指定要在分析中使用的聚类数量。
-
异常检测是指识别数据集中的稀有物品、事件或观测结果,这些物品由于与其他数据有显著差异而引起怀疑。例如,识别异常物品可用于检测银行欺诈或医疗错误。异常也被称为异常值、新颖性、噪声、偏差和异常。
-
密度估计是根据观测数据构造不可观测的基础概率密度函数的估计值。密度估计值的自然用途是用于数据探索。密度估计值可以发现数据中的偏度和多模态等特征。密度估计的最基本形式是重新缩放的直方图。
SageMaker 提供了多种内置的机器学习算法,可用于这些无监督学习任务。有关提供的内置无监督算法的更多信息 SageMaker请参阅无监督学习.
强化学习
强化学习是一种基于与环境互动的学习。这种类型的学习由必须通过以下方式学习行为的代理人使用 trial-and-error 与动态环境的互动,其目标是最大限度地提高代理人因其行为而获得的长期回报。通过权衡探索奖励不确定的行为和利用已知奖励的行为,可以最大限度地提高奖励。
有关更多信息 SageMaker的强化学习框架、工具包和环境,请参阅在亚马逊上使用强化学习 SageMaker.