# TalendのML特徴処理アルゴリズム

このトピックでは、tModelEncoderコンポーネントで使える特徴処理アルゴリズムを紹介します。

## HashingTF

テキスト処理アルゴリズムとして、HashingTFは入力データを固定長の特徴ベクターに変換し、入力データ内のこれらの単語の出現頻度を計算することにより、単語(単語または単語のシーケンス)の重要性を反映します。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

Spark Batch Jobでは、通常、IDF (Inverse Document Frequency)アルゴリズムと共に使い、重み計算の信頼性を高めます。Talend Sparkジョブのコンテキストでは、2番目のtModelEncoderを配置して、HashingTF計算の出力に[Inverse document frequency] (文献出現頻度の逆数)アルゴリズムを適用する必要があります。

データは、HashingTF計算に送信する前に既にセグメント化されている必要があります。したがって、使うデータがセグメント化されていない場合は、別のtModelEncoderを使って[Tokenizer] (トークナイザー)アルゴリズムまたは[Regex tokenizer] (正規表現トークナイザー)アルゴリズムを適用し、データを準備する必要があります。

SparkでのHashingTF実装の詳細は、Sparkドキュメントの[HashingTF](https://spark.apache.org/docs/latest/ml-features.html#tf-idf-hashingtf-and-idf)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Object
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| numFeatures | 特徴ベクターの次元を定義する特徴の数。<br><br>たとえば、numFeatures=2^20^と入力して次元を定義できます。パラメーターを指定しない場合は、デフォルト値の2^20^が使われます。<br><br>出力ベクターはスパースベクターです。たとえば、"tModelEncoder transforms your data to features."というドキュメントは、numFeatures=3を配置すれば(3,[0,1,2],[1.0,2.0,3.0])に変換できます。<br><br>スパースベクターの読み取り方法は、 [Local vector](http://spark.apache.org/docs/latest/mllib-data-types.html#local-vector)をご覧ください。 |

HashingTFのSpark APIの詳細は、[ML HashingTF](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/HashingTF.html)をご覧ください。

感情分析モデルを作成する目的で、機械学習ファミリーからのコンポーネントの分類またはクラスタリング用にデータを準備するために使えます。

## 文献出現頻度の逆数

テキスト処理アルゴリズムとして、[Inverse document frequency] (文献出現頻度の逆数) (IDF)は、出現するドキュメントが多すぎる用語の重要性を控えめに扱う目的で、HashingTF計算の出力を処理ためによく使われます。

このアルゴリズムはSpark Batchジョブで利用できます。

入力データを提供するためにHashingTF計算を実行するtModelEncoder コンポーネントを必要とします。

SparkでのIDF実装の詳細は、Sparkドキュメンテーションで[IDF](https://spark.apache.org/docs/latest/ml-features.html#tf-idf-hashingtf-and-idf)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| minDocFreq | 用語を含む必要があるドキュメントの最小数。この数値は、項がIDF計算に関連するようになることを示すしきい値です。<br><br>たとえば、minDocReq=5を配置すると、ある用語が4つのドキュメントのみに含まれている場合、その用語は無関係と見なされ、IDFは適用されません。<br><br>このIDFアルゴリズムのSpark APIの詳細は、[ML feature IDF](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/IDF.html)をご覧ください。 |

感情分析モデルを作成する目的で、機械学習ファミリーからのコンポーネントの分類またはクラスタリング用にデータを準備するために使えます。

## Word2Vector

Word2Vectorは、テキスト類似度計算などの他の学習計算で使うために、ドキュメントを特徴ベクターに変換します。

このアルゴリズムはSpark Batchジョブで利用できます。

SparkでのWord2Vector実装の詳細は、Sparkドキュメンテーションで[Word2Vec](https://spark.apache.org/docs/latest/ml-features.html#word2vec)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: List
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| maxIter | 最適な結果を得るための最大反復回数。たとえば、maxIter=5。 |
| minCount | トークンがWord2Vectorモデルの語彙に含まれているように見える必要のある最小回数。デフォルトはminCount=5。 |
| numPartitions | パーティションの数 |
| seed | ランダムなシード番号。 |
| stepSize | 各反復のステップのサイズ。これは学習率を定義します。 |
| vectorSize | 各特徴ベクターのサイズ。デフォルトはvectorSize=100です。これにより、ドキュメントを識別するために100個の数値が計算されます。 |

複数のパラメーターを設定する必要がある場合は、maxIter=5;minCount=4のようにセミコロン(;)を使ってパラメーターを区切ります。

Word2VectorのSpark APIについては、[Word2Vec](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/Word2Vec.html)をご覧ください。

たとえば、製品に関する同様のユーザーコメントを見つける目的で、機械学習ファミリーからのコンポーネントの分類またはクラスタリング用にデータを準備するために使えます。

## CountVectorizer

CountVectorizerは、テキストドキュメントのコレクションから最も頻度の高い用語を抽出し、トークンカウントのベクターに変換します。

このアルゴリズムはSpark Batchジョブで利用できます。

[List] (リスト)タイプの入力データを提供するために、[Tokenizer] (トークナイザー)または[Regex tokenizer] (正規表現トークナイザー)計算を実行するtModelEncoderコンポーネントを必要とします。

SparkのCountVectorizer実装の詳細は、[CountVectorizer](https://spark.apache.org/docs/latest/ml-features.html#countvectorizer)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: List
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| minDF | ある用語がCountVectorizerによって作成された語彙に含まれるために出現する必要のあるドキュメントの最小数。<br><br>デフォルト値はminDF=1です。0と1の間の値を入力した場合は、ドキュメントの比率を意味します。 |
| minTF | ドキュメント内の希な用語を無視するために使われるしきい値。頻度がminTFの値を下回る用語は無視されます。<br><br>デフォルト値はminTF=1です。 |
| vocabSize | CountVectorizerによって作成された各語彙ベクターの最大サイズ。<br><br>デフォルト値は2^18^ です。 |

CountVectorizerのSpark APIについては、[CountVectorizer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/CountVectorizer.html)をご覧ください。

これは、分類コンポーネントまたはクラスタリングコンポーネントのテキストマイニングに関して、テキストを処理するためによく使います。

## Binarizer

Binarizerは、指定されたしきい値を使って、値が1.0または0.0のいずれかに分布されるバイナリ特徴に特徴を変換します。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

SparkでのBinarizer実装の詳細は、Sparkドキュメンテーションで[Binarizer](https://spark.apache.org/docs/latest/ml-features.html#binarizer)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Double
* 出力カラムのタイプ: Doubler

| パラメーター | 説明 |
| --- | --- |
| threshold | 連続する特徴を2値化するために使うしきい値。しきい値より大きい特徴は1.0に、しきい値以下の特徴は0.0に2値化されます。<br><br>デフォルトはthreshold=0.0です。 |

BinarizerのSpark APIについては、[ML Binarizer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/Binarizer.html)をご覧ください。

たとえば、このユーザーの満足または不満を示すユーザーコメントを推定する目的で、機械学習ファミリーからのコンポーネントの分類またはクラスタリング用にデータを準備するために使えます。

## Bucketizer

Bucketizerは、定義された境界値を使って、連続する特徴を特徴バケットのカラムに分割します。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

SparkでのBucketizer実装の詳細は、Sparkドキュメンテーションで[Bucketizer](https://spark.apache.org/docs/latest/ml-features.html#bucketizer)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Double
* 出力カラムのタイプ: Doubler

| パラメーター | 説明 |
| --- | --- |
| splits | 連続する特徴をバケットに分割するために使うパラメーター。バケットは片側のレンジ[x,y)であり、同様にyを含む最後のバケットを除き、指定する境界値(xとy)によって定義されます。<br><br>たとえば、splits=Double.NEGATIVE\_INFINITY, -0.5, 0.0, 0.5, Double.POSITIVE\_INFINITYのように指定すると、値は-0.5, 0.3, 0.0, 0.2のように分割されます。ターゲットカラムの上限と下限が不明な場合は、Double.NEGATIVE\_INFINITYとDouble.POSITIVE\_INFINITYを使うことをお勧めします。 |

BucketizerのSpark APIについては、[Bucketizer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/Bucketizer.html)をご覧ください。

モデルの分類またはクラスタリングのトレーニング用にカテゴリーデータを準備するために使えます。

## 離散コサイン変換(DCT)

Sparkの[Discrete Cosine Transform] (離散コサイン変換)は、1次元DCT-IIを実装して、時間領域の実数値ベクターを周波数領域の同じ長さの別の実数値ベクターに変換します。すなわち、入力データは異なる周波数で振動する一連の余弦波に変換されます。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

Vectorタイプの入力データを提供するには、ベクター生成変換を実行するコンポーネントが必要です。たとえば、このコンポーネントの候補は次のとおりです。

* [Vector assembler] (Vectorアセンブラー)などのアルゴリズムを使うtModelEncoderコンポーネント

* tMatchModelコンポーネント

SparkのDCT実装については、[DCT](https://spark.apache.org/docs/latest/ml-features.html#discrete-cosine-transform-dct)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| inverse | 逆DCT計算(inverse=trueの場合)または順DCT計算(inverse=falseの場合)のどちらを実行するかを示すブール値。<br><br>デフォルトではinverse=falseです。 |

Discrete Cosine TransformのSpark APIについては、[DCT](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/DCT.html)をご覧ください。

関連する分類またはクラスタリングモデルをトレーニングするための画像と音声の処理に広く使われています。

## MinMaxScaler

MinMaxScalerは、各特徴ベクターを固定範囲に再スケーリングします。

Vectorタイプの入力データを提供するには、ベクター生成変換を実行するコンポーネントが必要です。たとえば、このコンポーネントの候補は次のとおりです。

* [Vector assembler] (Vectorアセンブラー)などのアルゴリズムを使うtModelEncoderコンポーネント

* tMatchModelコンポーネント

このアルゴリズムはSpark Batchジョブで利用できます。

SparkのMinMaxScaler実装については、[MinMaxScaler](https://spark.apache.org/docs/latest/ml-features.html#minmaxscaler)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| min | 変換後の各ベクターの下限。デフォルトではmin=0です。 |
| max | 変換後の各ベクターの上限。デフォルトではmax=1です。 |

MinMaxScalerのSpark APIについては、[MinMaxScaler](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/MinMaxScaler.html)をご覧ください。

特定の範囲内に収まるように特徴を正規化するために使います。これは通常、たとえばピクセル強度に関するデータを正規化するために、画像処理で使います。

## N-gram

N-gramは、トークン化された文字列(多くの場合は単語)をコンマ区切りのN-gramの配列に変換します。各プログラム内では、単語はスペースで区切られています。たとえば、2-gramsを作成する場合、文字列Good morning Worldは(good morning, morning world)に変換されます。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

[List] (リスト)タイプの入力データを提供するために、[Tokenizer] (トークナイザー)または[Regex tokenizer] (正規表現トークナイザー)計算を実行するtModelEncoderコンポーネントを必要とします。

SparkのN-gram実装については、[NGram](https://spark.apache.org/docs/latest/ml-features.html#n-gram)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: List
* 出力カラムのタイプ: List

| パラメーター | 説明 |
| --- | --- |
| n | 各n-gramの最小長。デフォルトではn=1、つまり、1-gramまたはunigramです。 |

N-gramのSpark APIについては、[NGram](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/NGram.html)をご覧ください。

関連する分類またはクラスタリングモデルのデータを準備するために、音声認識などの自然言語処理で頻繁に使います。

## 正規子

[Normalizer] (正規子)は、学習計算のパフォーマンスを向上させるために、入力データの各ベクターを正規化して単位ノルムを持たせます。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

SparkのNormalizer実装については、Sparkドキュメンテーションで[Normalizer](https://spark.apache.org/docs/latest/ml-features.html#normalizer)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| pNormValue | 入力フローから単位ノルムへの特徴ベクターの標準化に使うpノルム値。<br><br>デフォルトはpNormValue=2で、[ユークリッドノルム](https://en.wikipedia.org/wiki/Euclidean_distance)を使うことを意味します。 |

[Normalizer] (正規子)のSpark APIについては、[Normalizer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/Normalizer.html)をご覧ください。

テキスト分類(tLogicRegressionModel など)またはテキストクラスタリングのパフォーマンスを最終的に向上させるために、TF-IDF計算の結果を正規化するために使えます。

## one-hotエンコーダー

[One hot encoder] (one-hotエンコーダー)は、カテゴリー特徴のラベルインデックスのカラムをバイナリコードのカラムにマッピングすることにより、連続特徴がカテゴリー特徴を使うことを期待するアルゴリズムを有効にします。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

[String indexer] (文字列Indexer)アルゴリズムで別のtModelEncoderコンポーネントを使って、ラベルインデックスのこのカラムを作成できます。

SparkのOneHotEncoder実装については、Sparkドキュメンテーションで[OneHotEncoder](https://spark.apache.org/docs/latest/ml-features.html#onehotencoder)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Double
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| dropLast | 最後のカテゴリーを削除するかどうかを決定するために使うブール値のパラメーター。<br><br>デフォルトはdropLast=trueです。つまり、最後のカテゴリーが削除され、このカテゴリーの出力ベクターには0のみが含まれ、各ベクターが使うストレージ領域は1ビット少なくなります。この設定により、出力ベクターのストレージ領域を節約できます。 |

[One hot encoder] (one-hotエンコーダー)のSpark APIについては、[OneHotEncoder](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/OneHotEncoder.html)をご覧ください。

tLogicRegressionModelなどの分類コンポーネントまたはクラスタリングコンポーネントに特徴データを提供するために使えます。

## PCA

PCAは、直交変換を実装して、相関する特徴のベクターを線形に相関しない特徴のベクターに変換します。これにより、高次元の特徴ベクターを低次元の特徴ベクターに投影できます。

このアルゴリズムはSpark Batchジョブで利用できます。

Vectorタイプの入力データを提供するには、ベクター生成変換を実行するコンポーネントが必要です。たとえば、このコンポーネントの候補は次のとおりです。

* [Vector assembler] (Vectorアセンブラー)などのアルゴリズムを使うtModelEncoderコンポーネント

* tMatchModelコンポーネント

SparkのPCA実装については、Sparkドキュメンテーションで[PCA](https://spark.apache.org/docs/latest/ml-features.html#pca)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| k | 生成する主コンポーネントの数。この値は、出力される特徴ベクターの次元を決定します。たとえばk=3は、3次元の特徴ベクターが出力されることを意味します。PCAとその主コンポーネントの詳細は、[Principal component analysis](https://en.wikipedia.org/wiki/Principal_component_analysis)をご覧ください。 |

PCAのSpark APIについては、[PCA](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/PCA.html)をご覧ください。

通常、クラスタリングの問題を解決するための特徴を準備するために使えます。

## 多項式近似展開

[Polynomial expansion] (多項式近似展開)は、学習計算のパフォーマンスを向上させるために入力特徴を拡張します。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

Sparkでの[Polynomial expansion] (多項式近似展開)実装については、Sparkドキュメンテーションで[PolynomialExpansion](https://spark.apache.org/docs/latest/ml-features.html#polynomialexpansion)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector
* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| degree | 拡張する多項式の次数。特徴の次数をより高く拡張すると、多くの場合、作成する必要があるモデルの精度が高くなりますが、次数が高すぎると、同じモデルに基づく予測分析の結果が過剰適合になる可能性があります。<br><br>デフォルトはdegree=2、つまり、入力特徴を2次多項式空間に拡張することを意味します。 |

[Polynomial expansion] (多項式近似展開)のSpark APIについては、[Polynomial expansion](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/PolynomialExpansion.html)をご覧ください。

tLogicRegressionModelなどの分類コンポーネントまたはクラスタリングコンポーネント用に特徴データを処理するために使えます。

## QuantileDiscretizer

QuantileDiscretizerは、連続する特徴のカラムを読み取り、これらの特徴データからデータのサンプルを分析し、それに応じて、連続する特徴のデータをほぼ等しい部分にグルーピングするカテゴリー特徴のカラムを出力します。

このアルゴリズムはSpark Batchジョブで利用できますが、EMR 5.8のSpark 2.2とは互換性がありません。

SparkのQuantileDiscretizer実装については、Sparkドキュメンテーションで[QuantileDiscretizer](https://spark.apache.org/docs/latest/ml-features.html#quantilediscretizer)をご覧ください。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Double
* 出力カラムのタイプ: Doubler

| パラメーター | 説明 |
| --- | --- |
| numBuckets | 入力データをグルーピングするバケットの最大数。この値は2以上でなければなりません。デフォルト値はnumBuckets=2です。 |

QuantileDiscretizerのSpark APIについては、[Quantile Discretizer](https://spark.apache.org/docs/latest/api/java/index.html#org.apache.spark.ml.feature.QuantileDiscretizer)をご覧ください。

モデルの分類またはクラスタリングのトレーニング用にカテゴリーデータを準備するために使えます。

## 正規表現トークナイザー

[Regex tokenizer] (正規表現トークナイザー)は、指定された正規表現パターンに基づいて高度なトークン化を実行します。

SparkでのRegexTokenizer実装の詳細は、Sparkドキュメンテーションで[RegexTokenizer](https://spark.apache.org/docs/latest/ml-features.html#tokenizer)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: String
* 出力カラムのタイプ: ObjectとList

| パラメーター | 説明 |
| --- | --- |
| gaps | 正規表現が1つ以上の空白文字を使って入力テキストを分割するか(gaps=trueの場合)、またはトークンを繰り返し照合するか(gaps=falseの場合)、を示すために使うブール値のパラメーター。<br><br>デフォルトでは、このパラメーターはtrueに設定されており、デフォルトの区切り文字は\\s+で、1つ以上の文字に一致します。 |
| pattern | 入力テキストのトークンと一致する正規表現パターンを設定するために使うパラメーター。 |
| minTokenLength | 最小の長さを使って一致するトークンをフィルタリングするために使うパラメーター。空の文字列を返さないように、デフォルト値は1です。 |

複数のパラメーターを設定する必要がある場合は、gaps=true;minTokenLength=4のようにセミコロン(;)を使ってパラメーターを区切ります。

[Regex tokenizer] (正規表現トークナイザー)のSpark APIについては、[RegexTokenizer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/RegexTokenizer.html)をご覧ください。

これは、分類コンポーネントまたはクラスタリングコンポーネント(tRandomForestModelなど)のテキストマイニングに関して、スパムフィルターモデルなどを作成する目的で、テキストを処理するためによく使います。

## トークナイザー

[Tokenizer] (トークナイザー)は、入力テキスト(多くの場合は文)を個々の用語(多くの場合は単語)に分割します。

これらの単語はすべて小文字に変換されます。

Sparkでの[Tokenizer] (トークナイザー)実装の詳細は、Sparkドキュメンテーションで[Tokenizer](https://spark.apache.org/docs/latest/ml-features.html#tokenizer)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: String
* 出力カラムのタイプ: ObjectとList

Tokenizerに追加のパラメーターを設定する必要はありません。

[Tokenizer] (トークナイザー)のSpark APIについては、[Tokenizer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/Tokenizer.html)をご覧ください。

これは、分類コンポーネントまたはクラスタリングコンポーネント(tRandomForestModelなど)のテキストマイニングに関して、スパムフィルターモデルなどを作成する目的で、テキストを処理するためによく使います。

## SqlTransformer

SQLTransformerでは、Spark SQLステートメントを使って特徴変換を実装できます。Sparkドキュメンテーションに示されている制限が適用されます。

これらの制限とSparkのSQLTransformer実装については、Sparkドキュメンテーションで[SQLTransformer](https://spark.apache.org/docs/latest/ml-features.html#sqltransformer)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: すべてのタイプ。SQLステートメントで使うするカラムを選択する必要があります

* 出力カラムのタイプ: すべてのタイプ: SQLステートメントに応じて定義する必要があります

| パラメーター | 説明 |
| --- | --- |
| statement | 入力データの選択または変換に使うSpark SQLステートメント。 |

SQLTransformerのSpark APIについては、[SQLTransformer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/SQLTransformer.html)をご覧ください。

データを柔軟に抽出および変換して、他の機械学習アルゴリズムの特徴を準備したり、他の機械学習アルゴリズムの結果でクエリーを直接実行したりできます。

また、tSqlRowを使ってSpark SQLクエリーを効率的に実行したり、tMapを使ってデータを結合したりして、データを準備することもできます。

## スタンダードスケーラー

[Standard scaler] (標準スケーラー)は、正規分布の一般的なケースである単位標準偏差(単位分散)を持つように各入力ベクターを標準化します。標準化されたデータにより、収束率が向上し、非常に大きな分散を持つ特徴がモデルのトレーニング中に過度に大きな影響を与えることを防止できます。

Sparkでの標準Scaler実装の詳細は、Sparkドキュメンテーションで[標準Scaler](https://spark.apache.org/docs/latest/ml-features.html#standardscaler)をご覧ください。

このアルゴリズムはSpark Batchジョブで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector

* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| withMean | スケーリングの前に、特徴データの各ベクターを平均でセンタリングする(つまり、これらの数値のそれぞれから特徴番号の平均を引く)かどうかを示すために使われるブール値パラメーター。データを中央に配置すると、密な出力が構築されるため、入力データがスパースの場合、例外が発生します。<br><br>デフォルトでは、このパラメーターはfalseに設定されています。つまり、中央揃えは行われません。 |
| withStd | 単位標準偏差を持つように入力データをスケーリングするかどうかを示すために使うブール値のパラメーター。<br><br>デフォルトでは、withStdはtrueに設定されています。これは、入力特徴ベクターを正規化して単位標準偏差を持たせることを意味します。 |

複数のパラメーターを設定する必要がある場合は、withMean=true;withStd=trueのようにセミコロン(;)を使ってパラメーターを区切ります。

両方のパラメーターをfalseに設定すると、[Standard scaler] (標準スケーラー)は実際には何もしません。

[Standard scaler] (標準スケーラー)のSpark APIについては、[StandardScaler](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/StandardScaler.html)をご覧ください。

tKMeanModelなどの分類コンポーネントまたはクラスタリングコンポーネント用にデータを準備するために使えます。

## StopWordsRemover

StopWordsRemoverは、ストップワードを入力語文字列から除外します。

[List] (リスト)タイプの入力データを提供するために、[Tokenizer] (トークナイザー)または[Regex tokenizer] (正規表現トークナイザー)計算を実行するtModelEncoderコンポーネントを必要とします。

SparkでのStopWordsRemover実装の詳細は、Sparkドキュメンテーションで[StopWordsRemover](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/StopWordsRemover.html)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: List

* 出力カラムのタイプ: List

| パラメーター | 説明 |
| --- | --- |
| caseSensitive | ストップワードの除外で大文字と小文字を区別するかどうかを示すブール値。デフォルトでは、値はcaseSensitive=falseです。 |
| stopWords | フィルタリングに使うストップワードのリストを定義します。デフォルトではstopWords=Englishです。これらのデフォルトのストップワードのリストは、[stop_words](http://ir.dcs.gla.ac.uk/resources/linguistic_utils/stop_words)で確認できます。<br><br>ストップワードのカスタムリストを使う必要がある場合は、たとえばstopWords=the,stop,wordsのように、このパラメーターを使ってストップワードを直接入力できます。 |

ストップワードの詳細は、[wikipediaでStop words](https://en.wikipedia.org/wiki/Stop_words)をご覧ください。

StopWordsRemoverのSpark APIは、[StopWordsRemover](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/StopWordsRemover.html)をご覧ください。

テキスト処理でできるだけ多くのノイズを回避するために、多くの場合あまり意味を持たない最も一般的な単語を削除します。

## 文字列Indexer

[String indexer] (文字列Indexer)は、カテゴリー特徴(文字列タイプのラベル)のインデックスを生成します。これらのインデックスは、[One hot encoder] (one-hotエンコーダー)などの他のアルゴリズムで使い、同等の連続特徴を構築できます。

インデックスは頻度の順に並べられ、最も頻繁なラベルはインデックス0を取得します。

SparkでのStringIndexer実装の詳細は、Sparkドキュメンテーションで[StringIndexer](https://spark.apache.org/docs/latest/ml-features.html#stringindexer)をご覧ください。

このアルゴリズムはSpark Batchジョブで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: String

* 出力カラムのタイプ: Doubler

[String indexer] (文字列Indexer)に追加のパラメーターを設定する必要はありません。

[String indexer] (文字列Indexer)のSpark APIについては、[StringIndexer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/StringIndexer.html)をご覧ください。

[String indexer] (文字列Indexer)と[One hot encoder] (one-hotエンコーダー)により、連続特徴がカテゴリー特徴を使うことを想定するアルゴリズムが有効になります。

## Vector Indexer

[Vector indexer] (Vector Indexer)は、maxCategoriesパラメーターの定義に基づいてカテゴリー特徴カラムを識別し、識別された各カラムからカテゴリーに0から始まるインデックスを付けます。他のカラムは連続特徴カラムとして宣言され、インデックスが作成されません。

SparkでのVectorIndexer実装の詳細は、Sparkドキュメンテーションで[VectorIndexer](https://spark.apache.org/docs/latest/ml-features.html#vectorindexer)をご覧ください。

このアルゴリズムはSpark Batchジョブで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector

* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| maxCategories | ベクターカラムがカテゴリー特徴を表すか連続特徴を表すかを示すしきい値を設定するために使うパラメーター。たとえば、maxCategories=2を配置すると、3つ以上の異なる値を含むカラムは連続特徴カラムとして宣言され、他のカラムはカテゴリー特徴カラムとして宣言されます。<br><br>デフォルトはmaxCategories=20です。 |

[Vector indexer] (Vector Indexer)のSpark APIについては、[VectorIndexer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/VectorIndexer.html)をご覧ください。

[Vector indexer] (Vector Indexer)は、カテゴリー特徴にインデックスを付け、tRandomForestModelによって実行されるディシジョンツリー計算などのアルゴリズムがカテゴリー特徴を適切に処理できるようにします。

## Vectorアセンブラー

[Vector assembler] (Vectorアセンブラー)は、選択された入力カラムを1つの単一のベクターカラムに結合し、他のアルゴリズムまたはベクター特徴を想定する機械学習計算で使えるようにします。

[Vector assembler] (Vectorアセンブラー)は、異なるカラムから取得された特徴を再計算しません。これらの特徴カラムを1つのベクターに結合するだけで、特徴はそのままにします。

[Vector assembler] (Vectorアセンブラー)を選択すると、tModelEncoderの[Basic settings] (基本設定)ビューで[Transformation table] (変換テーブル)の[Input column] (入力カラム)カラムが無効になり、[Parameters] (パラメーター)カラムの*inputCols*パラメーターを使って、組み合わせる入力カラムを選択する必要があります。

SparkでのVectorAssembler実装の詳細は、Sparkドキュメンテーションで[VectorAssembler](https://spark.apache.org/docs/latest/ml-features.html#vectorassembler)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: 数値型、ブール値型、Vector型

* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| inputCols | 1つのVectorカラムに結合される入力カラムを示すために使うパラメーター。たとえば、inputCols=id,country\_codeを配置してidカラムとcountry\_codeカラムを組み合わせることができます。 |

[Vector assembler] (Vectorアセンブラー)のSpark APIについては、[VectorAssembler](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/VectorAssembler.html)をご覧ください。

[Vector assembler] (Vectorアセンブラー)は、ロジスティック回帰計算、またはtLogisticRegressionModelやtRandomForestModelなどのコンポーネントによって実行されるディシジョンツリー計算のための特徴ベクターを準備します。

## ChiSqSelector

ChiSqSelectorは、独立性のカイ2乗検定に基づいて特定の特徴カテゴリーへの特徴の関連性を判定し、それらのカテゴリーに最も関連する特徴を選択します。

SparkでのChiSqSelector実装の詳細は、Sparkドキュメンテーションで[ChiSqSelector](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/ChiSqSelector.html)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector、Double、List

* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| featuresCol | ChiSqSelectorによって選択される特徴を提供する入力カラム。このカラムのタイプは Vectorである必要があります。 |
| labelCol | 使う特徴のカテゴリーを提供する入力カラム。この入力カラムのタイプは Doubleである必要があります。 |
| numTopFeatures | ChiSqSelectorが特徴カテゴリーに最も関連性があると定義し、出力するために選択する特徴の数。デフォルトでは、このパラメーターはnumTopFeatures=50で、最も関連性の高い特徴の上位50を選択することを意味します。 |

たとえば、ローン検証の分析では、featuresというカラムとlabelというカラムが用意されています。前者のカラムにはaddress、 age、incomeなどの借り手候補に関する特徴があり、後者のカラムには各候補者のローンを検証するかどうかを示すカテゴリーがあります。これらのカラムをChiSqSelectorで利用するには、featuresCol=features,labelCol=labelを配置する必要があります。

さらに、関連性が最も高い1つの特徴のみを選択する場合はnumTopFeatures=1を配置します。すると、income特徴が選択されます。代わりにnumTopFeatures=2を配置すると、関連性が高い上位2つの特徴、incomeとageが選択されます。

ChiSqSelectorのSpark APIについては、[ChiSqSelector](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/ChiSqSelector.html)をご覧ください。

これを使って、トレーニング分類またはクラスタリングモデルの最も予測力のある特徴を生成できます。

## RFormula

Rformulaを使うと、特徴ラベルと共に特徴Vectorを生成できます。Sparkドキュメンテーションに示されている制限が適用されます。

これらの制限とSparkのRFormula実装については、Sparkドキュメンテーションで[RFormula](https://spark.apache.org/docs/latest/ml-features.html#rformula)をご覧ください。

このアルゴリズムはSpark Batchジョブで利用できますが、EMR 5.8のSpark 2.2とは互換性がありません。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: 文字列型と数値型。使うカラムを選択するには、R式を使う必要があります。

* 出力カラムのタイプ: 特徴にはVector、ラベルには Double

| パラメーター | 説明 |
| --- | --- |
| featuresCol | 特徴データを保持するために使う出力カラム。 |
| labelCol | 特徴ラベルを保持するために使う出力カラム。 |
| formula | 適用するR式。 |

たとえば、[Transformation table] (変換テーブル)の[Parameters] (パラメーター)カラムにfeaturesCol=features;labelCol=label;formula=clicked ~ country + hourを配置した場合、featuresカラムとlabelカラムを出力スキーマに追加し、前者のカラムをタイプVectorに、後者をタイプDoubleに設定する必要があります。次に、変換中にformulaパラメーターを使って定義されたR式が入力カラムに適用され、特徴がfeaturesカラムに生成され、特徴ラベルがlabelカラムに生成されます。この例は、Sparkドキュメンテーションの[Rformula](https://spark.apache.org/docs/latest/ml-features.html#rformula)で説明されている例に基づいています。

RFormulaのSpark APIについては、[R Formula](https://spark.apache.org/docs/latest/ml-features.html#rformula)をご覧ください。

R式を適用して特徴データを準備できます。

## VectorSlicer

VectorSlicerは、特徴Vectorを読み取り、*indices*パラメーターの値に基づいてこのVectorから特徴を選択し、選択した特徴を出力カラムの新しいVectorに書き込みます。

Vectorタイプの入力データを提供するには、ベクター生成変換を実行するコンポーネントが必要です。たとえば、このコンポーネントの候補は次のとおりです。

* [Vector assembler] (Vectorアセンブラー)などのアルゴリズムを使うtModelEncoderコンポーネント

* tMatchModelコンポーネント

SparkのVectorSlicer実装については、Sparkドキュメンテーションで[VectorSlicer](https://spark.apache.org/docs/latest/ml-features.html#vectorslicer)をご覧ください。

このアルゴリズムは、Spark BatchおよびSpark Streaming Jobsで利用できます。

ジョブでは、このアルゴリズムは以下を想定しています。

* 入力カラムのタイプ: Vector

* 出力カラムのタイプ: Vector

| パラメーター | 説明 |
| --- | --- |
| indices | 選択して出力する特徴の数値インデックス。たとえば、次のVector、[0.0, 10.0, 0.5]の2番目と3番目の特徴を選択する必要がある場合は、indices=1,2を配置する必要があります。すると、Vector [10.0, 0.5]が出力カラムに書き込まれます。<br><br>出力Vectorの特徴は、それらのインデックスに従って順序付けられます。 |

VectorSlicerのSpark APIについては、[VectorSlicer](https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/feature/VectorSlicer.html)をご覧ください。ただし、namesパラメーターはtModelEncoderではサポートされていません。

これにより、使う特徴を正確に選択できます。