

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

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

# 数据转换参考
<a name="data-transformations-reference"></a>

**Topics**
+ [

## N 元转换
](#n-gram-transformation)
+ [

## 正交稀疏二元 (OSB) 转换
](#orthogonal-sparse-bigram-osb-transformation)
+ [

## 小写转换
](#lowercase-transformation)
+ [

## 删除标点转换
](#remove-punctuation-transformation)
+ [

## 分位数分箱转换
](#quantile-binning-transformation)
+ [

## 标准化转换
](#normalization-transformation)
+ [

## 笛卡尔积转换
](#cartesian-product-transformation)

## N 元转换
<a name="n-gram-transformation"></a>

 N 元转换获取文本变量作为输入，并生成与滑动 (用户可配置) n 个单词的窗口对应的字符串，在这一过程中生成输出。例如，请考虑文本字符串“I really enjoyed reading this book”。

 指定窗口大小为 1 的 N 元转换仅向您提供该字符串中的所有单个单词：

```
{"I", "really", "enjoyed", "reading", "this", "book"}
```

 指定窗口大小为 2 的 N 元转换将返回所有 2 个单词组合以及所有单个单词组合。

```
{"I really", "really enjoyed", "enjoyed reading", "reading this", "this
book", "I", "really", "enjoyed", "reading", "this", "book"}
```

 指定窗口大小为 3 的 N 元转换将添加 3 个单词组合到此列表中，得到以下内容：

```
{"I really enjoyed", "really enjoyed reading", "enjoyed reading this",
"reading this book", "I really", "really enjoyed", "enjoyed reading",
"reading this", "this book", "I", "really", "enjoyed", "reading",
"this", "book"}
```

 您可以请求大小范围从 2 到 10 个单词的 N 元。对于数据架构中其类型标记为文本的所有输入，隐式生成大小为 1 的 N 元，因此您无需要求它们。最后请记住，N 元是通过按照空格字符拆分输入数据来生成的。这意味着，例如，标点符号将视为单词令牌的一部分：为字符串“red, green, blue”使用窗口 2 生成 N 元将得到 \$1“red,”，“green,”，“blue,”，“red, green”，“green, blue”\$1。如果您不希望有标点，可以使用标点删除程序处理器 (本文档的稍后部分中介绍) 来删除标点符号。

 为变量 var1 计算窗口大小 3 的 N 元：

```
"ngram(var1, 3)"
```

## 正交稀疏二元 (OSB) 转换
<a name="orthogonal-sparse-bigram-osb-transformation"></a>

 OSB 变换旨在帮助分析文本字符串，并且是双语法变换（窗口大小为 2 的 n-gram）的替代方案。 OSBs 是通过在文本上滑动大小为 n 的窗口，然后输出每对包含窗口中第一个单词的单词来生成的。

 为了生成各个 OSB，其组成单词使用“\$1”(下划线) 字符联接，每个跳过的令牌由添加到 OSB 中的另一个下划线来指示。因此，OSB 不仅对在窗口中发现的令牌进行编码，而且还对在相同窗口中跳过的令牌数的指示进行编码。

 为了说明起见，可以考虑大小为 4 的字符串 “快速的棕色狐狸跳过懒狗”。 OSBs 以下示例显示了六个四字窗口，以及从字符串末尾开始的最后两个较短的窗口，以及从每个窗口 OSBs生成的：

 窗口，\$1OSBs 已生成\$1 

```
"The quick brown fox", {The_quick, The__brown, The___fox}

"quick brown fox jumps", {quick_brown, quick__fox, quick___jumps}

"brown fox jumps over", {brown_fox, brown__jumps, brown___over}

"fox jumps over the", {fox_jumps, fox__over, fox___the}

"jumps over the lazy", {jumps_over, jumps__the, jumps___lazy}

"over the lazy dog", {over_the, over__lazy, over___dog}

"the lazy dog", {the_lazy, the__dog}

"lazy dog", {lazy_dog}
```

 正交稀疏二元是 N 元的替代方法，在某些情况下可能会合适。如果您的数据具有大型文本字段 (10 个或更多个单词)，可以通过试验来了解哪种方式更好。请注意，什么构成大型文本字段可能会取决于具体情况。但是，对于较大的文本字段， OSBs 由于特殊的*跳过*符号（下划线），经验证明可以唯一地表示文本。

 您可以在输入文本变量上为 OSB 转换请求大小为 2 到 10 的窗口。

 要 OSBs 使用窗口大小 5 计算变量 var1，请执行以下操作：

 "osb(var1, 5)"

## 小写转换
<a name="lowercase-transformation"></a>

 小写转换处理器将文本输入转换为小写。例如，假设输入为“The Quick Brown Fox Jumps Over the Lazy Dog”，处理器将输出“the quick brown fox jumps over the lazy dog”。

 为变量 var1 应用小写转换：

 "lowercase(var1)"

## 删除标点转换
<a name="remove-punctuation-transformation"></a>

 Amazon ML 隐式拆分数据架构中标记为文本的输入，以空格为依据。字符串中的标点要么与邻近的单词令牌放在一起，要么完整作为单独的令牌，具体取决于周围的空格。如果不希望有标点，可以使用标点删除程序转换从生成的特征中删除标点符号。例如，假设字符串为“Welcome to AML - please fasten your seat-belts\$1”，将隐式生成以下一组令牌：

```
{"Welcome", "to", "Amazon", "ML", "-", "please", "fasten", "your", "seat-belts!"}
```

 对此字符串应用标点删除程序处理器会得到以下一组结果：

```
{"Welcome", "to", "Amazon", "ML", "please", "fasten", "your", "seat-belts"}
```

 请注意，只删除前缀和后缀标点符号。不删除显示在令牌中间的标点，例如“seat-belts”中的连字符。

 为变量 var1 应用标点删除：

 "no\$1punct(var1)"

## 分位数分箱转换
<a name="quantile-binning-transformation"></a>

 分位数分箱处理器采用两种输入：一个数值变量和一个称作*分箱数* 的参数，并输出一个分类变量。其目的是通过将观察值分组在一起，发现变量分布中的非线性情况。

 在许多情况下，数值变量与目标之间的关系并非线性 (数值变量值不随目标单增或单减)。在这种情况下，将数值特征分箱到表示数值特征不同范围的分类特征中可能会很有用。然后，每个分类特征值 (分箱) 可以建模为具有与目标的自身线性关系。例如，假设您知道连续数值特征 *account\$1age* 与购买某书的可能性并非线性相关。您可以将寿命分箱到可以更准确捕获与目标关系的分类特征。

 分位数分箱处理器可用于指示 Amazon ML 根据所有输入值的 age 变量分布，建立相同大小的 n 个分箱，然后使用包含分箱的文本令牌替换每个数字。数值变量的最佳分箱数量取决于变量的特性及其与目标的关系，最好通过试验来确定。Amazon ML 建议，基于[建议配方](https://docs.aws.amazon.com/machine-learning/latest/dg/suggested-recipes.html)中的数据统计信息确定数值特征的最佳分箱数量。

 您可以请求为任意数值输入变量计算 5 到 1000 之间的分位数分箱。

 以下示例显示了如何在数值变量 var1 中计算和使用 50 个分箱：

 "quantile\$1bin(var1, 50)"

## 标准化转换
<a name="normalization-transformation"></a>

 标准化转换器将数值变量标准化为 0 以及与 1 的差的平均值。如果数值变量有非常大范围的差别，而最高量级的变量会主导 ML 模型且不论特征是否提供目标的信息，那么数值变量的标准化可以帮助学习过程。

 要将此转换应用到变量 var1，请将此项添加到配方：

 normalize(var1) 

 此转换器还可以获取用户定义的数值变量组或所有数值变量 (ALL\$1NUMERIC) 的预定义组作为输入：

 normalize(ALL\$1NUMERIC) 

 **注意** 

 系统*并不* 强制要求为数值变量使用标准化处理器。

## 笛卡尔积转换
<a name="cartesian-product-transformation"></a>

 笛卡尔积转换生成多个文本或分类输入变量的排列。此转换在对变量之间的交互存在疑问时使用。例如，考虑教程中的银行营销数据集：使用 Amazon ML 预测对营销方案的响应。使用此数据集，我们希望根据经济和人口统计信息，预测某人是否会积极回应银行推广活动。我们可能会怀疑个人的工作类型某种程度上很重要 (就职于特定领域与获得可支配收入方面可能存在关联)，而获得的最高教育水平也会很重要。我们还可能有更深的直觉，这两个变量之间的交互存在很强的信号，例如，推广活动可能尤其适合获得了大学学位并且是企业家的客户。

 笛卡尔积转换获取分类变量或文本作为输入，生成捕获了这些输入变量之间交互的新特征。具体而言，对于每个训练示例，它将创建特征组合，然后将其作为独立特色添加。例如，假设我们简化输入行，如下所示：

 target, education, job 

 0, university.degree, technician 

 0, high.school, services 

 1, university.degree, admin 

 如果我们指定笛卡尔转换要应用到分类变量 education 和 job 字段，生成的特征 education\$1job\$1interaction 将如下所示：

 target, education\$1job\$1interaction 

 0, university.degree\$1technician 

 0, high.school\$1services 

 1, university.degree\$1admin 

 笛卡尔转换在处理令牌的序列时功能更为强大，适合在其参数之一是隐式或显式拆分为多个令牌的文本变量。例如，考虑是否将某本书分类为教科书的情况。直观上，我们会认为书名中会有某些信息告诉我们这是否为教科书 (特定单词可能会更频繁出现在教科书名中)，我们还会认为书本的装订会提供一些预测性的信息 (教科书更可能使用硬书皮)，但实际情况是，将书名中的一些单词与装订组合起来具有最好的预测性。对于真实应用示例，下表显示了对输入变量 binding 和 title 应用笛卡尔处理器的结果：


|  Textbook  |  标题  |  Binding  |  no\$1punct(Title) 和 Binding 的笛卡尔积  | 
| --- | --- | --- | --- | 
|  1  |  Economics: Principles, Problems, Policies  |  Hardcover  |  \$1"Economics\$1Hardcover", "Principles\$1Hardcover", "Problems\$1Hardcover", "Policies\$1Hardcover"\$1  | 
|  0  |  The Invisible Heart: An Economics Romance  |  Softcover  |  \$1"The\$1Softcover", "Invisible\$1Softcover", "Heart\$1Softcover", "An\$1Softcover", "Economics\$1Softcover", "Romance\$1Softcover"\$1  | 
|  0  |  Fun With Problems  |  Softcover  |  \$1"Fun\$1Softcover", "With\$1Softcover", "Problems\$1Softcover"\$1  | 

 以下示例显示如何将笛卡尔转换器应用到 var1 和 var2：

 cartesian(var1, var2) 