データ処理のためのMLTransform
|
キー付きデータに一般的な機械学習(ML)処理タスクを適用するには、MLTransform
を使用します。Apache Beamは、MLTransform
で使用できるMLデータ処理変換を提供します。使用可能なデータ処理変換の完全なリストについては、GitHubのtft.pyファイルを参照してください。
MLTransform
を使用してデータ処理変換を定義するには、入力パラメーターとしてcolumns
を使用してデータ処理変換のインスタンスを作成します。指定されたcolumns
のデータは変換され、beam.Row
オブジェクトに出力されます。
次の例は、MLTransform
を使用して、データセット全体の最小値と最大値を使用してデータを0から1に正規化する方法を示しています。MLTransform
はScaleTo01
変換を使用します。
scale_to_z_score_transform = ScaleToZScore(columns=['x', 'y'])
with beam.Pipeline() as p:
(data | MLTransform(write_artifact_location=artifact_location).with_transform(scale_to_z_score_transform))
この例では、MLTransform
はwrite_artifact_location
の値を受け取ります。MLTransform
はこの場所の値を使用して、変換によって生成されたアーティファクトを書き込みます。データ処理変換を渡すには、MLTransform
のwith_transform
メソッドまたはリストを使用できます。
MLTransform(transforms=transforms, write_artifact_location=write_artifact_location)
MLTransform
に渡された変換は、データセットに対して順次適用されます。MLTransform
は辞書を期待し、NumPy配列を含む変換された行オブジェクトを返します。
例
次の例は、MLTransform
を使用してデータの前処理を行うパイプラインを作成する方法を示しています。
MLTransform
はデータセット全体を完全に処理できます。これは、データセット全体を分析した後にのみ単一の要素を変換する必要がある場合に役立ちます。最初の2つの例では、データ変換を完了するためにデータセット全体を完全に処理する必要があります。
ComputeAndApplyVocabulary
変換の場合、変換はデータセット内のすべての固有の単語にアクセスする必要があります。ScaleTo01
変換の場合、変換はデータセット内の最小値と最大値を知る必要があります。
例1
この例は、MLTransform
を使用してデータを0から1にスケーリングするパイプラインを作成します。この例は、整数のリストを受け取り、ScaleTo01
変換を使用して0から1の範囲に変換します。
import apache_beam as beam
from apache_beam.ml.transforms.base import MLTransform
from apache_beam.ml.transforms.tft import ScaleTo01
import tempfile
data = [
{
'x': [1, 5, 3]
},
{
'x': [4, 2, 8]
},
]
artifact_location = tempfile.mkdtemp()
scale_to_0_1_fn = ScaleTo01(columns=['x'])
with beam.Pipeline() as p:
transformed_data = (
p
| beam.Create(data)
| MLTransform(write_artifact_location=artifact_location).with_transform(
scale_to_0_1_fn)
| beam.Map(print))
出力
例2
この例は、MLTransform
を使用してデータセット全体でボキャブラリを計算し、各固有のボキャブラリ項目にインデックスを割り当てるパイプラインを作成します。これは、要素のリストではなく、単一の要素を入力として受け取ります。
import apache_beam as beam
from apache_beam.ml.transforms.base import MLTransform
from apache_beam.ml.transforms.tft import ComputeAndApplyVocabulary
import tempfile
artifact_location = tempfile.mkdtemp()
data = [
{
'x': ['I', 'love', 'Beam']
},
{
'x': ['Beam', 'is', 'awesome']
},
]
compute_and_apply_vocabulary_fn = ComputeAndApplyVocabulary(columns=['x'])
with beam.Pipeline() as p:
transformed_data = (
p
| beam.Create(data)
| MLTransform(write_artifact_location=artifact_location).with_transform(
compute_and_apply_vocabulary_fn)
| beam.Map(print))
出力
例3
この例は、MLTransform
を使用してデータセット全体でボキャブラリを計算し、各固有のボキャブラリ項目にインデックスを割り当てるパイプラインを作成します。このパイプラインは、要素のリストではなく、単一の要素を入力として受け取ります。
import apache_beam as beam
from apache_beam.ml.transforms.base import MLTransform
from apache_beam.ml.transforms.tft import ComputeAndApplyVocabulary
import tempfile
data = [
{
'x': 'I'
},
{
'x': 'love'
},
{
'x': 'Beam'
},
{
'x': 'Beam'
},
{
'x': 'is'
},
{
'x': 'awesome'
},
]
artifact_location = tempfile.mkdtemp()
compute_and_apply_vocabulary_fn = ComputeAndApplyVocabulary(columns=['x'])
with beam.Pipeline() as p:
transformed_data = (
p
| beam.Create(data)
| MLTransform(write_artifact_location=artifact_location).with_transform(
compute_and_apply_vocabulary_fn)
| beam.Map(print))
出力
最終更新日:2024年10月31日
探しているものはすべて見つかりましたか?
すべて役に立ち、分かりやすかったですか?変更したいことはありますか?お知らせください!