

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

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

# 为 Amazon ML 创建数据架构
<a name="creating-a-data-schema-for-amazon-ml"></a>

 *架构* 包含输入数据中的所有属性及其相应的数据类型。Amazon ML 可以通过架构了解数据源中的数据。Amazon ML 使用架构中的信息来读取和解释输入数据、计算统计数据、应用正确的属性转换以及优化其学习算法。如果您未提供架构，Amazon ML 会通过数据推断出一个架构。

## 示例架构
<a name="schema-example"></a>

要让 Amazon ML 正确读取输入数据并生成准确的预测结果，必须为每个属性分配正确的数据类型。我们通过一个例子来了解如何将数据类型分配给属性以及如何在架构中包含属性和数据类型。我们将调用示例“Customer Campaign”，因为我们要预测哪些客户将响应我们的电子邮件营销活动。我们的输入文件是 .csv 文件，其中包含九列：

```
1,3,web developer,basic.4y,no,no,1,261,0

2,1,car repair,high.school,no,no,22,149,0

3,1,car mechanic,high.school,yes,no,65,226,1

4,2,software developer,basic.6y,no,no,1,151,0
```

这是此数据的架构：

```
{
    "version": "1.0",
    "rowId": "customerId",
    "targetAttributeName": "willRespondToCampaign",
    "dataFormat": "CSV",
    "dataFileContainsHeader": false,
    "attributes": [
        {
            "attributeName": "customerId",
            "attributeType": "CATEGORICAL"
        },
        {
            "attributeName": "jobId",
            "attributeType": "CATEGORICAL"
        },
        {
            "attributeName": "jobDescription",
            "attributeType": "TEXT"
        },
        {
            "attributeName": "education",
            "attributeType": "CATEGORICAL"
        },
        {
            "attributeName": "housing",
            "attributeType": "CATEGORICAL"

        },
        {
            "attributeName": "loan",
            "attributeType": "CATEGORICAL"

        },
        {
            "attributeName": "campaign",
            "attributeType": "NUMERIC"
        },
        {
            "attributeName": "duration",
            "attributeType": "NUMERIC"
        },

        {
            "attributeName": "willRespondToCampaign",
            "attributeType": "BINARY"
        }
        
    ]
}
```

在此示例的架构文件中，`rowId` 的值为 `customerId`：

```
"rowId": "customerId",
```

属性 `willRespondToCampaign` 被定义为目标属性：

```
"targetAttributeName": "willRespondToCampaign ",
```

 `customerId` 属性和 `CATEGORICAL` 数据类型与第一列关联，`jobId` 属性和 `CATEGORICAL` 数据类型与第二列关联，`jobDescription` 属性和 `TEXT` 数据类型与第三列关联，`education` 属性和 `CATEGORICAL` 数据类型与第四列关联，依此类推。第九列与 `willRespondToCampaign` 属性和 `BINARY` 数据类型关联，此属性还被定义为目标属性。

## 使用字 targetAttributeName 段
<a name="using-the-targetattributename-field"></a>

`targetAttributeName` 值是要预测的属性的名称。您在创建或评估模型时必须分配 `targetAttributeName`。

在您训练或评估 ML 模型时，`targetAttributeName` 会标识包含目标属性的“正确”答案的输入数据中属性的名称。Amazon ML 使用包含正确答案的目标来发现模式和生成 ML 模型。

在您评估您的模型时，Amazon ML 使用目标来检查您的预测结果的准确性。在您创建和评估完 ML 模型之后，可以通过 ML 模型利用数据和未分配的 `targetAttributeName` 生成预测。

您可在 Amazon ML 控制台中（创建数据源时）或在架构文件中定义目标属性。如果您要创建自己的架构文件，请使用以下语法来定义目标属性：

```
"targetAttributeName": "exampleAttributeTarget",
```

 在此示例中，`exampleAttributeTarget` 是输入文件中属性的名称，该属性是目标属性。

## 使用 rowID 字段
<a name="using-the-rowid-field"></a>

 `row ID` 是与输入数据中的属性相关联的可选标志。如果指定该标志，标记为 `row ID` 的属性则会包含在预测输出中。借助此属性，您可以更轻松地将预测与对应的观察进行关联。一个很好的例子是，`row ID` 是客户 ID 或类似的唯一属性。

**注意**  
行 ID 仅供您参考。Amazon ML 在训练 ML 模型时不使用此属性。选择一个属性作为行 ID，则在训练 ML 模型时不会使用此属性。

您可在 Amazon ML 控制台中（创建数据源时）或在架构文件中定义 `row ID`。如果您要创建自己的架构文件，请使用以下语法来定义 `row ID`：

```
"rowId": "exampleRow",
```

 在上述示例中，`exampleRow` 是在输入文件中被定义为行 ID 的属性的名称。

生成批量预测时，您可能会得到以下输出：

```
tag,bestAnswer,score
55,0,0.46317
102,1,0.89625
```

 在此示例中，`RowID` 表示属性 `customerId`。例如，预测 customerId `55` 响应电子邮件营销活动的置信度低 (0.46317)，而预测 `customerId` `102` 响应电子邮件营销活动的置信度 (0.89625) 高。

## 使用字 AttributeType 段
<a name="assigning-data-types"></a>

