分類のためのデータ準備
AutoML を使用して分類用のデータを準備する方法について説明します。
この記事では、AutoML が分類トレーニング用にデータを準備する方法と、構成可能なデータ設定について説明します。 これらのオプションは、実験の設定中に AutoML UI で調整できます。
AutoML API を使用したこれらの設定の構成については、AutoML Python API リファレンスを参照してください。
サポートされているデータ機能の型
以下に示す機能の種類のみがサポートされています。 たとえば、イメージはサポート。
次の特徴量の型がサポートされています。
- Numeric (
ByteType
、ShortType
、IntegerType
、LongType
、FloatType
およびDoubleType
) - Boolean
- String (カテゴリまたは英語テキスト)
- Timestamps (
TimestampType
、DateType
) - ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML 以降)
- DecimalType (Databricks Runtime 11.3 LTS ML 以降)
欠損値の補完
Databricks Runtime 10.4 LTS ML 以降では、null 値で補完する方法を指定できます。 UI で、テーブル スキーマの [次で補完] 列のドロップダウンからメソッドを選択します。 API で、imputers
パラメーターを使用します。 詳細については、「 AutoML Python API リファレンスを参照してください。
AutoML では既定で、列の型と内容に基づいて補完方法が選択されます。
注意
既定以外の補完方法を指定した場合、AutoML ではセマンティック型の検出は実行されません。
分類の問題に対する不均衡なデータセットのサポート
Databricks Runtime 11.3 LTS ML 以降では、データセットが不均衡であることが AutoML によって検出されると、主要なクラスをダウンサンプリングしてクラスの重みを追加することで、トレーニング データセットの不均衡の緩和が試行されます。 AutoML ではトレーニング データセットのみが均衡化され、テストおよび検証のデータセットは均衡化されません。 こうすることで、モデルのパフォーマンスが、真の入力クラス分布を示す、エンリッチされていないデータセットに対して常に評価されます。
不均衡なトレーニング データセットを均衡化させるために、AutoML では、特定のクラスがダウンサンプリングされる度合いに反比例するクラスの重みを使用します。 たとえば、100 個のサンプルを含むトレーニング データセットにクラス A に属する 95 個のサンプルとクラス B に属する 5 個のサンプルがある場合、AutoML ではクラス A を 70 個のサンプルにダウンサンプリングする (これはクラス A を 70/95 (つまり 0.736) の比率でダウンサンプリングしている) 一方で、クラス B のサンプル数を 5 個に保つことで、この不均衡を緩和します。 最終的なモデルが正しく調整され、モデル出力の確率分布が入力のものと同じになるようにするために、AutoML ではクラス A のクラスの重みを 1/0.736 (つまり 1.358) の比率でスケールアップする一方で、クラス B の重みを 1 に保ちます。 次に、AutoML ではモデル トレーニングでこれらのクラスの重みをパラメーターとして使用して、モデルのトレーニング時に各クラスのサンプルが適切に重み付けされるようにします。
列の選択
Databricks Runtime 10.3 ML 以降では、AutoML でトレーニングに使用する列を指定できます。 UI で列を除外するには、[含める] 列をオフにします。 API で、exclude_cols
パラメーターを使用します。 詳細については、「 AutoML Python API リファレンスを参照してください。
予測ターゲットとして選択された列、またはデータを分割する時間列 として選択した列を削除することはできません。
既定では、すべての列が含まれます。
トレーニング、検証、テストのセットにデータを分割する
AutoML では、データがトレーニング、検証、テストの 3 つに分割されます。 ML の問題の種類によって、データを分割するオプションは異なります。
次のメソッドを使用して、データをトレーニング、検証、およびテスト セットに分割します。
(既定) ランダム分割: データ分割の戦略が指定されていない場合、データセットは、60% のトレーニング分割、20% の検証分割、20% のテスト分割へと、ランダムに分割されます。 分類の場合、層別ランダム分割を行い、確実に各クラスが、トレーニング、検証、テストのセット内で、適切に表現されるようにします。
時系列分割: Databricks Runtime 10.4 LTS ML 以上では、時間列を選択して、時系列のトレーニング、検証、テストの分割を作成できます。 時系列分割では、最も古いデータ ポイントがトレーニングに、その次に古いものが検証に、最も新しいポイントがテストに使用されます。 時間列は、タイムスタンプ、整数、または文字列で指定できます。
手動分割: Databricks Runtime 15.3 ML 以上では、API を使用して手動分割を設定できます。 分割列を指定し、train
、validate
、test
の値を使用して、トレーニング、検証、テストのデータセットに使用する行を識別します。 分割列に train
、test
、validate
以外の値を含む行はすべて無視され、対応するアラートが発生します。
大規模なデータセットのサンプリング
AutoML では、クラスターのワーカー ノード全体にハイパーパラメーター チューニングの試用版が分散されますが、各モデルは 1 つのワーカー ノードでトレーニングされます。
データセットの読み込みとトレーニングに必要なメモリが AutoML によって自動的に推定され、必要に応じてデータセットがサンプルされます。
Databricks ランタイムのバージョン | サンプリング動作 |
---|---|
9.1 LTS ML - 10.4 LTS ML | サンプリング率は一定であり、 は クラスターのノードの種類またはノードあたりのメモリに依存しません。 |
11.x ML | コアあたりのメモリが多いワーカー ノードのサンプリングの割合 increases 。 サンプル サイズを大きくするには: - メモリ最適化 インスタンス型を使用します。 - Spark 構成で spark.task.cpus を調整します。 既定値は 1 で、最大値はワーカー ノード上の CPU の数です。 最大値は、ワーカー ノード上の CPU の数です。 この値を増やすと、サンプル サイズは大きくなりますが、並列で実行される試行は少なくなります。例: 4 コアと 64 GB RAM を搭載したマシン上: - spark.task.cpus=1 では、ワーカーごとに 4 つの試用版が実行され、それぞれ 16 GB の RAM が使用されます。- spark.task.cpus=4 では、64 GB のすべての RAM を使用して、worker ごとに 1 つの試用版が実行されます。 |
11.3 LTS ML 以降 | AutoML がデータセットをサンプリングする場合、サンプリング率は UI の Overview タブに表示されます。 |
12.2 LTS ML 以降 | AutoML では、トレーニング タスクごとにより多くの CPU コアを割り当てることで、より大きなデータセットを処理できます。 合計メモリが多いインスタンスを選択して、サンプル サイズを増やします。 |
分類の問題の場合、AutoML では PySpark sampleBy
メソッドを使用した階層サンプリングが行われ、ターゲット ラベルのディストリビューションが保持されます。
回帰の問題の場合、AutoML では PySpark sample
メソッドが使用されます。
セマンティック型の検出
Note
- AutoML では、カスタムの補完メソッドが指定されている列に対してはセマンティック型 の検出は実行されません。
Databricks Runtime 9.1 LTS ML 以降では、AutoML により、Spark またはテーブル スキーマの pandas データ型とは異なるセマンティック型が列にあるかどうかの検出が試みられます。 AutoML では、これらの列は検出されたセマンティック型として扱われます。 これらの検出はベスト エフォートであり、場合によってはセマンティック型の存在が見逃される可能性があります。 また、列のセマンティック型を手動で設定したり、注釈を使用して、セマンティック型の検出を列に適用しないように AutoML に指示したりすることもできます。
具体的には、AutoML により次の調整が行われます。
- 日付データまたはタイムスタンプ データを表す文字列の列と整数の列は、タイムスタンプ型として扱われます。
- 数値データを表す文字列の列は、数値型として扱われます。
Databricks Runtime 10.1 ML 以降では、AutoML により次の調整も行われます。
- カテゴリ別の ID を含む数値の列は、カテゴリ特徴量として扱われます。
- 英語のテキストを含む文字列の列は、テキスト特徴量として扱われます。
セマンティック型の注釈
Databricks Runtime 10.1 ML 以降では、列にセマンティック型の注釈を配置して、割り当てられたセマンティック型を手動で制御できます。 列のセマンティック型 <column-name>
に <semantic-type>
として手動で注釈を付けるには、次の構文を使用します。
metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)
<semantic-type>
として、以下のいずれかを指定できます。
categorical
: 列にカテゴリ値が含まれます (たとえば、ID として扱う必要がある数値)。numeric
: 列に数値が含まれます (たとえば、数値に解析できる文字列値)。datetime
: 列に、タイムスタンプ値 (タイムスタンプに変換できる文字列、数値、または日付の値) が含まれます。text
: 文字列に英語のテキストが含まれます。
列でセマンティック型の検出を無効にするには、特殊なキーワード注釈 native
を使用します。