質問

勾配ブースト(GB)メソッドを完全に理解しようとしています。 Wikiのページや論文については読みましたが、段階的に実行された完全な簡単な例を見るのに役立ちます。誰かが私のためにそれを提供してくれますか、それともそのような例へのリンクを教えてもらえますか?トリッキーな最適化のない簡単なソースコードも私のニーズを満たします。

役に立ちましたか?

解決

私はあなたにとって役立つことを願っています(主に私の自己理解のために)次の簡単な例を構築しようとしました。他の誰かが間違いに気付いた場合は、私に知らせてください。これはどういうわけか、グラデーションブーストの次の素晴らしい説明に基づいています http://blog.kaggle.com/2017/01/23/a-kaggle-master-explains-gradient-boosting/

この例は、観察が自分の家、自動車、自分の家族/子供があるかどうかに基づいて、月あたりの給与(ドル)を予測することを目的としています。最初の変数が「独自の家を持っている」という3つの観測値のデータセットがあり、2番目の変数は「自動車を持っている」、3番目の変数は「家族/子供を持つ」、ターゲットは「月あたりの給与」です。観察はです

1.-(はい、はい、はい、10000)

2 .-(いいえ、いいえ、いいえ、25)

3 .-(はい、いいえ、いいえ、5000)

番号を選択してください $ m $ ブースト段階の、たとえば $ m = 1 $. 。勾配ブーストアルゴリズムの最初のステップは、初期モデルから始めることです $ f_ {0} $. 。このモデルは、次の定義で定義されています $ mathrm {arg min} _ { gamma} sum_ {i = 1}^3l(y_ {i}、 gamma)$ 私たちの場合、どこで $ l $ 損失関数です。私たちが通常の損失関数を扱っていると仮定します $ l(y_ {i}、 gamma)= frac {1} {2}(y_ {i} - gamma)^{2} $. 。この場合、この定数は出力の平均に等しくなります $ y_ {i} $, 、だから私たちの場合 $ frac {10000+25+5000} {3} = 5008.3 $. 。したがって、私たちの最初のモデルはそうです $ f_ {0}(x)= 5008.3 $ (すべての観察結果をマッピングします $ x $ (例(いいえ、はい、いいえ))5008.3。

次に、新しいデータセットを作成する必要があります。これは以前のデータセットですが、 $ y_ {i} $ 残りを取ります $ r_ {i0} = - frac { partial {l(y_ {i}、f_ {0}(x_ {i}))}} { partial {f_ {0}(x_ {i})}}}}. 。私たちの場合、私たちは持っています $ r_ {i0} = y_ {i} -f_ {0}(x_ {i})= y_ {i} -5008.3 $. 。だから私たちのデータセットはなります

1.-(はい、はい、はい、4991.6)

2 .-(いいえ、いいえ、いいえ、-4983.3)

3 .-(はい、いいえ、いいえ、-8.3)

次のステップは、基本学習者に適合することです $ h $ この新しいデータセットに。通常、基本学習者は決定ツリーであるため、これを使用します。

ここで、次の決定ツリーを構築したと仮定します $ h $. 。エントロピーと情報ゲイン式を使用してこのツリーを構築しましたが、おそらく間違いを犯しましたが、私たちの目的のために、それが正しいと仮定することができます。より詳細な例については、確認してください

https://www.saedsayad.com/decision_tree.htm

構築された木は次のとおりです。

enter image description here

この決定ツリーと呼びましょう $ h_ {0} $. 。次のステップは、定数を見つけることです $ lambda_ {0} = mathrm {arg ; min} _ { lambda} sum_ {i = 1}^{3} l(y_ {i}、f_ {0}(x_ {i})+ lambda {h_ {0}(x_ {i})})$. 。したがって、定数が必要です $ lambda $ 最小化

$ c = frac {1} {2}(10000-(5008.3+ lambda*{4991.6}))^{2}+ frac {1} {2}(25-(5008.3+ lambda(-4983.3) ))^{2}+ frac {1} {2}(5000-(5008.3+ lambda(-8.3)))^{2} $.

これは、勾配降下が役立つ場所です。

から始めると仮定します $ p_ {0} = 0 $. 。等しい学習率を選択します $ eta = 0.01 $. 。我々は持っています

$ frac { partial {c}} { partial { lambda}} =(10000-(5008.3+ lambda*4991.6))(-4991.6)+(25-(5008.3+ lambda(-4983.3))))))))))) *4983.3+(5000-(5008.3+ Lambda(-8.3)))*8.3 $.

次に、次の値 $ p_ {1} $ によって与えられます $ p_ {1} = 0- eta { frac { partial {c}} { partial { lambda}}(0)}(-4991.6*4991.7+4983.4*(-4983.3)+ (-8.3)*8.3)$.

この手順を繰り返します $ n $ 時間、そして最後の値があると仮定します $ p_ {n} $. 。もしも $ n $ 十分に大きく、 $ eta $ 十分に小さいです $ lambda:= p_ {n} $ 価値があるはずです $ sum_ {i = 1}^{3} l(y_ {i}、f_ {0}(x_ {i})+ lambda {h_ {0}(x_ {i})})$ $ 最小化されます。この場合、私たち $ lambda_ {0} $ に等しくなります $ p_ {n} $. 。それのために、それを想定してください $ p_ {n} = 0.5 $ (となることによって $ sum_ {i = 1}^{3} l(y_ {i}、f_ {0}(x_ {i})+ lambda {h_ {0}(x_ {i})})$ $ で最小化されます $ lambda:= 0.5 $)。したがって、 $ lambda_ {0} = 0.5 $.

次のステップは、初期モデルを更新することです $ f_ {0} $$ f_ {1}(x):= f_ {0}(x)+ lambda_ {0} h_ {0}(x)$. 。ブーストステージの数は1つしかないので、これが私たちの最終モデルです $ f_ {1} $.

今、私が新しい観察を予測したいと仮定します $ x = $(はい、はい、いいえ)(この人には自分の家と自分の車がありますが、子供はいません)。この人の月あたりの給与はいくらですか?私たちはただ計算します $ f_ {1}(x)= f_ {0}(x)+ lambda_ {0} h_ {0}(x)= 5008.3+0.5*4991.6 = 7504.1 $. 。したがって、この人は、モデルによると、月額7504.1ドルを稼いでいます。

他のヒント

述べているように、次のプレゼンテーションはグラデーションブーストの「穏やかな」紹介ですが、グラデーションブーストを把握するときに非常に役立つことがわかりました。含まれる完全に説明された例があります。

http://www.c.neu.edu/home/vip/teach/mlcourse/4_boosting/slides/gradient_boosting.pdf

これ xgboostパッケージが存在するリポジトリです。それは、ジュリア、Java、Rなどの主要言語用のXgboostライブラリの場所からのものです。

これ Pythonの実装です。

ソースコードを歩く(「寄付方法」に指示されているように)ドキュメントは、その背後にある直観を理解するのに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top