回帰のためのデータ準備
この記事では、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
を使用します。