回帰のためのデータ準備
この記事では、AutoML で回帰トレーニング用のデータを準備する方法と、構成可能なデータ設定について説明します。 これらのオプションは、エクスペリメントのセットアップ中に AutoML UIで調整できます。
AutoML API を使用してこれらの設定を構成するには、AutoML Python API リファレンスを参照してください。
サポートされているデータ機能タイプ
以下に示す機能タイプのみがサポートされています。 たとえば、画像 はサポートされていません 。
以下の特徴量タイプがサポートされています。
- 数値(
ByteType
、ShortType
、IntegerType
、LongType
、FloatType
、DoubleType
) - ブール値
- 文字列(カテゴリまたは英語のテキスト)
- タイムスタンプ(
TimestampType
、DateType
) - ArrayType[Numeric](Databricks ランタイム 10.4 LTS ML以降)
- DecimalType(Databricks ランタイム 11.3 LTS ML以降)
欠損値の代入
Databricks Runtime 10.4 LTS ML 以降では、null 値の代入方法を指定できます。 UI で、テーブル スキーマの [Impute with ] 列のドロップダウンから方法を選択します。 API では、 imputers
パラメーターを使用します。 詳細については、 AutoML Python API リファレンスを参照してください。
デフォルトによって、 AutoML は列のタイプと内容に基づいて代入方法を選択します。
デフォルト以外の代入方法を指定した場合、 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はハイパーパラメーターチューニングの試行をクラスターのワーカーノード全体に分散させますが、各モデルは単一のワーカーノードでトレーニングされています。
AutoMLは、データセットの読み込みとトレーニングに必要なメモリを自動的に推定し、必要に応じてデータセットをサンプリングします。
Databricks Runtimeのバージョン | サンプリング動作 |
---|---|
9.1 LTS ML - 10.4 LTS ML | サンプリング率は一定であり、クラスターのノードタイプやノードあたりのメモリには依存 しません 。 |
11.x の ML | サンプリング率は、コアあたりのメモリが多いワーカー ノードで 増加します 。 サンプルサイズを増やすには:
例 : 4 コアと 64GB RAM を搭載したマシンの場合:
|
11.3 LTS ML 以上 | AutoML でデータセットがサンプリングされると、サンプリング分数が UI の [概要 ] タブに表示されます。 |
12.2 LTS ML 以上 | AutoML では、トレーニング タスクごとにより多くの CPU コアを割り当てることで、より大きなデータセットを処理できます。 サンプルサイズを増やすには、合計メモリが多いインスタンスを選択します。 |
分類問題では、AutoMLは層別サンプリングにPySparksampleBy
メソッドを使用し、ターゲットラベルの分布を保持します。
回帰問題の場合、AutoMLはPySparksample
メソッドを使用します。
セマンティック型検出
- 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
を使用します。