勾配ブースト ディシジョン ツリー

勾配ブースティングは、バギングやブーストと同じように、 別の ML アルゴリズムで行われます非公式には、勾配ブースティングには次のような要素があります。 2 種類のモデルがあります。

  • 「弱い」(通常はディシジョン ツリー)です。
  • 「強力」機械学習のモデルです。これは、複数の弱点を 構築できます

勾配ブースティングでは、ステップごとに新しい弱いモデルがトレーニングされ、 「error」(疑似レスポンスと呼ばれます)。 "error" は後ほど詳しく説明し、後で説明しますここでは「error」と仮定します。は、 予測と回帰ラベルで構成されます脆弱なモデル(「エラー」)は、 特徴量の誤差を小さくするために、負の符号を付けて強力なモデルに 学習します。

勾配ブーストは反復的です。反復処理ごとに次の数式が呼び出されます。

\[ F_{i+1} = F_i - f_i \]

ここで

  • $F_i$ はステップ $i$ の強いモデルです。
  • $f_i$ はステップ $i$ の脆弱なモデルです。

この操作は、停止条件(最大しきい値など)が満たされるまで繰り返されます。 モデルで過学習が始まった時点が 別個の検証データセットです

単純な回帰データセットでの勾配ブースティングの方法を見ていきましょう。ここでは、

  • 目的は、$x$ から $y$ を予測することです。
  • 強力なモデルは、ゼロ定数 $F_0(x) = 0$ に初期化されます。
で確認できます。
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

このコードを次のデータセットに適用しましょう。

1 つの特徴 x とそのラベル y のグラウンド トゥルースのプロット。プロットは、
やや減衰した一連の正弦波
あります。

<ph type="x-smartling-placeholder"></ph> 図 25:1 つの数値特徴を持つ合成回帰データセット。 で確認できます。

 

勾配ブースティングの最初の反復処理後の 3 つのプロット アルゴリズム:

3 つのプロット。最初のプロットは、強いモデルの予測です。
傾きが 0 で切片が 0 の直線です。2 つ目のプロットは
強モデル、つまり一連の正弦波です3 つ目のプロットは
モデルの予測に使用されます。これは、モデルの
あります。

<ph type="x-smartling-placeholder"></ph> 図 26:最初のイテレーションの後に 3 つのプロットを作成します。 で確認できます。

 

図 26 のプロットについては、次の点に注意してください。

  • 最初のプロットは、強いモデルの予測結果を示しています。 常に 0 です。
  • 2 つ目のプロットは誤差を示しています。これは脆弱なモデルのラベルです。
  • 3 つ目のプロットは、脆弱なモデルを示しています。

1 つ目の弱いモデルはラベルの大まかな表現を学習することであり、 特徴空間の左側の部分(変化が最も大きい部分、 間違ったモデルで最大の誤差を招きます)。

アルゴリズムの別のイテレーションの場合、同じプロットは次のようになります。

3 つのプロット。最初のプロットは、強いモデルの予測です。
予測された弱いモデルのプロットの逆数
図:2 つ目のプロットは、強いモデルの誤差を示しています。これはノイズが多く、
正弦波のセットになります。3 つ目のプロットは、弱いモデルの予測を示しています。
2 つの正方形が
あります。

<ph type="x-smartling-placeholder"></ph> 図 27:2 回目の反復処理の後に 3 つのプロットを作成する。 で確認できます。

 

図 27 のプロットについては、次の点に注意してください。

  • 強いモデルには、未知のモデルに対する予測が 必要があります。
  • 強いモデルの新しい誤差は少し小さくなります。
  • 弱いモデルの新しい予測では、モデルの正しい部分が 学習します。

アルゴリズムをさらに 8 回実行します。

プロットから、強いモデルが徐々にグラウンド トゥルースに近づいていることがわかります。
弱いモデルの予測は徐々に
弱くなります。

<ph type="x-smartling-placeholder"></ph> 図 28:3 回目のイテレーションと 10 回目のイテレーションの後、3 つのプロットを作成する。 で確認できます。

 

図 28 では、強いモデルの予測によって、 データセットのプロット

これらの図は、ディシジョン ツリーを使用する勾配ブースティング アルゴリズムを示しています。 学習が遅れます。この組み合わせは、勾配ブースティング(決定)ツリーと呼ばれます。

上のプロットは、勾配ブースティングの本質を示唆しています。ただし、 この例には、次の 2 つの実際の操作がありません。

  • 縮小
  • ニュートン法の 1 ステップによるリーフ値の最適化
で確認できます。

収縮

弱いモデル $f_i$ に小さな値 $\nu$ を乗算します (例: $\nu = 0.1$ など)を重みモデル $F_i$ に追加します。この小さい値は、トレーニング データの 縮小します。言い換えると、反復処理のたびに、 数式:

\[ F_{i+1} = F_i - f_i \]

各反復処理では、次の式を使用します。

\[ F_{i+1} = F_i - \nu f_i \]

勾配ブースティングの縮小は、ニューラル ネットワークの学習率に似ています。 縮小は、強力なモデルの学習速度を制御するもので、 学習します。つまり、縮小値が 0.0 に近いほど過学習はより減少する 1.0 に近い値よりも小さくなります

上記のコードでは、圧縮は次のように実装されます。

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions