XGBoostパラメータの効率的な調整こんにちは @russ_wolfinger 、
XGBoostを使用してモデルを構築し、それらを他のツリーモデルやNNなどの非ツリーモデルと比較する作業に取り組んでいます。私はネイトと同様のアプローチをとり、元のデータセットの一部を(完全に異なるデータテーブルに)保持し、次にモデル比較プラットフォームを使用して、これらのモデルがテストデータセットと互いにどの程度比較できるかを確認します。
XGBoostがテストデータセットで期待どおりに機能していないことがわかりました。現在、ブートストラップフォレストの方が優れています。最適化されたXGBoostのチューニングテーブルからの最良の出力として、デフォルトと以下のものを比較しました。フィットをうまく調整していない可能性があります。変更できるパラメーターが多すぎるため、フィットを調整するためのより効率的な方法があるかどうか疑問に思っています。
私は例を見て、PDFヘルプで参照されているオンラインドキュメントを読みましたが、モデルの調整に関しては、実用的なヘルプについてはあまり説明がありません。注として、私はk分割交差検証ではなく、単一のホールドアウト検証を使用しています。最初に少しオーバーフィットする可能性のある非常に複雑なモデルを作成し、それを他のパラメーターでプルーニングしてより保守的にする方が良いでしょうか?
DS
Re:XGBoostパラメータの効率的なチューニングこんにちは @russ_wolfinger 、
更新された情報をありがとう。XGBoostを他のプラットフォームに近づけて調整した後、最適化されたブーストツリーとブートストラップフォレストからの出力をXGBoostに対してできる限りテストし、出力は十分に相関しました。正確ではないが、非常に近い!
以前に投稿したリンクの手順に従うことで、より適切に調整されたモデルにアプローチすることができました。
他のいくつかのフィードバックについて:
1。最近、「比較」の下の「表示されたモデルを削除する」が何をするかを理解しました。これは、検証R ^ 2によってデータテーブルを並べ替えた後、可能性のある適合を排除するのに役立つ方法です。
2。調整設計を実行するとき、最初の列が最小値/最大値列と同じ固定値を持っているか、または(変更されている場合)その間にあることを確認して、正しく機能することが重要であることに気付きました。min_child_weightなどの別の値を調整していて、反復の固定値(たとえば、最小/最大150)を入力したことが2、3回ありましたが、最初の列の値は100のままでした。この場合、反復は150ではなく100に維持されます。最小/最大が同じ値に設定されている場合、最初の列はその値をプルし、固定されていないパラメーターのチューニングテーブルを使用する場合と同様に再入力する必要があると思います。以下の例では、max_depthとmin_child_weightを調整していましたが、min / maxが387に設定されていても、反復を100のままにしたインスタンスがいくつかありました。正しく計算するには、手動で戻って387に変更する必要がありました。

ありがとう!
DS
Re:XGBoostパラメータの効率的なチューニングこんにちは @DS 、
今後ともよろしくお願いいたします。 私は最近、現在、モデル比較プラットフォームのXGBoostの結果に悪影響を及ぼしている可能性がある数式メタデータに関するいくつかの問題を見つけて修正しました。 JMP Pro 16 Early Adopterでは、これらのアップデートとさらにいくつかのアップデートが数か月以内に提供される予定です。 それまでの間、JMPテーブルで直接Boosted Treeプラットフォームとの基本的な比較を試すことができます。
次のパラメーターは、Boosted TreeとXGBoostを直接マッピングします。
- レイヤー数<->反復
- ツリーごとの分割<-> max_depth
- 学習率<-> learning_rate
- 最小サイズ分割<-> min_child_weight
- 行のサンプリングレート<->サブサンプリング
- 列のサンプリングレート<-> colsample_bytree
XGBoostの詳細パラメーターgrow_policyを "lossguide"に変更すると、さらに役立つ場合があります。 ご指摘のとおり、2つの類似したモデルから予測をフィッティングして保存してから、互いに対して予測をプロットします。 それらは高度に相関している必要があります。
Advanced OptionsのTuning Design Tableは、ご想像どおりです。 列名がXGBoostパラメータ名と完全に一致する別のJMPテーブルを設定し、このJMPテーブルの名前をパラメータボックスに手動で入力する必要があります。 最初からテーブルを手動で作成するか、モデル比較テーブルで右クリックして[データテーブルとして保存]を選択します。 これにより、すべてのパラメーターで任意の設計を指定できますが、現時点ではあまりテストされていないため、結果を注意深く確認してください。
Re:XGBoostパラメータの効率的なチューニングこんにちは @russ_wolfinger 、
情報のおかげで。この投稿は、少なくとも直接的な例と、XGBoostをチューニングするための反復的な段階的なアプローチを実行する上で、非常に役立つことがわかりました。
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
私の特定の状況では、約3500のトレーニング行と1000のテスト行があります。前に述べたように、私のテスト行は、最初に連結してからモデルを比較する別のデータテーブルにあります。これは、どのモデルが未使用のデータセットで実際に最もよく予測されるかを調べるためです。また、3500トレーニング行を80/20トレーニング/検証行に分割し、モデリングしているY出力によって層別化しました。
いくつかの異なるチューニングスキームを使用して、何が最適に機能するかを確認します。しかし、私がやりたいことの1つは、XGBoostが、たとえばブートストラップフォレストと「同じ」出力を提供できることを確認することです。ブートストラップフォレストまたはブーストされたツリーからパラメーターを取得して、XGBoostの適切な設定に変換することは可能ですか?原則として、XGBoostはほぼ同じ結果になりますが、はるかに高速です。これを行う方法に関するいくつかの投稿を読んでみましたが、他のプラットフォームの設定をXGBoostに変換する方法にまだ苦労しています。
比較モデルプラットフォームがXGBoostモデルを異なる方法で評価することは可能ですか?
さらに明確にする質問:
XGBoostプラットフォームからツリーの数を判別する方法はありますか?これはフィールド「反復」ですか?
独自のチューニング設計表をプラットフォームに「フィード」できますか?詳細オプションの下に、その名前のフィールドがありますが、空です。独自のチューニングテーブルがある場合、その名前をそこに入力できますか?
おかげで、
DS
Re:XGBoostパラメータの効率的なチューニングこんにちは @DS 、フィードバックをありがとうございました。 手動でチューニングする方法はいくつかあります。 "tuning xgboost"をグーグルで試しましたが、最初のいくつかのリンクは妥当に見えます。 これらは、科学というよりは芸術と少し考えられるかもしれませんが、各パラメーターが何をしているかを明らかにし、XGBoostがどのように機能するかについて全体的な直感を構築するのに役立ちます。
共有または公開する機会を得た場合に備えて、設定について知りたいと思っています。 私が行った多くの比較や、Kaggleのような競争の激しい状況では、XGBoostの方がパフォーマンスが優れていることがわかりました。 データセットのサイズが大きくなると、パフォーマンスの向上が強くなる傾向があります。
古典的なトレーニング検証テストの分割を行っているようですね。 この手順をさまざまなスプリットで数回実行して、パフォーマンスの見積もりがどれだけ安定しているかを判断することは価値があるかもしれません。
k分割の1つの利点は、kモデルの近似よりも「バグのある」予測子が得られることであり、ほとんどの場合、データの一部でトレーニングされた単一のモデルよりもパフォーマンスが優れています。 別のアプローチは、好きな検証アプローチでチューニングを行い、最後にトレーニング+検証データ全体を使用して最後に1つの最終的な適合を行うことです。