機能の変換手法
変換は、データをモデルのトレーニングや分析に適した形式に変換または拡張し、最適なパフォーマンスと精度を確保するための重要な前処理ステップです。 このドキュメントは、補足構文リソースとして機能し、データ前処理の主要な機能変換技術に関する詳細を提供します。
マシンラーニングモデルは文字列値やnull値を直接処理できないため、データの前処理が不可欠です。 このガイドでは、様々な変換を使用して欠落値を入力し、カテゴリデータを数値形式に変換し、ワンホットエンコーディングやベクトル化などの機能スケーリング手法を適用する方法について説明します。 これらの方法により、モデルはデータを解釈し、データから効果的に学習して、パフォーマンスを向上させることができます。
特徴量の自動変換 automatic-transformations
CREATE MODEL コマンドでTRANSFORM句をスキップすると、機能の変換が自動的に行われます。 自動データ前処理には、null置換と(データタイプに基づく)標準特徴変換が含まれます。 数値列とテキスト列が自動的に入力された後、データがマシンラーニングモデルのトレーニングに適した形式になるように特徴変換を行います。 このプロセスには、データ入力の欠落や、カテゴリ、数値、ブール値の変換が含まれます。
次の表は、CREATE MODEL コマンド中にTRANSFORM句が省略された場合に、異なるデータ型がどのように処理されるかを示しています。
ヌル置換 automatic-null-replacement
ml_unknown キーワードに置き換えられます。FALSE値に置き換えられます。機能変換 automatic-feature-transformation
例
CREATE model modelname options(model_type='logistic_reg', label='rating') AS SELECT * FROM movie_rating;
手動特徴量の変換 manual-transformations
CREATE MODEL ステートメントでカスタムデータ前処理を定義するには、TRANSFORM句を任意の数の使用可能な変換関数と組み合わせて使用します。 これらの手動前処理関数は、TRANSFORM句の外でも使用できます。 以下の トランスフォーマーセクション で説明されているすべての変換は、データを手動で前処理するために使用できます。
主な特徴 key-characteristics
前処理関数を定義する際に考慮すべき機能変換の主な特性は次のとおりです。
-
構文:
TRANSFORM(functionName(colName, parameters) <aliasNAME>)- エイリアス名は構文で必須です。 エイリアス名を指定する必要があります。指定しないと、クエリは失敗します。
-
パラメーター: パラメーターは位置引数です。 つまり、各パラメーターは特定の値のみを使用でき、カスタム値が指定されている場合は、先行するすべてのパラメーターを指定する必要があります。 どの関数がどの引数を取るかについて詳しくは、関連するドキュメントを参照してください。
-
トランスフォーマのチェーン:あるトランスフォーマの出力が別のトランスフォーマへの入力になる場合があります。
-
機能の使用状況:最後の機能変換が機械学習モデルの機能として使用されます。
例
CREATE MODEL modelname
TRANSFORM(
string_imputer(language, 'adding_null') AS imp_language,
numeric_imputer(users_count, 'mode') AS imp_users_count,
string_indexer(imp_language) AS si_lang,
vector_assembler(array(imp_users_count, si_lang, watch_minutes)) AS features
)
OPTIONS(MODEL_TYPE='logistic_reg', LABEL='rating')
AS SELECT * FROM df;
使用可能な変換 available-transformations
19件の変換が利用可能です。 これらの変換は、一般変換、数値変換、 カテゴリ変換、 テキスト変換に分割されます。
一般的な変換 general-transformations
この節では、幅広いデータタイプに使用されるトランスフォーマについて詳しく説明します。 この情報は、カテゴリ データやテキスト データに固有でない変換を適用する必要がある場合に不可欠です。
数値入力 numeric-imputer
数値インピュータ トランスは、データセット内の欠落している値を完了します。 これは、欠落した値が配置されている列の平均、中央値、またはモードを使用します。 入力列はDoubleTypeまたはFloatTypeのいずれかである必要があります。 詳しい情報と例については、Spark アルゴリズムのドキュメント を参照してください。
データタイプ
- 入力データタイプ:数値
- 出力データタイプ:数値
定義
transformer(numeric_imputer(hour, 'mean') hour_imputed)
パラメーター
STRATEGYmean、median、mode]です。入力前の例
入力後の例(平均戦略を使用)
文字列インピュッター string-imputer
文字列インピュータ トランスフォーマは、ユーザーが提供した文字列を関数引数として使用して、データセット内の欠落した値を完了します。 入力列と出力列はstring データ型である必要があります。
データタイプ
- 入力データタイプ:文字列
- 出力データタイプ:文字列
定義
transform(string_imputer(name, 'unknown_name') as name_imputed)
パラメーター
NULL_REPLACEMENT入力前の例
入力後の例(「ml_unknown」を置換として使用)
ブーリアンインピュター boolean-imputer
ブール型インピュータ トランスは、ブール型カラムのデータセットに欠落している値を完了します。 入力列と出力列はBoolean タイプである必要があります。
データタイプ
- 入力データタイプ:ブール値
- 出力データタイプ:ブール値
定義
transform(boolean_imputer(name, true) as name_imputed)
パラメーター
NULL_REPLACEMENTtrue、false]。入力前の例
入力後の例(「true」を置換として使用)
ベクターアセンブラ vector-assembler
VectorAssembler トランスフォーマは、指定された入力列のリストを1つのベクトル列に結合し、機械学習モデルで複数のフィーチャを簡単に管理できるようにします。 これは、未加工のフィーチャと、異なるフィーチャ トランスフォーマによって生成されたフィーチャを1つの統合フィーチャ ベクトルに結合する場合に特に便利です。 VectorAssemblerは、数値型、ブール型、ベクトル型の入力列を受け入れます。 各行では、入力列の値が、指定した順序でベクトルに連結されます。
データタイプ
- 入力データタイプ:
array[string](数値/配列[数値]値を持つ列名) - 出力データ型:
Vector[double]
定義
transform(vector_assembler(id, hour, mobile, userFeatures) as features)
パラメーター
変換前の例
変換後の例
数値変換 numeric-transformations
この節では、数値データの処理とスケーリングに使用できるトランスフォーマについて説明します。 これらのトランスフォーマは、データセット内の数値フィーチャを処理および最適化するために必要です。
バイナライザー binarizer
Binarizer トランスフォーマは、二値化と呼ばれるプロセスを通じて、数値フィーチャをバイナリ (0/1)フィーチャに変換します。 指定されたしきい値より大きい特徴量は1.0に変換され、しきい値以下の特徴量は0.0に変換されます。 Binarizerは、入力列のVector型とDouble型の両方をサポートしています。
データタイプ
- 入力データタイプ:数値列
- 出力データタイプ:数値
定義
transform(numeric_imputer(rating, 'mode') rating_imp, binarizer(rating_imp) rating_binarizer)
パラメーター
THRESHOLD二値化の前の入力例
二値化後の出力例(デフォルトのしきい値は0.0)
カスタムしきい値を持つ定義
transform(numeric_imputer(age, 'mode') age_imp, binarizer(age_imp, 14.0) age_binarizer)
二値化後の出力例(しきい値が14.0)
バケタイザー bucketizer
Bucketizer トランスフォーマは、ユーザーが指定したしきい値に基づいて、連続するフィーチャの列をフィーチャ バケットの列に変換します。 このプロセスは、連続データを個別のビンまたはバケットに分割するのに便利です。 Bucketizerには、バケットの境界を定義するsplits パラメーターが必要です。
データタイプ
- 入力データタイプ:数値列
- 出力データタイプ:数値(バインドされた値)
定義
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, max_abs_scaler(vec_assembler) as maxScaling, min_max_scaler(maxScaling) as features)
パラメーター
splitsn+1個の分割で、n個のバケットがあります。 分割は厳密に増加する順序である必要があり、範囲(x,y)はyを含む最後のバケットを除いて各バケットに使用されます。分割の例
- Array (Double.NegativeInfinity, 0.0, 1.0, Double.PositiveInfinity)
- Array (0.0, 1.0, 2.0)
分割は、Double値の範囲全体をカバーする必要があります。そうでない場合、指定された分割の範囲外の値はエラーとして扱われます。
変換の例
この例では、連続したフィーチャの列(course_duration)を取り出し、指定されたsplitsに従ってビン化し、結果のバケットを他のフィーチャと組み合わせます。
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, max_abs_scaler(vec_assembler) as maxScaling, min_max_scaler(maxScaling) as features)
MinMaxScaler minmaxscaler
MinMaxScaler トランスフォーマは、ベクトル行のデータセット内の各フィーチャを指定された範囲(通常は[0、1])に再スケールします。 これにより、すべての機能がモデルに均等に貢献します。 この機能は、グラデーション降下ベースのアルゴリズムなど、機能のスケーリングに影響を受けるモデルで特に便利です。 MinMaxScalerは、次のパラメーターで動作します。
- min:すべての機能で共有される、変換の下限。 デフォルトは
0.0です。 - max:すべての機能で共有される変換の上限。 デフォルトは
1.0です。
データタイプ
- 入力データ型:
Array[Double] - 出力データ型:
Array[Double]
定義
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, max_abs_scaler(vec_assembler) as maxScaling, min_max_scaler(maxScaling) as features)
パラメーター
minmax変換の例
次の使用例は、一連のフィーチャを変換し、他の複数の変換を適用した後、MinMaxScalerを使用して指定した範囲に再スケールします。
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, max_abs_scaler(vec_assembler) as maxScaling, min_max_scaler(maxScaling) as features)
MaxAbsScaler maxabsscaler
MaxAbsScaler トランスフォーマは、ベクトル行のデータセット内の各フィーチャを、各フィーチャの最大絶対値で割って、[-1, 1]の範囲に再スケールします。 この変換は、正の値と負の値の両方を持つデータセットのスパースを保持するのに最適です。これは、データのシフトや中央に配置されないためです。 このため、MaxAbsScalerは、距離計算を含むなど、入力フィーチャのスケールに影響を受けやすいモデルに特に適しています。
データタイプ
- 入力データ型:
Array[Double] - 出力データ型:
Array[Double]
定義
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, max_abs_scaler(vec_assembler) as maxScaling)
パラメーター
変換の例
この例では、MaxAbsScalerを含む複数の変換を適用して、フィーチャを[-1、1]の範囲に拡張します。
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, max_abs_scaler(vec_assembler) as maxScaling)
Normalizer normalizer
Normalizerは、ベクトル行のデータセット内の各ベクトルを正規化して、単位ノルムを持つトランスフォーマです。 このプロセスは、ベクトルの方向を変更することなく、一貫したスケールを確保します。 この変換は、距離測定やその他のベクターベースの計算に依存するマシンラーニングモデルで特に便利です。特に、ベクトルの大きさが大幅に異なる場合に便利です。
データタイプ
- 入力データ型:
array[double]/vector[double] - 出力データ型:
vector[double]
定義
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, normalizer(vec_assembler, 3) as normalized)
パラメーター
pp-normを指定します(例:1-norm、2-normなど)。変換の例
この例では、指定されたp-normを使用して一連の機能を正規化するために、Normalizerを含む複数の変換を適用する方法を示します。
TRANSFORM(binarizer(time_spent, 5.0) as binary, bucketizer(course_duration, array(-440.5, 0.0, 150.0, 1000.7)) as buck_features, vector_assembler(array(buck_features, users_count, binary)) as vec_assembler, normalizer(vec_assembler, 3) as normalized)
QuantileDiscretizer quantilediscretizer
QuantileDiscretizerは、連続的な特徴を持つ列を連結されたカテゴリ特徴に変換するトランスで、ビン数はnumBuckets パラメーターで決まります。 バケットの実際の数は、十分な分位数を作成するのに明確な値が少なすぎると、指定された数よりも小さくなる場合があります。
この変換は、連続データの表現を簡素化したり、カテゴリ情報により効果的に動作するアルゴリズムに備えたりする場合に特に便利です。
データタイプ
- 入力データタイプ:数値列
- 出力データタイプ:数値列(カテゴリ)
定義
TRANSFORM(quantile_discretizer(hour, 3) as result)
パラメーター
NUM_BUCKETS変換の例
この例では、QuantileDiscretizerが連続するフィーチャの列(hour)を3つのカテゴリ別グループにビン化する方法を示します。
TRANSFORM(quantile_discretizer(hour, 3) as result)
離脱前と離脱後の例
StandardScaler standardscaler
StandardScalerは、ベクトル行のデータセット内の各特徴を正規化して、単位標準偏差および/またはゼロ平均を持つトランスフォーマです。 このプロセスにより、特徴が一貫したスケールでゼロを中心にあると仮定するアルゴリズムにデータがより適しています。 この変換は、SVM、ロジスティック回帰、ニューラルネットワークなどのマシンラーニングモデルにとって特に重要です。そこでは、標準化されていないデータがコンバージェンスの問題や精度の低下につながる可能性があります。
データタイプ
- 入力データ型:ベクター
- 出力データタイプ:ベクター
定義
TRANSFORM(standard_scaler(feature) as ss_features)
パラメーター
withStdwithMean変換の例
この例では、StandardScalerを一連の機能に適用し、単位標準偏差とゼロ平均で正規化する方法を示します。
TRANSFORM(standard_scaler(feature) as ss_features)
カテゴリ変換 categorical-transformations
この節では、マシンラーニングモデルのカテゴリデータを変換および前処理するために設計された、使用可能なトランスフォーマの概要について説明します。 これらの変換は、数値ではなく、異なるカテゴリやラベルを表すデータポイント用に設計されています。
StringIndexer stringindexer
StringIndexerは、ラベルの文字列列を数値インデックスの列にエンコードするトランスフォーマです。 インデックスは0 ~ numLabelsの範囲で、ラベルの頻度で並べ替えられます(最も頻繁に使用されるラベルは0のインデックスを受け取ります)。 入力列が数値の場合、インデックス作成の前に文字列にキャストされます。 ユーザーが指定した場合、見えないラベルをインデックス numLabelsに割り当てることができます。
この変換は、カテゴリ文字列データを数値形式に変換する場合に特に便利で、数値入力を必要とするマシンラーニングモデルに適しています。
データタイプ
- 入力データタイプ:文字列
- 出力データタイプ:数値
定義
TRANSFORM(string_indexer(category) as si_category)
パラメーター
StringIndexerは、操作に追加のパラメーターを必要としません。変換の例
この例では、StringIndexerをカテゴリ フィーチャに適用し、それを数値インデックスに変換する方法を示します。
TRANSFORM(string_indexer(category) as si_category)
OneHotEncoder onehotencoder
OneHotEncoderは、ラベルインデックスの列をスパース バイナリ ベクトルの列に変換するトランスフォーマです。各ベクトルには、最大で1つの値があります。 このエンコーディングは、ロジスティック回帰などの数値入力を必要とするアルゴリズムに、カテゴリデータを効果的に組み込ませる場合に特に便利です。
データタイプ
- 入力データタイプ:数値
- 出力データタイプ:ベクトル [Int]
定義
TRANSFORM(string_indexer(category) as si_category, one_hot_encoder(si_category) as ohe_category)
パラメーター
変換の例
この例では、最初にStringIndexerをカテゴリ フィーチャに適用し、次にOneHotEncoderを使用してインデックス値をバイナリ ベクトルに変換する方法を示します。
TRANSFORM(string_indexer(category) as si_category, one_hot_encoder(si_category) as ohe_category)
テキスト変換 textual-transformations
この節では、テキストデータを処理し、マシンラーニングモデルで使用できる形式に変換するために使用できるトランスフォーマーについて詳しく説明します。 このセクションは、自然言語データやテキスト分析を扱う開発者にとって非常に重要です。
CountVectorizer countvectorizer
CountVectorizerは、テキストドキュメントのコレクションをトークン数のベクトルに変換するトランスフォーマで、コーパスから抽出された語彙に基づいてスパース表現を生成します。 この変換は、各ドキュメント内のトークンの頻度を表すことで、LDA (Latent Dirichlet Allocation)などのマシンラーニングアルゴリズムで使用できる数値形式にテキストデータを変換するために不可欠です。
データタイプ
- 入力データ型:配列[文字列]
- 出力データタイプ:高密度ベクトル
定義
TRANSFORM(count_vectorizer(texts) as cv_output)
パラメーター
VOCAB_SIZEvocabSize語のみを考慮する語彙を作成します。MIN_DOC_FREQMAX_DOC_FREQMIN_TERM_FREQ変換の例
この例では、CountVectorizerがテキスト配列のコレクションをトークン数のベクトルに変換し、スパース表現を生成する方法を示します。
TRANSFORM(count_vectorizer(texts) as cv_output)
ベクトル化の前後の例
NGram ngram
NGramはn グラムのシーケンスを生成するトランスフォーマです。n グラムは、一部の整数(𝑛)に対する(‘𝑛’)トークンのシーケンス(通常は単語)です。 出力は、連続する単語’𝑛’のスペース区切り文字列で構成され、マシンラーニングモデル、特に自然言語処理に焦点を当てたモデルの特徴として使用できます。
データタイプ
- 入力データ型:配列[文字列]
- 出力データタイプ:配列[文字列]
定義
TRANSFORM(tokenizer(review_comments) as token_comments, ngram(token_comments, 3) as n_tokens)
パラメーター
N変換の例
この例では、テキストデータから派生したトークンのリストから、NGram トランスフォーマが3 グラムのシーケンスを作成する方法を示します。
TRANSFORM(tokenizer(review_comments) as token_comments, ngram(token_comments, 3) as n_tokens)
n グラム変換の前後の例
StopWordsRemover stopwordsremover
StopWordsRemoverは、文字列のシーケンスからストップワードを削除し、意味のない一般的な単語をフィルタリングするトランスフォーマです。 トークン化子の出力など、文字列のシーケンスを入力として受け取り、stopWords パラメーターで指定されたすべてのストップワードを削除します。
この変換は、テキストデータを前処理し、全体的な意味に大きく影響しない単語を排除することで、下流のマシンラーニングモデルの有効性を向上させるのに役立ちます。
データタイプ
- 入力データ型:配列[文字列]
- 出力データタイプ:配列[文字列]
定義
TRANSFORM(stop_words_remover(raw) as filtered)
パラメーター
stopWords変換の例
この例では、StopWordsRemoverがトークンのリストから一般的な英語のストップワードを除外する方法を示します。
TRANSFORM(stop_words_remover(raw) as filtered)
単語の削除の前後の例
カスタムのストップワードを含む例
この例では、ストップワードのカスタムリストを使用して、入力シーケンスから特定の単語を除外する方法を示します。
TRANSFORM(stop_words_remover(raw, array("red", "I", "had")) as filtered)
カスタム停止ワード削除の前後の例
TF-IDF tf-idf
TF-IDF (Term Frequency-Inverse Document Frequency)は、コーパスに対するドキュメント内の単語の重要度を測定するために使用されるトランスです。 用語の頻度(TF)は、用語\(t\)が文書\(d\)に表示される回数を表し、文書頻度(DF)は、コーパス \(D\)内の文書数\(t\)が用語\(t\)を含む回数を表します。 この方法は、「a」、「the」、「of」など、固有の情報がほとんどない一般的な単語の影響を軽減するために、テキストマイニングで広く使用されています。
この変換は、文書内およびコーパス全体にわたって各単語の重要度に数値を割り当てるため、テキストマイニングや自然言語処理タスクにおいて特に価値があります。
データタイプ
- 入力データ型:配列[文字列]
- 出力データタイプ:ベクトル [Int]
定義
create table td_idf_model transform(tokenizer(sentence) as token_sentence, tf_idf(token_sentence) as tf_sentence, vector_assembler(array(tf_sentence)) as feature) OPTIONS()
パラメーター
NUM_FEATURESMIN_DOC_FREQ変換の例
この例では、TF-IDFを使用して、トークン化された文章を、コーパス全体のコンテキストにおける各用語の重要性を表す特徴ベクトルに変換する方法を示します。
create table td_idf_model transform(tokenizer(sentence) as token_sentence, tf_idf(token_sentence) as tf_sentence, vector_assembler(array(tf_sentence)) as feature) OPTIONS()
Tokenizer tokenizer
Tokenizerは、文章などのテキストを個別の用語(通常は単語)に分割するトランスフォーマーです。 文をトークンの配列に変換することで、テキストの前処理の基本的なステップを実現し、テキスト分析やモデリングプロセスのためにデータを準備します。
データタイプ
- 入力データタイプ:テキスト文
- 出力データタイプ:配列[文字列]
定義
create table td_idf_model transform(tokenizer(sentence) as token_sentence, tf_idf(token_sentence) as tf_sentence, vector_assembler(array(tf_sentence)) as feature) OPTIONS()
パラメーター
Tokenizerは、操作に追加のパラメーターを必要としません。変換の例
この例では、Tokenizerがテキスト処理パイプラインの一部として、文を個々の単語(トークン)に分割する方法を示します。
create table td_idf_model transform(tokenizer(sentence) as token_sentence, tf_idf(token_sentence) as tf_sentence, vector_assembler(array(tf_sentence)) as feature) OPTIONS()
Word2Vec word2vec
Word2Vecは、文書を表す単語のシーケンスを処理し、Word2VecModelをトレーニングする見積もり記号です。 このモデルは、各単語を一意の固定サイズのベクトルにマッピングし、文書内のすべての単語のベクトルを平均して、各文書をベクトルに変換します。 自然言語処理タスクで広く使用されているWord2Vecは、セマンティックな意味をキャプチャする単語の埋め込みを作成し、テキストデータを単語間の関係を表す数値ベクトルに変換し、より効果的なテキスト分析と機械学習モデルを実現します。
データタイプ
- 入力データ型:配列[文字列]
- 出力データタイプ:ベクトル [ ダブル ]
定義
TRANSFORM(tokenizer(review) as tokenized, word2Vec(tokenized, 10, 1) as word2Vec)
パラメーター
VECTOR_SIZEMIN_COUNTWord2Vec モデルの語彙に含まれている必要がある最小回数。変換の例
この例では、Word2Vecがトークン化されたレビューを、文書内の単語ベクトルの平均を表す固定サイズのベクトルに変換する方法を示します。
TRANSFORM(tokenizer(review) as tokenized, word2Vec(tokenized, 10, 1) as word2Vec)
Word2Vec変換の前後の例