データをビンにグループ化する
重要
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 (クラシック) の Bins モジュールにグループ データを使用して、数値をグループ化したり、連続データの分布を変更したりする方法について説明します。
Group Data into Bins モジュールでは、データをビン分割するための複数のオプションがサポートされています。 ビンの境界を設定する方法と、値をビンに分配する方法はカスタマイズできます。たとえば、次のように操作できます。
- ビンの境界として機能する一連の値を手動で入力する。
- エントロピー スコアを計算して、各範囲の情報値を決定し、予測モデル内のビンを最適化します。 + 分位数またはパーセンタイル 順位を使用して、ビンに値を割り当てます。
- 各ビン内の値の数を制御することもできます。
- 強制的に値をビンに均等に分散させる。
ビン分割とグループ化の詳細
データのビン分割またはグループ化 (量子化とも呼ばれます) は、機械学習用の数値データを準備する際に重要なツールであり、次のようなシナリオで役立ちます。
連続する数値の列に一意の値が多すぎて効率的にモデル化できないため、自動または手動でグループに値を割り当てて、より小さい個別の範囲のセットを作成します。
たとえば、グループ データによって生成されたエントロピー スコアを Bins に 使用して、データ値の最適なグループ化を識別し、それらのグループをモデルの特徴として使用できます。
数値の列を特定の範囲を表すカテゴリ値に置き換えます。
たとえば、ユーザーの人口統計に対して 1-15、16-22、23-30 などのカスタム範囲を指定することによって、年齢の列の値をグループ化することができます。
データセットには、予想範囲を大きく超えるいくつかの極値が含まれています。これらの値は、トレーニング済みモデルに大きな影響を与えます。 モデルの偏りを軽減するために、分位点 (または等しい高さ) メソッドを使用して、データを均一な分布に変換できます。
Group Data into Bins モジュールでは、このメソッドを使用して、ほぼ同じ数のサンプルが各ビンに入るように、理想的なビンの場所とビンの幅が決定されます。 次に、選択した正規化メソッドに応じて、ビンの値はパーセンタイルに変換されるか、ビン番号にマップされます。
ビン分割の例
次の図は、分位点メソッドを使用してビン分割する前と後の数値の分布を示しています。 左側の生データと比較して、データはビン分割され、単位法線スケールに変換されていることに注目してください。
ビン分割のもう 1 つのアプローチは 、乳がん検出 サンプルで示されています。このサンプルでは、 グループ データを Bins に 使用して、さまざまなコントロールグループとテスト グループに患者を割り当てて、各グループに等しい数の患者が存在することを保証します。
データをグループ化するにはさまざまな方法があり、すべてカスタマイズ可能なため、さまざまなメソッドと値で試してみることをお勧めします。 [例] セクションには、さまざまなビン分割アルゴリズムの使用方法を示すサンプル実験へのリンクが含まれています。
Group Data into Bins の構成方法
Studio (クラシック) で実験 にグループ データを Bins モジュールに追加します。 このモジュールは、[ データ変換] カテゴリの [ スケール] と [削減] にあります。
数値データを含むデータセットをビンに接続します。 量子化は、数値データを含む列にのみ適用できます。
データセットに数値以外の列が含まれている場合は、Select Columns in Dataset モジュールを使用して、使用する列のサブセットを選択します。
ビン分割モードを指定します。 ビン分割モードは他のパラメーターを決定するので、最初に Binning モード オプションを選択してください。 次の種類のビン分割がサポートされています。
Entropy MDL: この方法では、予測する列と、ビンにグループ化する列を選択する必要があります。次に、データを渡し、エントロピーを最小限に抑えるビンの数を決定しようとします。 言い換えると、データ列がターゲット列を最適に予測できるようにする多数のビンを選択します。 次に、データの各行に関連付けられているビン番号を、名前付きの
<colname>quantized
列に返します。Entropy MDL メソッドは、最初にデータをビン分割して適切な予測を行う方法を見つけることができない場合、すべてのデータを均一なビンに割り当てます。 これは、列が適切な予測器ではないことを意味するものではありません。 この場合は、他の方法を使用してエントロピーを最小限に抑えるビンの数を見つけ、データをより適切な予測器にすることができます。
このメソッドは、実際のエントロピー スコアを返しません。
分位点:分位メソッドでは、パーセンタイル順位に基づいて値をビンに割り当てます。 分位点は、等高ビン分割とも呼ばれます。
等幅:このオプションでは、ビンの合計数を指定する必要があります。各ビンの開始値と終了値の間隔が同じになるように、データ列の値がビンに配置されます。 その結果、データが特定のポイント周辺に集中すると、一部のビンに多くの値が含まれることになる場合があります。
カスタム エッジ:各ビンの開始値を指定できます。 エッジ値は、常にビンの下方境界です。 たとえば、値を 2 つのビンにグループ化するとします。1 つは 0 より大きい値、もう 1 つは 0 以下の値でグループ化します。 この場合、ビンエッジの場合、 ビンエッジのコンマ区切りリストに「0」と入力します。 モジュールの出力は、各行の値のビン インデックスを示す 1 と 2 になります。
カスタム開始と停止で等しい幅: このメソッドは[ 等幅 ]オプションに似ていますが、ビンの境界の下限と上限の両方を指定できます。
ビンの数: Entropy MDL、 Quantiles、および 等幅 ビン分割モードを使用している場合は、このオプションを使用して、作成するビンの数 ( 分位) を指定します。
ビン分割する列には、列セレクターを使用して、ビン分割する値を持つ列を選択します。 列のデータ型は数値である必要があります。
選択したすべての適用可能な列に同じビン分割ルールが適用されます。 したがって、別のメソッドを使用していくつかの列をビン分割する必要がある場合は、列の各セットに対して Group Data into Bins の個別のインスタンスを使用します。
警告
許可された型ではない列を選択すると、実行時エラーが発生します。 このモジュールは、許可されていない型の列を検出するとすぐにエラーを返します。 エラーが発生した場合は、選択したすべての列を確認します。 このエラーでは、すべての無効な列が一覧表示されません。
出力モードの場合は、量子化された値を出力する方法を指定します。
追加: ビン分割された値を含む新しい列を作成し、入力テーブルに追加します。
Inplace:元の値をデータセット内の新しい値に置き換えます。
ResultOnly:結果の列のみを返します。
分位点ビン分割モードを選択した場合は、分位の正規化オプションを使用して、分位点に並べ替える前に値を正規化する方法を決定します。 値を正規化すると値が変換されますが、最終的なビン数には影響しないことに注意してください。例については、「 さまざまな正規化方法の効果」を参照してください。
次の正規化の種類がサポートされています。
Percent:値は [0,100] の範囲内で正規化されます
PQuantile:値は [0,1] の範囲内で正規化されます
QuantileIndex: 値は範囲内で正規化されます [1,bins の数]
[カスタム エッジ] オプションを選択した場合は、 [ビンの境界のコンマ区切りの一覧] テキスト ボックスに "ビンの境界" として使用する数値のコンマ区切りリストを入力します。 この値によってビンを分割するポイントがマークされます。そのため、ビンの境界を 1 つ入力すると、2 つのビンが生成され、2 つのビンの境界値を入力すると、3 つのビンが生成されます。
この値は、ビンが作成された順 (昇順) で並べ替える必要があります。
[ カスタム開始と停止で等幅]オプションを使用する場合は、ビンの境界を指定する必要があります。
[最初の 端の位置 ] テキスト ボックスに値を入力して、最初のビンの下限を定義します。
[最後の エッジ位置 ] テキスト ボックスに値を入力して、最後のビンの下限を定義します。
列をカテゴリとしてタグ付けする: このオプションを選択すると、ビン分割された値の列にメタデータ フラグが自動的に追加されます。 メタデータ フラグは、量子化された列をカテゴリ変数として処理する必要があることを示します。
実験を実行するか、このモジュールを選択して[ 実行]をクリックします。
結果
Group Data into Bins モジュールは、指定されたモードに従って、各要素がビンに配置されたデータセットを返します。
また、ビン分割変換も返します。これは、同じビン分割モードとパラメーターを使用してデータの新しいサンプルをビン分割するために Apply Transformation モジュールに渡すことができる関数です。
ビン分割メソッドが予測器としてどの程度機能するかを確認するには、 グループ データから Bins へのデータセット出力をクリックし、ラベル列とビン分割列を比較します。 ビンへのグループ化が予測される場合、クロスタブ マトリックス内の値は、いくつかのセルに集中する必要があります。
ヒント
トレーニング データにビン分割を使用する場合は、テストと予測に使用するデータに対して同じビン分割メソッドを使用する必要があることに注意してください。 これには、ビン分割メソッド、ビンの場所、およびビンの幅が含まれます。
同じビン分割メソッドを使用してデータが常に変換されるようにするには、有効なデータ変換を保存してから、Apply Transformation モジュールを使用して他のデータセットに適用することをお勧めします。
例
機械学習シナリオで量子化を適用する方法の例については、 Azure AI ギャラリーを参照してください。
- 乳がんの検出: このサンプルでは、ビン分割を使用して、患者 ID フィールドを使用して患者を等しいグループに分割します。
- フライト遅延予測: 分位正規化を使用して、ケースを 10 ビンに並べ替えます。
- Twitter センチメント分析: スコアは、ランク付けスコアを表す 5 つのビンにグループ化されます。
テクニカル ノート
このセクションには、実装の詳細、ヒント、よく寄せられる質問への回答が含まれています。
さまざまな正規化方法の影響
[ 分位正規化] オプションを選択すると、ビン分割の前に値が変換されます。 したがって、正規化のために選択する方法は、数値に強い影響を与えます。
たとえば、次の表に、fLength
望遠鏡データセットの 1 つの列の値を、それぞれの正規化方法で変換する方法を示します。 列は、 fLength
各オプションの出力値を示す目的でランダムに選択され、正規分布を持っていません。
ソース (fLength) | pQuantile | QuantileIndex | パーセント |
---|---|---|---|
28.7967 | 0.363636 | 4 | 36.363636 |
31.6036 | 0.454545 | 5 | 45.454545 |
162.052 | 0.909091 | 10 | 90.909091 |
23.8172 | 0.272727 | 3 | 27.272727 |
ビン分割の結果は、各メソッドで似ています。
次の図は、既定の 10 ビンを使用して、ビン分割の前後の列の値の分布を示しています。
実装の詳細
量子化中、各数値はビンエッジの値と比較してビンにマップされます。
たとえば、値が 1.5 で、ビンの端が 1、2、3 の場合、要素は bin 番号 2 にマップされます。 値 0.5 はビン番号 1 (アンダーフロー ビン) にマッピングされ、値 3.5 はビン番号 4 (オーバーフロー ビン) にマッピングされます。
ビン分割 (量子化) する列がスパースの場合、結果の列の入力時にはビンのインデックス オフセット (分位オフセット) が使用されます。 スパース 0 が常にインデックス 0 のビン (つまり、値 0 の分位) に配置されるようにオフセットを選択します。
スパース 0 は、入力から出力列に反映されます。
高密度の列を処理すると、最小ビン インデックスを 1 とする結果が常に生成されます。つまり、最小分位値が列の最小値と等しくなります。 同時に、スパース列の処理では、変数最小ビン インデックス (最小分位値) を含む結果が生成されます。
すべての NaN と欠損値が、入力列から出力列に反映されます。 唯一の例外は、モジュールが分位インデックスを返す場合です。 この場合、NaN は欠損値になります。
ビンのインデックスは 1 から始まります。 これは、分位の自然規則 (第一分位、第二分位など) です。 唯一の例外は、ビン分割する列がスパースの場合です。
想定される入力
名前 | Type | 説明 |
---|---|---|
データセット | データ テーブル | 分析するデータセット |
モジュールのパラメーター
名前 | Range | Type | Default | 説明 |
---|---|---|---|---|
ビン分割モード | List | QuantizationMode | 分位点 | ビン分割方法を選択します |
ビン分割する列 | any | ColumnSelection | NumericAll | 量子化する列を選択します |
出力モード | any | OutputTo | 量子化した列の出力方法を指定します | |
列をカテゴリとしてタグ付け | any | Boolean | true | 出力列をカテゴリとしてタグ付けするかどうかを指定します |
ビン数 | >=1 | Integer | 10 | 必要なビンの数を指定する |
分位の正規化 | any | BinningNormalization | 分位を正規化する方法を選択する | |
最初のエッジの位置 | any | Float | 0.0 | 最初のビンのエッジの値を指定する |
ビンの幅 | any | Float | 0.5 | カスタム ビンの幅を指定する |
最後のエッジの位置 | any | Float | 1.0 | 最後のビンのエッジの値を指定する |
ビンのエッジのコンマ区切りの一覧 | any | String | ビンのエッジとして使用する数字の一覧をコンマ区切りで入力する |
出力
名前 | Type | 説明 |
---|---|---|
量子化したデータセット | データ テーブル | 量子化した列を含むデータセット |
ビン分割変換 | ITransform インターフェイス | 量子化をデータセットに適用する変換 |
例外
例外 | 説明 |
---|---|
エラー 0003 | 1 つまたは複数の入力が null または空の場合、例外が発生します。 |
エラー 0004 | パラメーターが特定の値以下の場合、例外が発生します。 |
エラー 0011 | 渡された列セット引数がデータセットのどの列にも適用されない場合、例外が発生します。 |
エラー 0021 | モジュールに渡された一部のデータセットの行の数が少なすぎる場合、例外が発生します。 |
エラー 0024 | データセットにラベル列が含まれていない場合、例外が発生します。 |
エラー 0020 | モジュールに渡された一部のデータセットの列の数が少なすぎる場合、例外が発生します。 |
エラー 0038 | 予想される要素の数が厳密に要求される値と等しくない場合、例外が発生します。 |
エラー 0005 | パラメーターが特定の値より小さい場合、例外が発生します。 |
エラー 0002 | 1 つまたは複数のパラメーターを解析できない場合、または指定された型からターゲット メソッドで必要な型に変換できない場合、例外が発生します。 |
エラー 0019 | 並べ替えられた値が含まれると予想される列がそうなっていない場合、例外が発生します。 |
エラー 0039 | 操作が失敗した場合に、例外が発生します。 |
エラー 0075 | データセットを量子化するときに無効なビン分割機能を使用すると、例外が発生します。 |
Studio (クラシック) モジュールに固有のエラーの一覧については、「Machine Learningエラー コード」を参照してください。
API の例外の一覧については、「REST API エラー コードMachine Learning」を参照してください。