XGBoostを使用する場合、機能エンジニアリングはまだ有用ですか?


9

XGBoostに関する資料を読んでいました。この方法はツリーに基づいているため、変数のスケーリングを必要としないようです。この方法では、複雑な非線形パターン、相互作用をキャプチャできます。また、数値変数とカテゴリ変数の両方を処理でき、冗長な変数はこのメソッドにあまり影響を与えないようです。

通常、予測モデリングでは、所有しているすべての機能の中からいくつかを選択し、所有している一連の機能からいくつかの新しい機能を作成することもできます。したがって、機能のサブセットを選択すると、機能のセットに冗長性があると考えられます。現在の機能セットからいくつかの新しい機能を作成するということは、現在の機能に対して機能的な変換を行うことを意味します。次に、これら2つのポイントの両方をXGBoostでカバーする必要があります。では、XGBoostを使用するには、これらの調整パラメーターを賢く選択するだけでよいということですか。XGBoostを使用して機能エンジニアリングを行うことの価値は何ですか?


パフォーマンスの小さな改善点を探す場合は、ツリーが得意ではないため、機能間の相互作用を明示的にモデル化することをお勧め
Anton Tarasenko

回答:


12

最初の特徴エンジニアリングを定義しましょう:

  1. 機能の選択
  2. 特徴抽出
  3. ドメインの専門知識による機能の追加

XGBoostは(1)を行います。XGBoostは(2)/(3)を行いません。

したがって、機能エンジニアリングを自分で行う必要があります。深層学習モデルのみが、特徴抽出を置き換えることができます。


7
  1. 機能の選択:XGBoostは、機能の選択をレベルまで行います。私の経験では、最終的なモデルで使用するものとは異なるパラメーターを使用して、常にxgboostのラウンドによる機能選択を行っています。通常、行とフィーチャのサンプリングには低い数値を使用し、深くないツリーにはモデルに入るフィーチャのみを保持します。次に、別のモデルで微調整します。これにより、機能の数が非常に多い場合に、過剰適合を防ぐことができました。
  2. 機能の生成:XGBoost(分類、booster = gbtree)は、ツリーベースのメソッドを使用します。モデルのような関係を摘みに苦労を持っているであろうと、この手段AB/ B+ bの機能のためとBを。私は通常、機能間の相互作用を手作業で追加するか、ヒューリスティックを使用して適切な機能を選択します。アプリケーションによっては、これは実際にパフォーマンスを向上させることができます。

2

XGBoostを使用して機能エンジニアリングを行うことの価値は何ですか?

多分パフォーマンス?

(XGBoostは使用していませんが、別の勾配ブースティングライブラリを使用しています。ただし、XGBoostのパフォーマンスは、データの次元にもある程度依存します。)

各アイテムが3つの信号で構成されたデータセットがあり、各サンプルは6000サンプル長です-これは18kの特徴です。これらの機能を直接使用するには数日(日)かかるため、手動の機能エンジニアリングを行って、機能の数を約200に減らしました。現在、トレーニング(パラメーターの調整を含む)は数時間程度です。

比較のために、少し前に、同じデータと18kの機能全体(機能エンジニアリングなし)を使用してConvNetのトレーニングも開始しました。約2時間のトレーニングで、勾配ブースティングモデルと同じ精度になります。


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