Xgboost: xgboostの分類タスクで役に立たない機能を取り除く必要がありますか?

作成日 2017年03月14日  ·  3コメント  ·  ソース: dmlc/xgboost

私は650以上の機能を持っており、xgboostを使用してこれらの機能の重要性をランク付けしています。 関数はget_score()であり、ツリーを構築するときに機能の出現を返します。

結果を確認すると、スコアが20未満の特徴が150近くあります。そのうちのいくつかはゼロです。 これらの機能を取り除き、モデルのパフォーマンスが向上するかどうかを確認します。 しかし、結果は前のものとほとんど同じです。 それで、重要ではないこれらの機能を取り除く必要がありますか?

実験の結果では、機能の重要度の新しい順序は以前の順序とは異なります。 あまり重要ではなかったものも重要になります。 つまり、特徴の重要度の順序が安定していないということです。 なぜ安定していないのですか?

最も参考になるコメント

ほとんどの機械学習アルゴリズムでは、過剰適合を回避するために特徴選択を行うことが重要です。

ブースティング、特にxgboostでは、トレーニングは可能な限り一般化するように行われ(弱い学習者、テイラー近似、確率的学習など)、過剰適合に対してロバストになります(つまり、過剰適合が可能です。本当に必要な場合に適合します:)->反復回数が多く、学習率が高く、確率的学習はありません...)。 あなたの質問に答えるために、無関係な機能を取り除くことは、ある時点で重要かもしれません。 外れ値があるとすると、学習プロセス中にこれらの無関係な機能を使用して外れ値を分類し始める可能性がありますが、これは適切ではありません。

2番目の質問では、弱い学習者を組み合わせて良い結果を達成する方法は1つだけではありません。 ただし、さまざまな組み合わせ(およびさまざまな機能の重要度)を取得するには、サブサンプル、max_featuresなどのトレーニングプロセス中にランダム性を使用する必要があります...別の可能性は、冗長な機能があることです。 それらの間の相関関係を確認する必要があります。

要約すると、機能が役に立たないことがわかっている場合は、それを削除します。 わからない場合は、モデルのトレーニングが遅くなるため、関係のない機能を削除することをお勧めします。

全てのコメント3件

ほとんどの機械学習アルゴリズムでは、過剰適合を回避するために特徴選択を行うことが重要です。

ブースティング、特にxgboostでは、トレーニングは可能な限り一般化するように行われ(弱い学習者、テイラー近似、確率的学習など)、過剰適合に対してロバストになります(つまり、過剰適合が可能です。本当に必要な場合に適合します:)->反復回数が多く、学習率が高く、確率的学習はありません...)。 あなたの質問に答えるために、無関係な機能を取り除くことは、ある時点で重要かもしれません。 外れ値があるとすると、学習プロセス中にこれらの無関係な機能を使用して外れ値を分類し始める可能性がありますが、これは適切ではありません。

2番目の質問では、弱い学習者を組み合わせて良い結果を達成する方法は1つだけではありません。 ただし、さまざまな組み合わせ(およびさまざまな機能の重要度)を取得するには、サブサンプル、max_featuresなどのトレーニングプロセス中にランダム性を使用する必要があります...別の可能性は、冗長な機能があることです。 それらの間の相関関係を確認する必要があります。

要約すると、機能が役に立たないことがわかっている場合は、それを削除します。 わからない場合は、モデルのトレーニングが遅くなるため、関係のない機能を削除することをお勧めします。

ありがとう。 重要ではない150近くの機能を削除しました。 しかし、新しい実験からのaucは変更されていません。 したがって、それらを削除してもメリットはありません。

パフォーマンス測定を改善しない場合の利点は、トレーニング時間です。 決定木は貪欲なアプローチを使用して最適な分割を見つけます。したがって、より多くの機能=より多くの分割を試すことができます。

このページは役に立ちましたか?
0 / 5 - 0 評価