使用 NLTK 和 SciPy 在 Amazon SageMaker Data Wrangler 中编写自定义转换

使用 NLTK 和 SciPy 在 Amazon SageMaker Data Wrangler 中编写自定义转换

“公司不应专注于代码,而应专注于开发系统的工程实践,以可靠、高效和系统的方式改进数据。 换句话说,公司需要从以模型为中心的方法转变为以数据为中心的方法。” – 吴恩达

以数据为中心的 AI 方法涉及使用涉及数据准备和特征工程的高质量数据构建 AI 系统。 这可能是一项繁琐的任务,涉及数据收集、发现、分析、清理、结构化、转换、丰富、验证和安全存储数据。

亚马逊SageMaker数据牧马人 是一项服务 亚马逊SageMaker Studio 它提供了一个端到端的解决方案来导入、准备、转换、特征化和分析数据,几乎不需要编码。 您可以将 Data Wrangler 数据准备流程集成到您的机器学习 (ML) 工作流程中,以简化数据预处理和特征工程,更快地将数据准备投入生产,而无需编写 PySpark 代码、安装 Apache Spark 或启动集群。

对于需要为数据转换添加自定义脚本的场景,您可以在 Pandas、PySpark、PySpark SQL 中编写转换逻辑。 Data Wrangler 现在支持 NLTK 和 SciPy 库来编写自定义转换,为 ML 准备文本数据并执行约束优化。

您可能会遇到必须添加自己的自定义脚本以进行数据转换的情况。 借助 Data Wrangler 自定义转换功能,您可以在 Pandas、PySpark、PySpark SQL 中编写转换逻辑。

在本文中,我们将讨论如何在 NLTK 中编写自定义转换来为 ML 准备文本数据。 我们还将分享一些使用其他常见框架(例如 NLTK、NumPy、SciPy、scikit-learn 以及 AWS AI 服务)进行自定义代码转换的示例。 出于本练习的目的,我们使用 泰坦尼克号数据集,ML 社区中的一个流行数据集,现在已添加为 样本数据集 在 Data Wrangler 中。

解决方案概述

Data Wrangler 提供了超过 40 个用于导入数据的内置连接器。 导入数据后,您可以使用 300 多个内置转换构建数据分析和转换。 然后,您可以生成工业化管道以将功能推送到 亚马逊简单存储服务 (Amazon S3)或 Amazon SageMaker功能商店. 下图显示了端到端的高级架构。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

先决条件

Data Wrangler 是 SageMaker 中可用的功能 亚马逊SageMaker Studio. 你可以关注 Studio 入职流程 启动 Studio 环境和笔记本。 尽管您可以从几种身份验证方法中进行选择,但创建 Studio 域的最简单方法是遵循 快速入门说明. 快速入门使用与标准 Studio 设置相同的默认设置。 您也可以选择使用 AWS IAM 身份中心 (AWS Single Sign-On 的继承者)进行身份验证(请参阅 使用 IAM 身份中心载入 Amazon SageMaker 域).

导入泰坦尼克号数据集

启动您的 Studio 环境并创建一个新的 数据管理员流程. 您可以导入自己的数据集或使用示例数据集 (Titanic),如以下屏幕截图所示。 Data Wrangler 允许您从不同的数据源导入数据集。 对于我们的用例,我们从 S3 存储桶导入示例数据集。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

导入后,您将在数据流中看到两个节点(源节点和数据类型节点)。 Data Wrangler 自动识别数据集中所有列的数据类型。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

使用 NLTK 的自定义转换

对于使用 Data Wrangler 的数据准备和特征工程,您可以使用 300 多个内置转换或构建您自己的自定义转换。 自定义转换 可以在 Data Wrangler 中编写为单独的步骤。 它们成为 Data Wrangler 中 .flow 文件的一部分。 自定义转换功能支持 Python、PySpark 和 SQL 作为代码片段中的不同步骤。 从 .flow 文件生成笔记本文件 (.ipynb) 或将 .flow 文件用作配方后,自定义转换代码片段会保留下来,无需任何更改。 Data Wrangler 的这种设计允许自定义转换成为 SageMaker 处理作业的一部分,用于使用自定义转换处理海量数据集。

Titanic 数据集有几个包含文本信息的特征(name 和 home.dest)。 我们用 NLTK 拆分名称列并提取姓氏,并打印姓氏的频率。 NLTK 是构建 Python 程序以处理人类语言数据的领先平台。 它提供易于使用的界面 超过 50 个语料库和词汇资源 例如 WordNet,以及一套用于分类、标记化、词干提取、标记、解析和语义推理的文本处理库,以及用于工业级自然语言处理 (NLP) 库的包装器。

要添加新转换,请完成以下步骤:

  1. 选择加号并选择 添加变换.
  2. 添加步骤 并选择 自定义转换.

