XGBoost対Python Sklearn勾配ブーストツリー


20

XGBoostの仕組みを理解しようとしています。Python sklearnで勾配ブーストされたツリーがどのように機能するかは既に理解しています。私にとって明らかではないのは、XGBoostが同じように動作するが高速であるか、またはXGBoostとpython実装との間に根本的な違いがあるかどうかです。

この論文を読んだとき

http://learningsys.org/papers/LearningSys_2015_paper_32.pdf

XGboostから得られる最終結果はPython実装と同じですが、主な違いはXGboostが各回帰ツリーで最適な分割を見つける方法です。

基本的に、XGBoostは同じ結果をもたらしますが、高速です。

これは正しいですか、それとも私が見逃している何かがありますか?

回答:


18

XGBoost( 'eXtreme Gradient Boosting')とsklearnのGradientBoostは、どちらもグラデーションブーストの実装であるため、基本的に同じです。

ただし、実際的な意味では、ボンネットの下には非常に大きな違いがあります。XGBoostは、sklearnよりもはるかに高速です(http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/を参照)。XGBoostは非常にメモリ効率がよく、並列化できます(sklearnはデフォルトでそうすることはできないと思います。sklearnのメモリ効率については正確に知りませんが、XGBoostのものよりもかなり低いと確信しています)。

両方を使用したXGBoostの速度は非常に印象的であり、そのパフォーマンスはsklearnのGradientBoostingよりも優れています。


1
パフォーマンスの違いもあります。Xgboostは2次導関数を使用して、各終端ノードの最適な定数を見つけました。標準実装では、1次導関数のみを使用します。
Zelazny7

@ Zelazny7あなたの声明に関する参照はありますか?二次導関数を計算するとパフォーマンスが低下すると予想されます。また、(任意のフレーバー)勾配降下以外の何かが使用されたことを意味します。
meh



@ K88の投稿の確認、sklearnのGradientBoostingClassifierにn_jobs使用可能なインターフェイスパラメーターがありません。sklearnのアルゴリズムの実装では、内部で並列処理はできません。
bmc


1

XGboostは、ランダム化によるGBDTの実装です(列サンプリングと行サンプリングを使用します)。GBDTの各ベースモデルのすべてのトレーニングデータを使用しないことで、行サンプリングが可能です。各基本モデルのすべてのトレーニングデータを使用する代わりに、行のサブセットをサンプリングし、それらのデータ行のみを使用して各基本モデルを構築します。これにより、XGBoostがこのランダム化を使用して対処しようとする単純なGBDTの主要な問題であるオーバーフィットの可能性が低くなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.