在 Amazon ML 中，有四个用于属性的数据类型：

**二进制**  
为只包含两种可能的状态（例如 `BINARY` 或 `yes`）的属性选择 `no`。  
例如，属性 `isNew` 用于跟踪某个人是否是新客户，该属性可能包含 `true` 值（用于表示这个人是新客户）和 `false` 值（用于表示此人不是新客户）。  
有效的负值为 `0`、`n`、`no`、`f` 和 `false`。  
有效的正值为 `1`、`y`、`yes`、`t` 和 `true`。  
Amazon ML 会忽略二进制输入的大小写和去掉两边的空格。例如，`" FaLSe "` 是有效的二进制值。您可以在同一个数据源中混合使用二进制值，例如使用 `true`、`no` 和 `1`。Amazon ML 只为二进制属性输出 `0` 和 `1`。

**分类**  
为使用的唯一字符串值数量有限的属性选择 `CATEGORICAL`。例如，用户 ID、月份和邮政编码都是分类值。分类属性将被视为单个字符串，不会进一步令牌化。  


**数值**  
为将数量作为值的属性选择 `NUMERIC`。  
例如，温度、重量和点击率都是数值。  
并非所有以数字为值的属性都为数值型。分类属性（例如月中的几天和 IDs）通常用数字表示。要被视为数值，一个数字必须可与另一个数字进行比较。例如，通过客户 ID `664727` 无法了解有关客户 ID `124552` 的任何信息，但您可以了解权重为 `10` 的属性比权重为 `5` 的属性影响更大。月份的天不是数值，因为一个月的第一天可能出现在另一个月的第二天之前或之后。  
使用 Amazon ML 创建架构时，它会将 `Numeric` 数据类型分配给所有使用数字的属性。如果使用 Amazon ML 创建架构，请检查是否有不正确的分配，并将这些属性设置为 `CATEGORICAL`。

**文本**  
为值为单词字符串的属性选择 `TEXT`。读取文本属性时，Amazon ML 将其转换为用空格分隔的令牌。  
例如，`email subject` 将变为 `email` 和 `subject`，`email-subject here` 将变为 `email-subject` 和 `here`。

如果训练架构中变量的数据类型与该变量在评估架构中的数据类型不一致，Amazon ML 会更改评估数据类型以与训练数据类型保持一致。例如，如果训练数据架构将数据类型 `TEXT` 分配给变量 `age`，但评估架构将数据类型 `NUMERIC` 分配给 `age`，Amazon ML 会将评估数据中的 age 看作 `TEXT` 变量，而不是 `NUMERIC`。

有关与每种数据类型相关的统计信息，请参阅[描述性统计信息](data-insights.md#descriptive-statistics)。

## 为 Amazon ML 提供架构
<a name="methods-for-creating-a-data-schema"></a>

每个数据源都需要一个架构。您可以从两种方式中选择所需方式来为 Amazon ML 提供架构：
+  允许 Amazon ML 推断输入数据文件中每个属性的数据类型并自动为您创建架构。
+  在上传 Amazon Simple Storage Service (Amazon S3) 数据时提供架构文件。

### 允许 Amazon ML 创建您的架构
<a name="allowing-amazon-create-your-schema"></a>

使用 Amazon ML 控制台创建数据源时，Amazon ML 将根据变量的值使用简单规则来创建您的架构。我们强烈建议您检查 Amazon ML 创建的架构，并纠正不正确的数据类型。

### 提供架构
<a name="providing-schema-to-amazon-ml"></a>

 创建架构文件后，您需要使其对 Amazon ML 可用。你有两个选择：

1.  使用 Amazon ML 控制台提供架构。

    使用控制台创建您的数据源，并通过在输入数据文件的文件名中附加 .schema 扩展名来包含架构文件。例如，如果您的输入数据的亚马逊简单存储服务 (Amazon S3) Service URI 是 s3:my-bucket-name///data/input.csv, the URI to your schema will be s3://my-bucket-name/data/input.csv.schema。Amazon ML 会自动定位您提供的架构文件，而不是尝试通过您的数据推断出架构。

    要将文件目录作为 Amazon ML 的数据输入，请将 .schema 扩展名附加到您的目录路径中。例如，如果您的数据文件位于 s3: examplebucket/path/to/data/, the URI to your schema will be s3://examplebucket/path/to/data ///.schema。

1.  使用 Amazon ML API 提供架构。

    如果您计划调用 Amazon ML API 来创建数据源，则可将架构文件上传到 Amazon S3 中，然后将 URI 提供给 `CreateDataSourceFromS3` API 的 `DataSchemaLocationS3` 属性中的文件。有关更多信息，请参阅 [CreateDataSourceFromS3](https://docs.aws.amazon.com/machine-learning/latest/APIReference/API_CreateDataSourceFromS3.html)。

    您可以直接提供 `CreateDataSource`\$1 `APIs` 负载中的架构，而不是先将其保存到 Amazon S3。为此，您可以将完整的架构字符串放在`CreateDataSourceFromS3``CreateDataSourceFromRDS`、或的`DataSchema`属性中`CreateDataSourceFromRedshift` APIs。有关更多信息，请参阅 [Amazon Machine Learning API 参考](https://docs.aws.amazon.com/machine-learning/latest/APIReference/)。