您可以使用 Pandas、PySpark、Python 用户定义函数和 SQL PySpark 创建自定义转换。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

  1. Python(熊猫) 并添加以下代码以从名称列中提取姓氏:
    import nltk
    nltk.download('punkt')
    tokens = [nltk.word_tokenize(name) for name in df['Name']] # Extract the last names of the passengers
    df['last_name'] = [token[0] for token in tokens]

  2. 预览 查看结果。

以下屏幕截图显示了 last_name 列提取。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

  1. 使用以下代码添加另一个自定义转换步骤以识别姓氏的频率分布:
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. 预览 审查结果的频率。使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

使用 AWS AI 服务进行自定义转换

AWS 预训练人工智能服务为您的应用程序和工作流提供现成的智能。 AWS AI 服务可以轻松地与您的应用程序集成,以解决许多常见的使用案例。 您现在可以将 AWS AI 服务的功能用作 Data Wrangler 中的自定义转换步骤。

亚马逊领悟 使用 NLP 提取有关文档内容的见解。 它通过识别文档中的实体、关键短语、语言、情感和其他常见元素来发展洞察力。

我们使用 Amazon Comprehend 从名称列中提取实体。 完成以下步骤:

  1. 添加自定义转换步骤。
  2. Python(熊猫).
  3. 输入以下代码以提取实体:
    import boto3
    comprehend = boto3.client("comprehend") response = comprehend.detect_entities(LanguageCode = 'en', Text = df['name'].iloc[0]) for entity in response['Entities']:
    print(entity['Type'] + ":" + entity["Text"])

  4. 预览 并将结果可视化。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

我们现在在 Data Wrangler 中添加了三个自定义转换。

  1. 数据流 可视化端到端数据流。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

使用 NumPy 和 SciPy 进行自定义转换

NumPy的 是 Python 的开源库,提供全面的数学函数、随机数生成器、线性代数例程、傅立叶变换等。 SciPy的 是一个用于科学计算和技术计算的开源 Python 库,包含优化、线性代数、积分、插值、特殊函数、快速傅立叶变换 (FFT)、信号和图像处理、求解器等模块。

Data Wrangler 自定义转换允许您将 Python、PySpark 和 SQL 组合为不同的步骤。 在以下 Data Wrangler 流程​​中,来自 Python 包、NumPy 和 SciPy 的不同函数作为多个步骤应用于泰坦尼克号数据集。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

NumPy 转换

泰坦尼克号数据集的票价列有不同乘客的登机费。 票价列的直方图显示均匀分布,但最后一个 bin 除外。 通过应用 NumPy 变换,如对数或平方根,我们可以改变分布(如平方根变换所示)。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。 使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

请参见以下代码:

import pandas as pd
import numpy as np
df["fare_log"] = np.log(df["fare_interpolate"])
df["fare_sqrt"] = np.sqrt(df["fare_interpolate"])
df["fare_cbrt"] = np.cbrt(df["fare_interpolate"])

SciPy 转换

z-score 等 SciPy 函数被用作自定义转换的一部分,以使用均值和标准差对票价分布进行标准化。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

请参见以下代码:

df["fare_zscore"] = zscore(df["fare_interpolate"])
from scipy.stats import zscore

使用 NumPy 和 SciPy 进行约束优化

Data Wrangler 自定义转换可以处理高级转换,例如应用 SciPy 优化函数的约束优化以及将 SciPy 与 NumPy 相结合。 在以下示例中,作为年龄函数的票价没有显示任何可观察到的趋势。 然而,约束优化可以将票价转换为年龄的函数。 这种情况下的约束条件是新的总票价与旧的总票价相同。 Data Wrangler 自定义转换允许您运行 SciPy 优化函数以确定可以在约束条件下将票价转换为年龄函数的最佳系数。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。 使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

在使用 SciPy 和 NumPy 在 Data Wrangler 自定义转换中制定约束优化时,优化定义、目标定义和多个约束可以作为不同的函数提及。 自定义转换还可以带来不同的求解器方法,这些方法作为 SciPy 优化包的一部分提供。 可以通过将最佳系数与原始列相乘并添加到 Data Wrangler 的现有列中来生成新的转换变量。 请参见以下代码:

import numpy as np
import scipy.optimize as opt
import pandas as pd df2 = pd.DataFrame({"Y":df["fare_interpolate"], "X1":df["age_interpolate"]}) # optimization defination
def main(df2):
x0 = [0.1]
res = opt.minimize(fun=obj, x0=x0, args=(df2), method="SLSQP", bounds=[(0,50)], constraints=cons)
return res # objective function
def obj(x0, df2):
sumSquares = np.sum(df2["Y"] - x0*df2["X1"])
return sumSquares # constraints
def constraint1(x0):
sum_cons1 = np.sum(df2["Y"] - x0*df2["X1"]) - 0
return sum_cons1
con1 = {'type': 'eq', 'fun': constraint1}
cons = ([con1]) print(main(df2)) df["new_fare_age_optimized"]=main(df2).x*df2["X1"]

