勾配ブースティングは、バギングやブーストと同じように、 別の 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
このコードを次のデータセットに適用しましょう。
<ph type="x-smartling-placeholder"></ph> 図 25:1 つの数値特徴を持つ合成回帰データセット。 で確認できます。
勾配ブースティングの最初の反復処理後の 3 つのプロット アルゴリズム:
<ph type="x-smartling-placeholder"></ph> 図 26:最初のイテレーションの後に 3 つのプロットを作成します。 で確認できます。
図 26 のプロットについては、次の点に注意してください。
- 最初のプロットは、強いモデルの予測結果を示しています。 常に 0 です。
- 2 つ目のプロットは誤差を示しています。これは脆弱なモデルのラベルです。
- 3 つ目のプロットは、脆弱なモデルを示しています。
1 つ目の弱いモデルはラベルの大まかな表現を学習することであり、 特徴空間の左側の部分(変化が最も大きい部分、 間違ったモデルで最大の誤差を招きます)。
アルゴリズムの別のイテレーションの場合、同じプロットは次のようになります。
<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