ランダム フォレストとは異なり、勾配ブースト ツリーは過剰適合する可能性があります。したがって、ニューラル ネットワークと同様に、バリデーション データセットを使用して正則化と早期停止を適用できます。
たとえば、次の図は、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 つの例あたり 1 ~ 2 µs 程度)。
短所
- ディシジョン ツリーは順番にトレーニングする必要があるため、トレーニングが大幅に遅くなる可能性があります。ただし、トレーニングの速度低下は、決定木が小さくなることである程度相殺されます。
- ランダム フォレストと同様に、勾配ブースト ツリーは内部表現を学習して再利用できません。各ディシジョン ツリー(および各ディシジョン ツリーの各分岐)は、データセット パターンを再学習する必要があります。一部のデータセット(特に、画像やテキストなどの非構造化データを含むデータセット)では、このため、勾配ブースト ツリーは他の方法よりも悪い結果を示します。