NLTK と SciPy を使用して Amazon SageMaker Data Wrangler でカスタム変換を作成する

NLTK と SciPy を使用して Amazon SageMaker Data Wrangler でカスタム変換を作成する

「企業は、コードに集中するのではなく、信頼性が高く、効率的で、体系的な方法でデータを改善するための体系的なエンジニアリング プラクティスの開発に集中する必要があります。 つまり、企業はモデル中心のアプローチからデータ中心のアプローチに移行する必要があります。」 – アンドリュー・ング

データ中心の AI アプローチには、データの準備と機能エンジニアリングを含む高品質のデータを使用して AI システムを構築することが含まれます。 これは、データの収集、検出、プロファイリング、クレンジング、構造化、変換、強化、検証、およびデータの安全な保存を含む面倒な作業になる可能性があります。

AmazonSageMakerデータラングラー のサービスです Amazon SageMakerスタジオ コーディングをほとんどまたはまったく使用せずに、データをインポート、準備、変換、特徴付け、分析するためのエンドツーエンドのソリューションを提供します。 Data Wrangler のデータ準備フローを機械学習 (ML) ワークフローに統合して、データの前処理と機能エンジニアリングを簡素化し、PySpark コードの作成、Apache Spark のインストール、またはクラスターのスピンアップを必要とせずに、データの準備をより迅速に本番環境に移行できます。

データ変換用に独自のカスタム スクリプトを追加する必要があるシナリオでは、Pandas、PySpark、PySpark SQL で変換ロジックを記述できます。 Data Wrangler は、カスタム変換を作成して ML 用のテキスト データを準備し、制約の最適化を実行するために、NLTK および SciPy ライブラリをサポートするようになりました。

データ変換のために独自のカスタム スクリプトを追加する必要があるシナリオに遭遇する場合があります。 Data Wrangler のカスタム変換機能を使用すると、変換ロジックを Pandas、PySpark、PySpark SQL で記述できます。

この投稿では、NLTK でカスタム変換を記述して ML 用のテキスト データを準備する方法について説明します。 また、NLTK、NumPy、SciPy、scikit-learn などの他の一般的なフレームワークや AWS AI サービスを使用したカスタム コード変換の例も紹介します。 この演習では、 タイタニックデータセット、ML コミュニティで人気のあるデータセットで、現在は サンプルデータセット Data Wrangler 内。

ソリューションの概要

Data Wrangler には、データをインポートするための 40 を超える組み込みコネクタが用意されています。 データをインポートしたら、300 を超える組み込みの変換を使用して、データ分析と変換を構築できます。 次に、工業化されたパイプラインを生成して、機能をプッシュすることができます Amazon シンプル ストレージ サービス (Amazon S3)または Amazon SageMaker フィーチャーストア. 次の図は、エンド ツー エンドの高レベル アーキテクチャを示しています。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

前提条件

Data Wrangler は、SageMaker 内で利用可能な機能です Amazon SageMakerスタジオ。 あなたはフォローすることができます Studio のオンボーディング プロセス Studio 環境とノートブックをスピンアップします。 いくつかの認証方法から選択できますが、Studio ドメインを作成する最も簡単な方法は、 クイックスタート手順. クイック スタートは、標準の Studio セットアップと同じデフォルト設定を使用します。 を使用してオンボーディングを選択することもできます AWS IAM アイデンティティ センター (AWS Single Sign-On の後継) 認証用 (参照 IAM Identity Center を使用して Amazon SageMaker ドメインにオンボード).

タイタニック データセットをインポートする

Studio 環境を開始し、新しい データラングラーフロー. 次のスクリーンショットに示すように、独自のデータセットをインポートするか、サンプル データセット (Titanic) を使用できます。 Data Wrangler では、さまざまなデータ ソースからデータセットをインポートできます。 このユースケースでは、S3 バケットからサンプル データセットをインポートします。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

インポートすると、データ フローに XNUMX つのノード (ソース ノードとデータ型ノード) が表示されます。 Data Wrangler は、データセット内のすべての列のデータ型を自動的に識別します。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

NLTK によるカスタム変換

Data Wrangler を使用したデータの準備と機能エンジニアリングでは、300 を超える組み込みの変換を使用するか、独自のカスタム変換を構築できます。 カスタム変換 Data Wrangler 内で別のステップとして記述できます。 これらは、Data Wrangler 内の .flow ファイルの一部になります。 カスタム変換機能は、コード スニペットの異なるステップとして Python、PySpark、および SQL をサポートします。 ノートブック ファイル (.ipynb) が .flow ファイルから生成されるか、または .flow ファイルがレシピとして使用されると、カスタム変換コード スニペットは変更を必要とせずに保持されます。 Data Wrangler のこの設計により、カスタム変換を SageMaker Processing ジョブの一部にして、カスタム変換で大量のデータセットを処理できます。

Titanic データセットには、テキスト情報を含むいくつかの機能 (name と home.dest) があります。 を使用しております NLTK 名前の列を分割して姓を抽出し、姓の頻度を出力します。 NLTK は、人間の言語データを扱う Python プログラムを構築するための主要なプラットフォームです。 使いやすいインターフェースを提供します。 50 を超えるコーパスと語彙リソース WordNet など、分類、トークン化、ステミング、タグ付け、解析、セマンティック推論用の一連のテキスト処理ライブラリ、および強力な自然言語処理 (NLP) ライブラリ用のラッパーを備えています。

新しい変換を追加するには、次の手順を実行します。

  1. プラス記号を選択し、 変換を追加.
  2. 選択する ステップを追加 選択して カスタム変換.

