

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

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

# 配方格式参考
<a name="recipe-format-reference"></a>

Amazon ML 配方包含将您的数据转换为机器学习过程的一部分的指令。配方使用类似 JSON 的语法定义，但它们包含除常规 JSON 限制之外的其他限制。配方包含以下部分，这些部分必须按如下所示的顺序显示：
+  **组** 可对多个变量进行分组，以便应用转换。例如，您可以为与网页（标题、正文）上自由文本部分相关的所有变量创建分组，然后立即对所有这些部分执行转换。
+  **分配** 可以创建在处理过程中可重复使用的中间命名变量。
+  **输出** 可定义学习过程中将使用哪些变量以及对这些变量应用哪些转换（如果有）。

## 组
<a name="groups"></a>

 您可以定义变量分组以集中转换这些分组中的所有变量，或者在不转换这些变量的情况下将其用于机器学习。默认情况下，Amazon ML 会为您创建以下分组：

 **ALL\$1TEXT、ALL\$1NUMERIC、ALL\$1CATEGORICAL、ALL\$1BINARY -** 特定于类型的分组，基于在数据源架构中定义的变量。

**注意**  
您不能创建包含 `ALL_INPUTS` 的分组。

 这些变量无需定义即可在配方的输出部分使用。您也可以通过在现有分组中增加或减少变量来创建自定义组，或直接从变量集创建。在以下示例中，我们将演示所有三种方法以及用于分配分组的语法：

```
"groups": {

"Custom_Group": "group(var1, var2)",
"All_Categorical_plus_one_other": "group(ALL_CATEGORICAL, var2)"

}
```

 组名必须以字母字符开头，长度可在 1 至 64 个字符之间。如果组名不以字母字符开头或者包含特殊字符 (, ' " \$1t \$1r \$1n ( ) \$1)，则需用引号将名称括起来才能包含在配方中。

## 分配
<a name="assignments"></a>

 为了便于使用和读取，您可以将一个或多个转换分配给中间变量。例如，如果您有名为 email\$1subject 的文本变量，并且为其应用了小写转换，则可将生成的变量命名为 email\$1subject\$1lowercase，这样便于您在配方中的其他位置跟踪该变量。分配也可以链接在一起，便于您按指定的顺序应用多个转换。以下示例显示了配方语法中的单个分配和链式分配：

```
"assignments": {

"email_subject_lowercase": "lowercase(email_subject)",

"email_subject_lowercase_ngram":"ngram(lowercase(email_subject), 2)"

}
```

 中间变量名称必须以字母字符开头，长度可在 1 至 64 个字符之间。如果该名称不以字母字符开头或者包含特殊字符 (, ' " \$1t \$1r \$1n ( ) \$1)，则需用引号将名称括起来才能包含在配方中。

## 输出
<a name="outputs"></a>

 输出部分可控制在学习过程中使用哪些输入变量以及为其应用哪些转换。输出部分为空或不存在即出现错误，因为未将数据传递到学习过程。

 最简单的输出部分只包含预定义的 **ALL\$1INPUTS** 分组，用于指示 Amazon ML 使用在用于学习的数据源中定义的所有变量：

```
"outputs": [

"ALL_INPUTS"

]
```

 输出部分还可以通过指示 Amazon ML 使用其他预定义分组中的所有变量来引用这些分组：

```
"outputs": [

"ALL_NUMERIC",

"ALL_CATEGORICAL"

]
```

 输出部分还可以引用自定义组。在以下示例中，只有在上一示例中的分组分配部分中定义的一个自定义组将用于机器学习。所有其他变量都将删除：

```
"outputs": [

"All_Categorical_plus_one_other"

]
```

输出部分还可以引用分配部分的定义变量分配：

```
"outputs": [

"email_subject_lowercase"

]
```

 输入变量或转换可直接在输出部分中定义：

```
"outputs": [

"var1",

"lowercase(var2)"

]
```

 输出需要明确指定预计将用于学习过程的所有变量和转换变量。例如，假如您在输出中包含 var1 和 var2 的笛卡尔积。如果您希望也包含原始变量 var1 和 var2，则需在输出部分添加原始变量：

```
"outputs": [

"cartesian(var1,var2)",

"var1",

"var2"

]
```

 输出时可以通过添加与变量相关的注释文本来包含注释，以便阅读：

```
"outputs": [

"quantile_bin(age, 10) //quantile bin age",

"age // explicitly include the original numeric variable along with the
binned version"

]
```

 您可以在输出部分中混合搭配所有这些方法。

**注意**  
添加配方时不允许在 Amazon ML 控制台中添加注释。

## 完整配方示例
<a name="complete-recipe-example"></a>

 以下示例引用了前面示例中介绍的几个内置数据处理器：

```
{

"groups": {

"LONGTEXT": "group_remove(ALL_TEXT, title, subject)",

"SPECIALTEXT": "group(title, subject)",

"BINCAT": "group(ALL_CATEGORICAL, ALL_BINARY)"

},

"assignments": {

"binned_age" : "quantile_bin(age,30)",

"country_gender_interaction" : "cartesian(country, gender)"

},

"outputs": [

"lowercase(no_punct(LONGTEXT))",

"ngram(lowercase(no_punct(SPECIALTEXT)),3)",

"quantile_bin(hours-per-week, 10)",

"hours-per-week // explicitly include the original numeric variable
along with the binned version",

"cartesian(binned_age, quantile_bin(hours-per-week,10)) // this one is
critical",

"country_gender_interaction",

"BINCAT"

]

}
```