ランダム フォレストとは異なり、勾配ブースティング ディシジョン ツリーは過剰適合する場合があります。したがって、ニューラル ネットワークの場合、検証用データセットを使用して正則化と早期停止を適用できます。
たとえば、次の図は、GBT モデルをトレーニングする場合のトレーニング / 検証セットの損失と精度の曲線を示しています。曲線がどの程度異なっているかに注目してください。これは、過学習の可能性が高くなっています。
図 29. ディシジョン ツリーの損失と数の比較
図 30. 精度とディシジョン ツリーの数の比較
勾配ブースティング ディシジョン ツリーの一般的な正則化パラメータは次のとおりです。
- ツリーの最大深度。
- 圧縮率。
- 各ノードでテストされた属性の割合。
- 損失に対する L1 係数と L2 係数
通常、ディシジョン ツリーはランダムなフォレスト モデルよりも大幅に浅くなります。デフォルトでは、TF-DF の勾配ブースティング決定木は深度 6 まで成長します。 ツリーは浅いため、リーフあたりの最小サンプル数はほとんど影響せず、通常は調整されません。
トレーニング用サンプルの数が少ない場合は、検証用データセットの必要性が問題になります。したがって、一般的には勾配ブースティング ツリーを交差検証ループ内でトレーニングすることや、モデルが過学習していないことが判明したら早期停止を無効にするのが一般的です。
使用例
前の章では、小さなデータセットでランダム フォレストをトレーニングしました。この例では、単純にランダム フォレスト モデルを勾配ブースティング ツリー モデルに置き換えます。
model = tfdf.keras.GradientBoostedTreesModel()
# Part of the training dataset will be used as validation (and removed
# from training).
model.fit(tf_train_dataset)
# The user provides the validation dataset.
model.fit(tf_train_dataset, validation_data=tf_valid_dataset)
# Disable early stopping and the validation dataset. All the examples are
# used for training.
model.fit(
tf_train_dataset,
validation_ratio=0.0,
early_stopping="NONE")
# Note: When "validation_ratio=0", early stopping is automatically disabled,
# so early_stopping="NONE" is redundant here.
使用と制限事項
勾配のあるブーストされたツリーには、いくつかの長所と短所があります。
長所
- ディシジョン ツリーと同様に、数値特徴とカテゴリ特徴をネイティブにサポートします。多くの場合、特徴の前処理は必要ありません。
- 勾配ブースティング ディシジョン ツリーには、デフォルトのハイパーパラメータがあり、多くの場合、素晴らしい結果が得られます。それでも、これらのハイパーパラメータを調整すると、モデルを大幅に改善できます。
- 勾配ブースティング ツリー モデルは一般に小さく(ノード数とメモリ内)、実行が高速です(多くの場合 1 つまたは数マイクロ / サンプル)。
短所
- ディシジョン ツリーは順番にトレーニングしなければならず、トレーニングが大幅に遅くなる可能性があります。ただし、トレーニングの速度低下は、決定木が小さいことで相殺されます。
- ランダム フォレストと同様に、勾配ブースティング ディシジョン ツリーは内部表現を学習して再利用できません。各ディシジョン ツリー(および各ディシジョン ツリーの各ブランチ)は、データセット パターンを再学習する必要があります。一部のデータセット、特に非構造化データ(画像、テキストなど)を含むデータセットでは、勾配ブースティング ディシジョン ツリーの結果が他のメソッドより劣ります。