Pandas、PySpark、Python ユーザー定義関数、および SQL PySpark を使用してカスタム変換を作成できます。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、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 Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

  1. 次のコードを使用して、別のカスタム変換ステップを追加して、姓の頻度分布を識別します。
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. 選択する プレビュー 頻度の結果を確認します。NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

AWS AI サービスによるカスタム変換

AWS の事前トレーニング済み AI サービスは、アプリケーションとワークフローに既成のインテリジェンスを提供します。 AWS AI サービスは、アプリケーションと簡単に統合して、多くの一般的なユースケースに対応します。 AWS AI サービスの機能を Data Wrangler のカスタム変換ステップとして使用できるようになりました。

Amazon Comprehend 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 Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

Data Wrangler に XNUMX つのカスタム変換を追加しました。

  1. 選択する データフロー エンドツーエンドのデータ フローを視覚化します。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

NumPy と SciPy によるカスタム変換

NumPy は、包括的な数学関数、乱数ジェネレーター、線形代数ルーチン、フーリエ変換などを提供する Python 用のオープンソース ライブラリです。 SciPy 科学計算および技術計算に使用されるオープンソースの Python ライブラリで、最適化、線形代数、積分、補間、特殊関数、高速フーリエ変換 (FFT)、信号および画像処理、ソルバーなどのモジュールが含まれています。

Data Wrangler カスタム変換を使用すると、Python、PySpark、および SQL を異なるステップとして組み合わせることができます。 次の Data Wrangler フローでは、Python パッケージ、NumPy、および SciPy のさまざまな関数が複数のステップとして Titanic データセットに適用されます。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

NumPy 変換

タイタニック データセットの運賃列には、さまざまな乗客の乗車運賃が含まれています。 運賃列のヒストグラムは、最後のビンを除いて均一な分布を示しています。 対数や平方根などの NumPy 変換を適用することで、分布を変更できます (平方根変換で示されているように)。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。 NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、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 Data Intelligence を使用して、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 Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。 NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、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 カスタム変換機能には、最適係数 (または複数の係数) の値などの SciPy 最適化関数の結果を表示する UI 機能があります。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

scikit-learn によるカスタム変換

scikit-学ぶ SciPy の上に構築された機械学習用の Python モジュールです。 これは、教師あり学習と教師なし学習をサポートするオープンソースの ML ライブラリです。 また、モデルのフィッティング、データの前処理、モデルの選択、モデルの評価、およびその他の多くのユーティリティのためのさまざまなツールも提供します。

離散化

離散化 (別名 量子化 or ビニング) は、連続する特徴を離散値に分割する方法を提供します。 離散化は連続属性のデータセットを名目上の属性のみを持つデータセットに変換できるため、連続フィーチャを含む特定のデータセットは離散化の恩恵を受ける場合があります。 ワンホット エンコードされた離散化された特徴は、解釈可能性を維持しながら、モデルをより表現力豊かにすることができます。 たとえば、離散化器を使用した前処理により、線形モデルに非線形性が導入される可能性があります。

次のコードでは、 KBinsDiscretizer age 列を 10 個のビンに離散化するには、次のようにします。

# 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_)

次のスクリーンショットに印刷されたビンの端を確認できます。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

ワンホット エンコーディング

Embarked 列の値はカテゴリ値です。 したがって、モデルで分類を実行するには、これらの文字列を数値として表す必要があります。 ワンホット エンコーディング変換を使用してこれを行うこともできます。

Embarked には、S、C、および Q の XNUMX つの値があります。これらを数値で表します。 次のコードを参照してください。

# 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 Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。

クリーンアップ

Data Wrangler を使用していないときは、Data Wrangler が実行されているインスタンスをシャットダウンして、追加料金が発生しないようにすることが重要です。

Data Wrangler は、60 秒ごとにデータ フローを自動的に保存します。 作業が失われないように、Data Wrangler をシャットダウンする前にデータ フローを保存してください。

  1. データ フローを Studio に保存するには、次を選択します。 File、を選択します データラングラーの流れを保存.
  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 のパイプラインにスケールインできるようになりました。

データラングラーでのデータフローの使用の詳細については、以下を参照してください。 データラングラーフローの作成と使用 および Amazon SageMakerの価格。 データラングラーの使用を開始するには、を参照してください。 Amazon SageMaker Data Wrangler で ML データを準備する. SageMaker の Autopilot と AutoML の詳細については、次の Web サイトをご覧ください。 AmazonSageMakerAutopilotを使用してモデル開発を自動化する.


著者について

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。ミーナクシスンダラム・タンダヴァラヤン AWSのシニアAI/MLスペシャリストです。 彼は、AIとMLの旅でハイテク戦略アカウントを支援しています。 彼はデータ駆動型AIに非常に情熱を注いでいます。

 NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。ソビック・クマール・ナス AWS の AI/ML ソリューション アーキテクトです。 彼は、機械学習のエンド ツー エンドの設計とソリューションにおいて豊富な経験を持っています。 財務、運用、およびマーケティング分析におけるビジネス分析。 健康管理; サプライチェーン; そしてIoT。 仕事以外では、Sovik は旅行や映画鑑賞を楽しんでいます。

NLTK と SciPy PlatoBlockchain Data Intelligence を使用して、Amazon SageMaker Data Wrangler でカスタム変換を作成します。垂直検索。あい。アビゲイル Amazon SageMaker のソフトウェア開発エンジニアです。 彼女は、顧客が DataWrangler でデータを準備し、分散機械学習システムを構築するのを支援することに情熱を注いでいます。 余暇には、旅行、ハイキング、スキー、パン作りを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習