

我们不再更新 Amazon Machine Learning 服务，也不再接受新用户使用该服务。本文档可供现有用户使用，但我们不会再对其进行更新。有关更多信息，请参阅[什么是 Amazon Machine Learning](https://docs.aws.amazon.com/machine-learning/latest/dg/what-is-amazon-machine-learning.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 训练参数
<a name="training-parameters"></a>

 通常，机器学习算法接受可用于控制训练过程的特定属性和所生成的 ML 模型的特定属性的参数。在 Amazon Machine Learning 中，这些参数被称为*训练参数*。您可以使用 Amazon ML 控制台、API 或命令行界面 (CLI) 设置这些参数。如果您没有设置任何参数，Amazon ML 将使用已知非常适用于许多机器学习任务的默认值。

 您可以指定以下训练参数的值：
+  最大模型大小 
+  训练数据的最大扫描次数 
+  类型随机排序
+  正则化类型 
+  正则化数量 

 在 Amazon ML 控制台中，训练参数使用默认设置。默认设置足以处理大多数 ML 问题，但您可以选择其他值来优化性能。系统已根据您的数据为您配置了一些其他训练参数（例如学习速率）。

 以下部分提供了有关训练参数的更多信息。

## 最大模型大小
<a name="maximum-model-size"></a>

 最大模型大小是 Amazon ML 在 ML 模型训练期间创建的模式的总大小（以字节为单位）。

 默认情况下，Amazon ML 会创建一个 100MB 模型。您可以通过指定不同的大小指示 Amazon ML 创建一个更小或更大的模型。有关可用大小范围的信息，请参阅[ML 模型的类型](types-of-ml-models.md) 

 如果 Amazon ML 无法找到足够的模式来填充模型大小，则会创建一个较小的模型。例如，如果您指定的最大模型大小为 100MB，但 Amazon ML 找到的模式总大小只有 50MB，生成的模型将为 50MB。如果 Amazon ML 找到的模式多于将填充的指定大小，它将通过修剪对学习模型的质量影响最小的模式来强制实施最大值截断。

 通过选择模型大小，您可以控制模型的预测质量与使用成本之间的平衡。较小模型可能会导致 Amazon ML 为了满足最大大小限制而删除许多模式，从而影响预测质量。另一方面，较大模型在查询实时预测时需要花费更多成本。

**注意**  
 如果您使用 ML 模型生成实时预测，将可能会产生少量容量预留费用，具体费用取决于该模型的大小。有关更多信息，请参阅 [Amazon ML 的定价](pricing.md)。

 较大的输入数据集不一定会生成较大的模型，因为模型用于存储模式，而不是输入数据；如果模式少并且简单，生成的模型也小。如果输入数据包含大量原始属性（输入列）或派生特征（Amazon ML 数据转换的输出），则系统在训练过程中可能会发现和存储更多模式。最好通过几个实验来选择适用于您的数据和问题的正确模型大小。Amazon ML 模型训练日志（您可以从控制台或通过 API 下载）包含有关在训练过程中进行了多少模型修剪（如果有）的消息，允许您估计潜在的 hit-to-prediction质量。

## 数据的最大扫描次数
<a name="maximum-number-of-passes-over-the-data"></a>

 为了获得最佳结果，Amazon ML 可能需要多次扫描数据进行训练来发现模式。默认情况下，Amazon ML 的扫描次数为 10 次，但您可以通过设置该数字更改默认值，最多为 100 次。Amazon ML 会在扫描数据时跟踪模式（模型收敛）的质量，并在无法发现更多数据点或模式时自动停止训练。例如，如果您将扫描次数设置为 20，但 Amazon ML 发现第 15 次扫描结束后找不到任何新模式，则将在第 15 次扫描后停止训练。

 一般来说，仅包含少量观察数据的数据集通常需要更多的数据扫描次数，才能获得较高的模型质量。较大数据集通常包含很多类似的数据点，因而无需扫描很多次。选择更多数据扫描次数将带来两方面的影响：模型训练时间较长，花费的成本更多。

## 将训练数据的类型随机排序
<a name="data-shuffling-types"></a>

在 Amazon ML 中，您必须将训练数据随机排序。随机排序会打乱数据的顺序，这样 SGD 算法就不会在太多连续观察中遇到同一种类型的数据。例如，如果您要训练 ML 模型来预测产品类型，您的训练数据包含电影、玩具和视频游戏等产品类型，如果您在上传数据之前已按产品类型列对数据进行排序，该算法会按产品类型的字母顺序查看数据。该算法将先查看所有电影数据，然后您的 ML 模型开始学习电影的模式。随后在模型遇到玩具数据时，该算法的每个更新都会向玩具产品类型拟合模型，即使这些更新会让拟合电影的模式降级也是如此。这种从电影到玩具类型的突然转变，可能会生成不了解如何准确预测产品类型的模型。

您必须将训练数据随机排序，即使您在将输入数据源拆分为训练和评估部分时选择了随机拆分选项也应如此。随机拆分策略将为每个数据源选择随机数据子集，但它不会更改数据源中行的顺序。有关拆分数据的更多信息，请参阅[拆分数据](splitting-types.md)。

使用控制台创建 ML 模型时，Amazon ML 默认使用伪随机乱序方法来随机排列数据。无论请求扫描多少次，Amazon ML 在训练 ML 模型之前只会对数据进行一次随机排序。如果您在将数据提供给 Amazon ML 之前对数据进行了随机排序，并且不希望 Amazon ML 对您的数据重新随机排序，则可将**随机类型**设置为 `none`。例如，如果您将 .csv 文件中的记录进行随机排序后再将其上传到 Amazon S3 中，通过 Amazon RDS 创建数据源时在 MySQL SQL 查询中使用了 `rand()` 函数，或通过 Amazon Redshift 创建数据源时在 Amazon Redshift SQL 查询中使用了 `random()` 函数，将**随机类型**设置为 `none` 不会影响 ML 模型的预测准确性。只对数据进行一次随机排序可减少运行时间和创建 ML 模型的成本。

**重要**  
使用 Amazon ML API 创建 ML 模型时，Amazon ML 在默认情况下不会对您的数据随机排序。如果您使用 API 而不是控制台创建 ML 模型，我们强烈建议您通过将 `sgd.shuffleType` 参数设置为 `auto` 来对数据随机排序。

## 正则化类型和数量
<a name="regularization-type-and-amount"></a>

复杂 ML 模型（包含许多输入属性）的预测性能在数据包含太多模式时会受到影响。随着模式的数量增加，模型学到并非预期数据项目的可能性也会增加，而不是学习真正的数据模式。在这种情况下，模型在训练数据上表现非常出色，但不能对新数据实现很好的泛化。这种现象被称为*过度拟合* 训练数据。

 正则化有助于防止线性模型通过惩罚极端权重值来过度拟合训练数据示例。L1 正则化会将本来权重极小的特征的权重推向零，从而减少模型中使用的特征数。L1 正则化会生成稀疏模型并降低模型中的噪音数量。L2 正则化会生成较小的总体权重值，可在特征的相关性高的情况下稳定权重。您可以使用 `Regularization amount` 参数控制 L1 或 L2 正则化的数量。指定极大的 `Regularization amount` 值会导致所有特征的权重值为零。

 选择和优化最佳正则化值是机器学习研究中的一个活跃主题。您可能会受益于选择中等数量的 L2 正则化，这是 Amazon ML 控制台的默认设置。高级用户可以在三种类型的正则化（无、L1 或 L2）和数量之间选择。有关正则化的更多信息，请转到[正则化（数学运算）](http://en.wikipedia.org/wiki/Regularization_(mathematics))。

## 训练参数：类型和默认值
<a name="training-parameters-types-and-default-values"></a>

 下表列出了 Amazon ML 训练参数及每个参数的默认值和允许范围。


| **训练参数** | **Type** | **默认值** | **描述** | 
| --- | --- | --- | --- | 
| 最大 MLModel SizeInBytes | 整数 | 100,000,000 字节 (100 MiB) |  允许的范围：100,000 (100 KiB) 到 2,147,483,648 (2 GiB) 根据输入数据，模型大小可能会影响性能。  | 
| sgd.maxPasses | 整数 | 10 | 允许的范围：1-100 | 
| sgd.shuffleType | 字符串 | 自动 | 允许的值：`auto` 或 `none` | 
| sgd.l1 RegularizationAmount | 双精度 | 0（默认不使用 L1） |  允许的范围：0 到 MAX\$1DOUBLE 已发现介于 1E-4 到 1E-8 之间的 L1 值可以生成好结果。较大的值生成的模型可能并不是很有用。 您不能同时设置 L1 和 L2。必须从中选择一项。  | 
| sgd.l2 RegularizationAmount | 双精度 | 1E-6（默认情况下，L2 与此正则化数量配合使用） |  允许的范围：0 到 MAX\$1DOUBLE 已发现介于 1E-2 到 1E-6 之间的 L2 值可以生成好结果。较大的值生成的模型可能并不是很有用。 您不能同时设置 L1 和 L2。必须从中选择一项。  | 