Data Wrangler 自定义转换功能具有 UI 功能,可以显示 SciPy 优化函数的结果,例如最佳系数(或多个系数)的值。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

使用 scikit-learn 的自定义转换

scikit学习 是一个构建在 SciPy 之上的用于机器学习的 Python 模块。 它是一个支持监督和非监督学习的开源 ML 库。 它还提供了用于模型拟合、数据预处理、模型选择、模型评估和许多其他实用程序的各种工具。

离散化

离散化 (否则称为 量化 or 装箱) 提供了一种将连续特征划分为离散值的方法。 某些具有连续特征的数据集可能会受益于离散化,因为离散化可以将连续属性的数据集转换为只有名义属性的数据集。 One-hot编码的离散化特征可以使模型更具表现力,同时保持可解释性。 例如,使用离散器进行预处理可以将非线性引入线性模型。

在下面的代码中,我们使用 KBinsDiscretizer 将 age 列离散化为 10 个 bin:

# Table is available as variable `df`
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np
# discretization transform the raw data
df = df.dropna()
kbins = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='uniform')
ages = np.array(df["age"]).reshape(-1, 1)
df["age"] = kbins.fit_transform(ages)
print(kbins.bin_edges_)

您可以在以下屏幕截图中看到打印的 bin 边缘。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

一次性编码

Embarked 列中的值是分类值。 因此,我们必须将这些字符串表示为数值,以便使用我们的模型执行分类。 我们也可以使用单热编码转换来做到这一点。

Embarked 有三个值:S、C 和 Q。我们用数字表示它们。 请参见以下代码:

# Table is available as variable `df`
from sklearn.preprocessing import LabelEncoder le_embarked = LabelEncoder()
le_embarked.fit(df["embarked"]) encoded_embarked_training = le_embarked.transform(df["embarked"])
df["embarked"] = encoded_embarked_training

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。

清理

当您不使用 Data Wrangler 时,请务必关闭运行它的实例以避免产生额外费用。

Data Wrangler 每 60 秒自动保存一次您的数据流。 为避免丢失工作,请在关闭 Data Wrangler 之前保存您的数据流。

  1. 要将数据流保存在 Studio 中,请选择 文件,然后选择 保存数据牧马人流程.
  2. 要关闭 Data Wrangler 实例,请在 Studio 中选择 运行实例和内核.
  3. 运行应用程序,选择 sagemaker-data-wrangler-1.0 应用程序旁边的关机图标。
  4. 全部关闭 进行确认。

Data Wrangler 在 ml.m5.4xlarge 实例上运行。 此实例从 运行实例 当您关闭 Data Wrangler 应用程序时。

关闭 Data Wrangler 应用程序后,它必须在您下次打开 Data Wrangler 流文件时重新启动。 这可能需要几分钟。

结论

在本文中,我们演示了如何在 Data Wrangler 中使用自定义转换。 我们使用 Data Wrangler 容器中的库和框架来扩展内置的数据转换功能。 这篇文章中的示例代表了所用框架的一个子集。 Data Wrangler 流中的转换现在可以扩展到 DataOps 的管道中。

要了解有关通过 Data Wrangler 使用数据流的更多信息,请参阅 创建和使用数据管理员流Amazon SageMaker定价. 要开始使用 Data Wrangler,请参阅 使用 Amazon SageMaker Data Wrangler 准备 ML 数据. 要了解有关 SageMaker 上的 Autopilot 和 AutoML 的更多信息,请访问 使用 Amazon SageMaker Autopilot 自动化模型开发.


关于作者

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。Meenakshisundaram 坦达瓦拉扬 是 AWS 的高级 AI/ML 专家。 他帮助高科技战略客户进行 AI 和 ML 之旅。 他对数据驱动的人工智能充满热情。

 使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。索维克·库马尔·纳特 是 AWS 的 AI/ML 解决方案架构师。 他在机器学习的端到端设计和解决方案方面拥有丰富的经验; 财务、运营和营销分析中的业务分析; 卫生保健; 供应链; 和物联网。 工作之余,Sovik 喜欢旅行和看电影。

使用 NLTK 和 SciPy PlatoBlockchain 数据智能在 Amazon SageMaker Data Wrangler 中创作自定义转换。垂直搜索。人工智能。阿比盖尔 是 Amazon SageMaker 的一名软件开发工程师。 她热衷于帮助客户在 DataWrangler 中准备数据并构建分布式机器学习系统。 在空闲时间,Abigail 喜欢旅行、远足、滑雪和烘焙。

时间戳记:

更多来自 AWS机器学习