私は最近、ブースティング ツリー アルゴリズムと連絡を取り、多次元出力 y1 .. yo に依存する ob 機能 x1 .. xn 用の小さな回帰ツリー クラスを実装しました。
実際、ブースティングとフリードマンの確率的勾配ブースティングの利点に関するいくつかの記事を読みましたが、すべての数学方程式が私にとって非常に難しいため、これを実装するのに少し行き詰まりました - もう少し「コーディング スタイル」が必要です。
まず第一に、そのトピックに関する実用的な例はどこにも見つかりませんでした。非常にうまく適合するサードパーティのライブラリがあることは知っていますが、そこで何が起こっているのかを理解し、自分で実装したいと思います;-)
さて、私の回帰木がブースティングの実装に必要な必要な結果をもたらすと仮定すると、ここに私の問題があります:
このアルゴリズムは、1 つのツリーの結果が次のツリーの入力の一部となる n 個のツリーからなる回帰フォレストを構築します。これは反復アプローチであるため、ターゲット関数の初期推定 (予測 = 切片 + x1*T1 + x2*T2 + ... + xnTn) から開始します。ここで、Tn は位置 n および x での回帰木の予測です。予測の重みです。
擬似コード:
o ターゲット次元 (列) の平均値で切片を初期化します
行列「h 値」(i 回目の反復の現在の予測結果) を n 行、o 列で初期化します。
反復の場合 = 1 ~ n (ツリーの数)
3.1 勾配行列 (n 行、o 列) を作成し、結果関数の現在の予測によって現在のトレーニング データを差し引いた各行を初期化します。
3.2 指定されたサイズの 0 から n の間のインデックスのランダムなサブセットを選択します (たとえば、全データの 50%)。
3.3 y および対応する x 値の入力として勾配行を取得し、新しい回帰ツリーを設定します
3.4 ツリーをトレーニングして結果関数に追加する
3.5 新しい行の値 += Prediciton * LearningRate で行ごとに「h 値」を変更します
-- 繰り返しの終わり
4 結果関数を返す
まず、私の理解に誤りがありますか?サンプル データを取得すると、1 つのツリー (深さ 10、ノットあたり最小 3 つのノードで 5% のエラー) で非常にうまく機能します。約 50% のエラーが発生します。グラフはほぼ平均値の線です。 .
第二に、どこでも読んだ「実際の」損失関数ではなく、結果関数の現在の値である予測のみを使用するため、「勾配」でポイントを得たかどうかはわかりません。
3 つ目と最後に、ポイント 2.5 についてもよくわかりません。ここでしなければならないことはそれだけですか?
どんな助けやヒントも素晴らしいでしょう。
事前にどうもありがとう
モンガ