データの正規化
重要
Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。
2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。
- ML Studio (クラシック) から Azure Machine Learning への機械学習プロジェクトの移動に関する情報を参照してください。
- Azure Machine Learning についての詳細を参照してください。
ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
データセットの値を標準範囲内に制約するため、数値データを再スケールします
カテゴリ: データ変換/ スケールと削減
注意
適用対象: Machine Learning Studio (クラシック) のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) で Normalize Data モジュールを使用して、正規化を使用してデータセットを変換する方法について説明します。
正規化は、機械学習のためにデータを準備する一環として、適用されることが多い手法です。 正規化の目的は、値の範囲の差異がゆがんだり、情報を失ったりすることなく、共通スケールで使用できるように、データセット内の数値列の値を変更することです。 正規化は、一部のアルゴリズムでデータを正しくモデル化するためにも必要です。
たとえば、0 から 1 までの範囲の値を含む 1 つの列と、10,000 から 100,000 までの範囲の値を含むもう 1 つの列がある入力データセットがあるとします。 モデリング中のフィーチャーとして値を結合しようとした場合、数値のスケールにおける大きな違いによって問題が発生する場合があります。
正規化では、モデルで使用されるすべての数値列にわたって適用されるスケール内に値を保持しながら、ソース データで一般的な分布と比率を維持する新しい値を作成することで、これらの問題を回避します。
このモジュールでは、数値を変換するために、いくつかのオプションが提供されます。
- すべての値を 0-1 スケールに変換したり、絶対値ではなく、パーセンタイル順位として表すことで、値を変換したりすることができます。
- 1 つの列、または同じデータセット内の複数の列に正規化を適用できます。
- 実験を繰り返す必要があったり、同じ正規化の手順を他のデータに適用したりする場合は、正規化の変換として手順を保存し、同じスキーマを含む他のデータセットに適用することができます。
警告
一部のアルゴリズムでは、モデルをトレーニングする前に、データを正規化する必要があります。 他のアルゴリズムでは、独自のデータのスケーリングや正規化を実行します。 そのため、予測モデルのビルドで使用する機械学習アルゴリズムを選ぶ場合、トレーニング データに正規化を適用する前に、アルゴリズムのデータ要件を確認してください。
データの正規化を構成する方法
このモジュールを使用するときは、1 つの正規化メソッドのみを適用できます。 そのため、同じ正規化メソッドが、選択したすべての列に適用されます。 異なる正規化メソッドを使用するには、Normalize Data (データの正規化) の 2 つ目のインスタンスを使用します。
Normalize Data (データの正規化) モジュールを自分の実験に追加します。 モジュールは、Machine Learning Studio (クラシック) の [データ変換] の [スケールと削減] カテゴリにあります。
すべての数値で少なくとも 1 列を含むデータセットに接続します。
列セレクターを使用して、正規化する数値列を選びます。 個別の列を選択しない場合、既定では、入力にあるすべての数値型の列が含まれ、同じ正規化のプロセスが選択したすべての列に適用されます。
正規化されるべきではない数値列を含める場合は、予期しない結果につながる可能性があります。 常に、慎重に列を確認してください。
数値列が検出されない場合、列のメタデータを確認して、列のデータ型がサポートされる数値型であることを確認します。
ヒント
特定の型の列が入力として確実に提供されようにするには、Normalize Data (データの正規化) の前に、Select Columns in Dataset (データセット内の列の選択) モジュールを使用するようにします。
[Use 0 for constant columns when checked](チェック時に定数の列に 0 を使用する): 任意の数値列に 1 つの変わらない値が含まれるときに、このオプションを選択します。 これにより、このような列は正規化の操作で使用されなくなります。
[変換方法] ドロップダウン リストから、選択したすべての列に適用する 1 つの数学関数を選択します。
[Zscore] : すべての値を Z スコアに変換します。
列の値は、次の数式を使用して変換されます。
平均と標準偏差は、各列でそれぞれ計算されます。 母標準偏差が使用されます。
[MinMax] : 最小最大ノーマライザーは、すべての特徴を [0,1] 間隔に再スケーリングします。
最小値が 0 になるように、各機能の値がシフトされ、新しい最大値 (元の最大値と最小値の差) で区切られることで、[0,1] 間隔に縦横比が変更されます。
列の値は、次の数式を使用して変換されます。
Logistic: 列の値は、次の数式を使用して変換されます。
LogNormal: このオプションでは、すべての値が対数スケールに変換されます。
列の値は、次の数式を使用して変換されます。
ここでの μ と σ は、各列ごとに最大推定確率値から経験的に計算される分布のパラメーターです。
TanH: すべての値が双曲線正接に変換されます。
列の値は、次の数式を使用して変換されます。
実験を実行するか、Normalize Data (データの正規化) モジュールをダブルクリックして [Run Selected]\(選択した項目を実行\) を選択します。
結果
Normalize Data (データの正規化) モジュールでは、2 つの出力が生成されます。
変換された値を表示するには、モジュールを右クリックして、[Transformed dataset]\(変換後のデータセット\) を選択し、[Visualize]\(可視化\) をクリックします。
既定では、値はその場で変換されます。 変換された値を元の値と比較する場合は、[ 列の追加] モジュールを使用してデータセットを再結合し、列を並べて表示します。
別の同様のデータセットに同じ正規化メソッドを適用できるように、変換を保存するには、モジュールを右クリックして、[Transformation function]\(変換関数\) を選択し、[Save as Transform]\(変換として保存\) をクリックします。
ナビゲーション ウィンドウの左側の [変換] グループから保存された変換を読み込み、Apply Transformation を使用することで同じスキーマを使ってデータセットに適用することができます。
例
機械学習で正規化を使用する方法の例については、 Azure AI ギャラリーを参照してください。
- 信用リスク予測: このサンプルでは、クラス列である信用リスク スコアを除くすべての数値データに正規化が適用されます。 次の使用例は、すべての数値特徴を 0 から 1 の範囲内の値に変換する tanh 変換を使用します。
テクニカル ノート
このモジュールでは、「 方法 」セクションに記載されている標準の正規化方法のみがサポートされており、マトリックス正規化やその他の複雑な変換はサポートされていません。
カスタム正規化方法を作成する必要がある場合は、 R スクリプトの実行 モジュールまたは Python スクリプトの実行 モジュールを使用して、変換を計算して適用できます。
正規化を適用するアルゴリズム
共通のスケールを使用するように特徴を正規化することは、多くの機械学習アルゴリズムの一般的な要件です。
線形分類アルゴリズムでは、インスタンスは複数次元空間でのベクトルと見なされます。 生データの値の範囲は広く異なるため、目標のいくつかの関数は正規化なしでは正しく機能しません。 たとえば、特徴の 1 つが幅広い範囲の値を持つ場合、ポイント間の距離はこの特定の特徴によって左右されます。
そのため、数値の特徴を正規化して、各特徴がほぼ比例して最終的な距離に影響を与えるようにする必要があります。 これにより、速度と精度の点で大きな改善が見込まれます。
ロジスティック回帰アルゴリズムと平均パーセプトロン アルゴリズムを使用する場合、既定では、特徴はトレーニング前に正規化されます。
参考資料とリソース
データに適した正規化の種類がわからない場合は、次のリソースを参照してください。
マイ データの推奨モジュール: Azure ML チームのメンバーによるこのカスタム モジュールは、データセットを評価し、データのクリーニングとスケーリングの手順を推奨します。
特徴のスケーリング: ウィキペディアのこの記事では、数値データの正規化に使用される基本的な方法について説明します。
データ マイニングのデータ準備 では、多くのデータ準備手順について詳しくは説明します。 データ正規化の詳細については、第 7 章を参照してください。
想定される入力
名前 | Type | 説明 |
---|---|---|
データセット | データ テーブル | 入力データセット |
モジュールのパラメーター
名前 | Range | Type | Default | 説明 |
---|---|---|---|---|
変換方法 | any | TransformationMethods | ZScore | スケーリングに使用される数学的方法を選択します |
変換する列 | any | ColumnSelection | NumericAll | 選択した変換を適用するすべての列を選択します |
出力
名前 | Type | 説明 |
---|---|---|
変換されたデータセット | データ テーブル | 変換されたデータセット |
変換関数 | ITransform インターフェイス | 他のデータセットに適用できる変換関数の定義 |
例外
例外 | 説明 |
---|---|
エラー 0001 | データ セットで指定した列のうち 1 つまたは複数が見つからない場合、例外が発生します。 |
エラー 0003 | 1 つまたは複数の入力が null または空の場合、例外が発生します。 |
エラー 0017 | 指定した 1 つ以上の列の型が現在のモジュールでサポートされていない場合に、例外が発生します。 |
エラー 0020 | モジュールに渡された一部のデータセットの列の数が少なすぎる場合、例外が発生します。 |
エラー 0021 | モジュールに渡された一部のデータセットの行の数が少なすぎる場合、例外が発生します。 |
Studio (クラシック) モジュールに固有のエラーの一覧については、「Machine Learningエラー コード」を参照してください。
API の例外の一覧については、「REST API エラー コードMachine Learning」を参照してください。