

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

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

# 评估 ML 模型
<a name="evaluating_models"></a>

您应该始终*评估模型*，以确定该模型能够针对新数据和未来数据出色地预测目标。由于未来实例具有未知的目标值，您需要针对已知目标答案的数据检查 ML 模型的准确性指标，并将这项评估作为未来数据的预测准确性的代理。

要正确评估模型，您需要留存来自训练数据源并已用目标（基本实际情况）进行标记的数据示例。使用已用于训练的相同数据评估 ML 模型的预测准确性并没有用，因为它会奖励可以“记住”训练数据的模型，而不是通过它进行归纳。完成 ML 模型的训练之后，即可向模型发送已知目标值的留存观察。然后，您可以将 ML 模型返回的预测结果与已知目标值进行比较。最后，计算汇总指标，您可以通过该指标了解预测值和实际值的一致程度。

在 Amazon ML 中，您可以通过*创建评估*来评估 ML 模型。要为 ML 模型创建评估，您需要一个待评估的 ML 模型，还需要未用于训练的已标记数据。首先，创建一个用于评估的数据源，具体方法是使用留存数据创建 Amazon ML 数据源。评估所用数据必须与训练所用数据具有相同的架构，并且包含目标变量的实际值。

如果您的所有数据都位于单个文件或目录中，您可以使用 Amazon ML 控制台来拆分数据。“Create ML Model”向导的默认路径会拆分输入数据源，并将前 70% 的数据用于训练数据源，将剩余 30% 的数据用于评估数据源。您也可以使用“创建 ML 模型”向导中的**自定义**选项来自定义拆分比率，您可以在向导中选择 70% 的随机样本用于训练，剩余 30% 的数据用于评估。要进一步指定自定义拆分比率，请使用[创建数据源](https://docs.aws.amazon.com/machine-learning/latest/APIReference/API_CreateDataSourceFromS3.html) API 中的数据重新排列字符串。有了评估数据源和 ML 模型之后，就可以创建评估并审查评估的结果。

**Topics**
+ [ML 模型洞察](ml-model-insights.md)
+ [二进制模型洞察](binary-model-insights.md)
+ [多类别模型洞察](multiclass-model-insights.md)
+ [回归模型洞察](regression-model-insights.md)
+ [防止过度拟合](#overfitting)
+ [交叉验证](cross-validation.md)
+ [评估警报](evaluation-alerts.md)

# ML 模型洞察
<a name="ml-model-insights"></a>

评估 ML 模型时，Amazon ML 提供了行业标准的指标以及一系列洞察，可用于检查模型的预测准确度。在 Amazon ML 中，评估结果包含以下内容：
+ 预测准确度指标，报告模型的整体成功情况
+ 可视化，用于帮助在预测准确度指标之外，探索模型的准确度
+ 检查设置分数阈值影响的能力 (仅适用于二进制分类)
+ 针对检查评估有效性标准的提醒

指标和可视化的选择取决于所评估的 ML 模型的类型。务必查看这些可视化内容以确定您的模型表现是否足够好，是否符合您的业务需求。

# 二进制模型洞察
<a name="binary-model-insights"></a>

## 解释预测
<a name="interpreting-the-predictions"></a>

许多二进制分类算法的实际输出是预测*分数*。该分数指示给定观察属于正类的系统确定性（实际目标值为 1）。Amazon ML 中的二进制分类模型输出一个介于 0 和 1 之间的分数。作为此分数的使用者，为了决定观察应分类为 1 还是 0，需要选取分类阈值或者选取*截断值*，并与分数进行对比，以此来解释分数。当目标等于 1 时，将预测其分数高于截断值的任何观察；当目标等于 0 时，将预测其分数低于截断值的观察。

在 Amazon ML 中，默认的分数截断值为 0.5。您可以选择更新此截断值以满足您的业务需求。您可以在控制台中使用可视化内容来了解截断值的选择将对您的应用程序造成怎样的影响。

### 衡量 ML 模型准确度
<a name="measuring-ml-model-accuracy"></a>

Amazon ML 为二进制分类模型提供行业标准的准确度指标，称为（受试者操作特征）曲线下面积 (AUC)。AUC 衡量模型为正面示例预测出相比负面示例更高分数的能力。由于它独立于分数截断值，因此您可以从 AUC 指标感受到模型的预测准确度，无需选取阈值。

AUC 指标返回从 0 到 1 的数值。接近 1 的 AUC 值指示高度准确的 ML 模型。接近 0.5 的值指示 ML 模型比随便猜测好不了多少。值接近 0 的情况很少见，这通常表示数据有问题。基本上，接近 0 的 AUC 表示 ML 模型已学习了正确的模式，但使用它们来预测会得到与实际颠倒的结果（将“0”预测为“1”或者将“1”预测为“0”）。有关 AUC 的更多信息，请转到 Wikipedia 上的[受试者操作特征](http://en.wikipedia.org/wiki/Receiver_operating_characteristic)页面。

二进制模型的基线 AUC 指标为 0.5。这是随机预测 1 或 0 答案的假想 ML 模型的值。您的二进制 ML 模型要想有价值，表现得应该比此值要好才行。

### 使用性能可视化
<a name="using-the-performance-visualization"></a>

要探究 ML 模型的准确度，您可以查看 Amazon ML 控制台的**评估**页面上的图表。此页显示两个直方图：a) 实际正例分数的直方图（目标为 1）以及 b) 实际负例分数的直方图（目标为 0）。

具有良好预测准确度的 ML 模型对于实际的 1 将预测较高的分数，对实际的 0 将预测较低的分数。完美的模型将在 x 轴两端具有两个直方图，实际正例全部得到高分，实际负例全部得到低分。但是，ML 模型会出错，一般的图表会显示两个直方图在某些分数重叠。性能极差的模型会无法区分正类和负类，这两个类的直方图重叠最多。

![\[image49\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image48b.png)


利用可视化内容可以确定属于两种正确预测类型的预测数以及属于两种不正确预测类型的预测数。

 **正确预测** 
+ 真正 (TP)：Amazon ML 预测的值为 1，真正的值为 1。
+ 真负 (TN)：Amazon ML 预测的值为 0，真正的值为 0。

 **错误预测** 
+ 假正 (FP)：Amazon ML 预测的值为 1，但真正的值为 0。
+ 假负 (FN)：Amazon ML 预测的值为 0，但真正的值为 1。

**注意**  
TP、TN、FP 和 FN 的数量取决于所选分数阈值，对这些类型中的任意一种进行优化都意味着需要对其他类型作出让步。较高的数量 TPs 通常会导致较高的数量 FPs 和较低的数量 TNs。

### 调整分数截断值
<a name="adjusting-the-score-cut-off"></a>

ML 模型的工作方式是生成数字预测分数，然后应用截断值将这些分数转换为二进制 0/1 标签。通过更改分数截断值，您可以在模型出错时调整其行为。在 Amazon ML 控制台的**评估**页面上，您可以查看不同分数截断值的影响，并可以保存希望用于模型的分数截断值。

在您调整分数截断值阈值时，请观察两种错误类型之间的平衡。将截断值向左侧移动将会获得更多“真正”数，但同时“假正”数也会增加。将其向右侧移动将获得较少的“假正”错误数，但同时也会失去一些“真正”数。对于您的预测应用程序，您需要通过选择合适的截断值分数来确定更能容忍哪种类型的错误。

### 查看高级指标
<a name="reviewing-advanced-metrics"></a>

Amazon ML 提供以下额外指标来测量 ML 模型的预测准确度：准确度、精度、召回率和假正率。

#### 准确度
<a name="accuracy"></a>

*准确度* (ACC) 衡量正确预测的比率。范围为 0 至 1。值越大说明预测准确度越高：

![\[image50\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image49.png)


#### 精度
<a name="precision"></a>

*精度*衡量实际正例与预测为正例的比率。范围为 0 至 1。值越大说明预测准确度越高：

![\[image51\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image50.png)


#### 召回率
<a name="recall"></a>

*召回率*衡量预测为正例的实际正例的比率。范围为 0 至 1。值越大说明预测准确度越高：

![\[image52\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image51.png)


#### 假正率
<a name="false-positive-rate"></a>

*假正率* (FPR) 衡量错误警报率或预测为正例的实际负例的比率。范围为 0 至 1。值越小说明预测准确度越高：

![\[image53\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image52.png)


根据您的业务问题，您可能会对在这些指标的特定部分中表现良好的模型更感兴趣。例如，两个业务应用程序可能对其 ML 模型有着迥然不同的要求：
+ 一个应用程序可能需要严格保证正面预测实际为正面（高精度），并能够承受将一些正面示例错误分类为负面示例（中等召回率）。
+ 另一个应用程序可能需要尽可能多地正确预测正面示例（高召回率），并可以接受将一些负面示例错误分类为正面示例（中等精度）。

Amazon ML 允许您选择与之前任意高级指标的特定值相对应的分数截断值。它还显示由于优化任意一项指标而导致作出的让步。例如，如果您选择一个与高精度对应的截断值，则通常不得不接受较低的召回率。

**注意**  
您必须为其保存分数截断值，这样才能用于分类 ML 模型未来的任何预测。

# 多类别模型洞察
<a name="multiclass-model-insights"></a>

## *解释预测*
<a name="id1"></a>

多类别分类算法的实际输出是一组预测*分数*。这些分数指示模型的给定观察属于各个类别的确定性。与二进制分类问题不同，您不需要选择分数截断值以进行预测。预测的答案是预测分数最高的类别（例如，label）。

### 衡量 ML 模型准确度
<a name="id2"></a>

多类别中使用的典型指标与对所有类别进行平均化之后二进制分类案例中使用的指标相同。在 Amazon ML 中，宏平均 F1 分数用于评估多类别指标的预测准确性。

#### 宏平均 F1 分数
<a name="macro-average-f1-score"></a>

F1 分数是考虑二进制指标精度和重新调用的二进制分类指标。它是精度和重新调用之间的调和平均数。范围为 0 至 1。值越大说明预测准确度越高：

![\[image54\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image53.png)


宏平均 F1 分数是多类别案例中所有类别的 F1 分数的未加权平均数。它不会考虑类别在评估数据集中出现的频率。较大的值表示更好的预测准确度。以下示例显示了评估数据源中的 K 类别：

![\[image55\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image54.png)


基准宏平均 F1 分数

Amazon ML 提供了多类别模型的基准指标。它是假想多类别模型的宏平均 F1 分数，该模型始终将最常见的类别预测为答案。例如，如果您在预测电影流派时，您训练数据中最常见的流派是爱情片，则基准模型会始终将流派预测为爱情片。您可以根据此基准来比较您的 ML 模型，以验证您的 ML 模型是否优于预测此常量答案的 ML 模型。

### 使用性能可视化
<a name="id3"></a>

Amazon ML 提供*混淆矩阵*来直观地呈现多类别分类预测模型的准确性。混淆矩阵通过比较观察的预测类别及其真正的类别，在表中列出了各类别正确和错误预测的数量或百分比。

例如，如果您尝试将电影归入某个流派，预测模型可能预测其流派（类别）是爱情片。但其真正的流派可能是惊悚片。当您评估多类别分类 ML 模型的准确度时，Amazon ML 会识别错误分类并在混淆矩阵中显示结果，如下图所示。

![\[预测的流派示例。\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image55.png)


系统会在混淆矩阵中显示以下信息：
+ **每个类别的正确和错误预测的数量：**混淆矩阵中的每一行都对应一个真正类别的指标。例如，第一行显示了实际流派为爱情片的电影，多类别 ML 模型正确预测了 80% 以上的案例。它将不到 20% 的案例的流派错误地预测为惊悚片，并将不到 20% 的案例的流派错误地预测为冒险片。
+ **类域 F1 分数**：最后一个列显示每个类别的 F1 分数。
+ **评估数据中的真正类别频率**：第二列至最后一列显示，在评估数据集中，评估数据中有 57.92% 的观察为爱情片，21.23% 为惊悚片，20.85% 为冒险片。
+ **评估数据的预测类别频率**：最后一行显示预测中每个类的频率。77.56% 的观察被预测为爱情片，9.33% 被预测为惊悚片，13.12% 被预测为冒险片。

Amazon ML 控制台提供了可见显示，最多可在混淆矩阵中包含 10 个类别，这些类别将按照评估数据中最常见类别到最不常见类别的顺序列出。如果您的评估数据包含 10 个以上的类别，将会在混淆矩阵中看到前 9 个最常见的类别，所有其他类别都折叠为名为“others”的类别。借助 Amazon ML，您还能通过多类别可视化页面上的链接下载完整混淆矩阵。

# 回归模型洞察
<a name="regression-model-insights"></a>

## *解释预测*
<a name="id4"></a>

回归 ML 模型的输出是数值，是模型对目标的预测。例如，如果您要预测房价，模型的预测可能为 254013 这样的值。

**注意**  
预测的范围可能与训练数据中目标的范围不同。例如，假设您预测房价，训练数据中目标的值范围是 0 到 450000。预测目标无需位于同样的范围，并可以为任意正值 (大于 450000) 或负值 (小于零)。请务必计划如何解决预测值在您的应用程序可接受范围之外的情况。

### 衡量 ML 模型准确度
<a name="id5"></a>

对于回归任务，Amazon ML 使用行业标准的均方根误差 (RMSE) 指标。该指标衡量预测数值目标与实际数值答案 (基本实际情况) 之间的差距。RMSE 的值越小，模型的预测精度就越高。预测完全正确的模型的 RMSE 为 0。以下示例显示包含 N 条记录的评估数据：

![\[image56\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image56.png)


基准 RMSE

Amazon ML 提供了回归模型的基准指标。这是假设回归模型的 RMSE，该模型始终预测目标的平均值作为答案。例如，如果您预测房产买家的年龄，并且训练数据中所有观察的平均年龄为 35 岁，则基准模型始终将答案预测为 35 岁。您可以根据此基准来比较您的 ML 模型，以验证您的 ML 模型是否优于预测此常量答案的 ML 模型。

### 使用性能可视化
<a name="id6"></a>

对于回归问题，常见的做法是检查*残差*。评估数据中某个观察的残差是真实目标与预测目标之间的差值。残差表示模型无法预测的目标部分。正残差表示模型低估了目标（实际目标大于预测目标）。负残差表示高估（实际目标小于预测目标）。评估数据残差的直方图在呈钟形分布并且中心在零上时，指示模型以随机方式产生错误，不会系统性地高于或低于预测目标值的任何特定范围。如果残差未构成以零为中心的钟形曲线，这种情况表示模型的预测中存在结构错误。向模型添加更多变量可能会帮助模型捕获当前模型未捕获的模式。下图显示了不以零为中心的残差。

![\[image58\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image57.png)


## 防止过度拟合
<a name="overfitting"></a>

创建和训练 ML 模型时，目的是选择能够提供最佳预测的模型，这意味着要选择具有最佳设置（ML 模型设置或超级参数）的模型。在 Amazon Machine Learning 中，您可以设置四个超级参数：扫描次数、正则化、模型大小和随机类型。不过，如果您选择可为评估数据生成“最佳”预测性能的模型参数设置，您可能会过度拟合模型。当模型记住了在训练数据源和评估数据源中出现的模式，但未能在数据中归纳这些模式时，会出现过度拟合。这种情况通常在训练数据包含所有用于评估的数据时出现。过度拟合的模型在评估阶段表现很好，但无法对未见过的数据提供准确的预测。

为避免选择过度拟合模型作为最佳模型，您可以预留更多数据，以验证 ML 模型的性能。例如，您可以按照以下比例拆分数据：60% 的数据用于训练，20% 的数据用于评估，还有 20% 的数据用于验证。选择非常适合评估数据的模型参数之后，您可以使用验证数据再次进行评估，查看 ML 模型在运行验证数据时的表现。如果模型运行验证数据时的表现满足您的预期，就表示此模型没有过度拟合数据。

使用第三个数据集进行验证有助于您选择合适的 ML 模型参数来防止过度拟合。但是，将训练过程使用的数据预留用于评估和验证会减少可用于训练的数据。当数据集较小时，这个问题尤其明显，因为使用尽可能多的数据进行训练始终是最好的。要解决这个问题，您可以执行交叉验证。有关交叉验证的信息，请参阅[交叉验证](cross-validation.md)。

# 交叉验证
<a name="cross-validation"></a>

交叉验证是一种评估 ML 模型的方法，具体方法是通过使用可用输入数据子集训练多个 ML 模型并使用补充数据子集对其进行评估。使用交叉验证来检测过度拟合，即无法泛化模式。

在 Amazon ML 中，您可以使用 K 折交叉验证方法执行交叉验证。在 K 折交叉验证中，您将输入数据拆分为 k 个数据子集（也称为折叠）。 您在除某个子集 (k-1) 之外的所有子集上训练 ML 模型，然后在训练时未使用的子集上评估该模型。此过程将重复执行 k 次，每次使用一个预留用于评估的不同子集（训练中不包含的子集）。

下图显示了在 4 折交叉验证过程中创建和训练的四个模型中为每个模型生成的训练子集和补充评估的示例。模型一使用第一个 25% 的数据进行评估，使用其余 75% 的数据进行训练。模型二使用第二个 25%（25% 到 50%）的子集进行评估，使用其余三个数据子集进行训练，依此类推。

![\[Four rectangles showing data division for cross-validation models with training and evaluation subsets.\]](http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/images/image63.png)


每个模型使用补充数据源进行训练和评估，包含评估数据源中的数据，并且仅限于训练数据源中不包含的所有数据。您可以使用、和中的`DataRearrangement`参数为每个子集创建数据源。`createDatasourceFromS3` `createDatasourceFromRedShift` `createDatasourceFromRDS` APIs在 `DataRearrangement` 参数中，通过指定每个分段的开始和结束位置来指定数据源将包含的数据的子集。要创建补充 4K 折交叉验证所需的补充数据源，请按照以下示例所示指定 `DataRearrangement` 参数：

**模型一：**

用于评估的数据源：

```
{"splitting":{"percentBegin":0, "percentEnd":25}}
```

用于训练的数据源：

```
{"splitting":{"percentBegin":0, "percentEnd":25, "complement":"true"}}
```

**模型二：**

用于评估的数据源：

```
{"splitting":{"percentBegin":25, "percentEnd":50}}
```

用于训练的数据源：

```
{"splitting":{"percentBegin":25, "percentEnd":50, "complement":"true"}}
```

**模型三：**

用于评估的数据源：

```
{"splitting":{"percentBegin":50, "percentEnd":75}}
```

用于训练的数据源：

```
{"splitting":{"percentBegin":50, "percentEnd":75, "complement":"true"}}
```

**模型四：**

用于评估的数据源：

```
{"splitting":{"percentBegin":75, "percentEnd":100}}
```

用于训练的数据源：

```
{"splitting":{"percentBegin":75, "percentEnd":100, "complement":"true"}}
```

执行 4 折交叉验证会生成四个模型、四个训练模型的数据源、四个评估模型的数据源和四个评估，每个模型一个。Amazon ML 为每个评估生成模型性能指标。例如，在适用于二进制分类问题的 4 折交叉验证中，每个评估都会报告曲线下面积 (AUC) 指标。您可以通过计算四个 AUC 指标的平均值获得整体性能测量值。有关 AUC 指标的信息，请参阅[衡量 ML 模型准确度](binary-model-insights.md#measuring-ml-model-accuracy)。

有关显示如何创建交叉验证和计算模型分数平均值的示例代码，请参阅 [Amazon ML 示例代码](https://github.com/awslabs/machine-learning-samples)。

## 调整您的模型
<a name="adjusting-models"></a>

对模型执行交叉验证后，如果模型的表现未达到您的标准，您可以调整下一个模型的设置。有关过度拟合的更多信息，请参阅[模型拟合：欠拟合与过度拟合](model-fit-underfitting-vs-overfitting.md)。有关正则化的更多信息，请参阅[正则化](training-parameters1.md#regularization)。有关更改正则化设置的更多信息，请参阅[使用自定义选项创建 ML 模型](creating-ml-model-on-the-amazon-ml-console.md#creating-ml-model-using-custom-settings)。

# 评估警报
<a name="evaluation-alerts"></a>

Amazon ML 提供见解，帮助验证您是否已正确评估模型。如果评估不满足任何验证标准，Amazon ML 控制台会显示已违反的验证标准来提醒您，如下所示。
+  **已对留存数据完成 ML 模型的评估** 

  如果您对训练和评估使用同一个数据源，Amazon ML 会发出警报。如果您使用 Amazon ML 拆分数据，您将符合此有效性标准。如果您不使用 Amazon ML 来拆分数据，请务必使用训练数据源以外的数据源评估您的 ML 模型。
+  **已将足量数据用于预测模型评估** 

  如果评估数据中的观察数/记录数少于训练数据源中观察数的 10%，Amazon ML 会发出警报。要正确地评估您的模型，必须提供足够大量的数据样本，这一点很重要。此标准提供了一个检查，让您知道您使用的数据是否太少。您的 ML 模型评估所需的数据量是主观决定的。在此处选择 10% 是作为缺乏更好措施时的权宜之计。
+  **架构已匹配** 

  如果训练和评估数据源的架构不相同，Amazon ML 会发出警报。如果您的某些属性在评估数据源中不存在，或者如果您有其他属性，Amazon ML 会显示此警报。
+  **评估文件中的所有记录已用于预测模型性能评估** 

  请务必了解用于评估的所有记录是否实际用于评估相应模型。如果评估数据源中的某些记录无效，并且未包含在准确性指标计算中，Amazon ML 会向您发出警报。例如，如果在评估数据源过程中，一些观察的目标变量缺失，Amazon ML 将无法检查针对这些观察的 ML 模型预测是否正确。在这种情况下，记录与缺失的目标值将被视为无效。
+  **目标变量的分布** 

  Amazon ML 向您展示来自训练和评估数据源的目标属性的分布，以便您可以查看这两个数据源中的目标分布是否相似。对于利用训练数据建立的模型，如果其目标分布不同于评估数据的目标分布，则评估质量可能会受到影响，因为计算评估时依据的数据具有完全不同的统计数据。最好让训练数据和评估数据具有相似的数据分布，并让这些数据集尽可能地模拟在进行预测时模型将遇到的数据。

  如果此警报触发，请尝试使用随机拆分策略将数据拆分为训练数据源和评估数据源。在极少数情况下，该警报可能会错误地提醒您目标分布还是有区别，即使您随机拆分了数据。Amazon ML 使用近似统计数据来评估数据分布，有时会错误地触发此警报。