すでにお気づきのように、機能の選択(機能の選択)は、アルゴリズムに最適なハイパーパラメーターに影響を与える可能性があり、アルゴリズムに選択したハイパーパラメーターは、最適な機能の選択に影響を与える可能性があります。
したがって、はい、本当にモデルからパフォーマンスの1パーセントをすべて絞り出すことに本当に関心があり、必要な量の計算を行うことができる場合は、機能の選択とハイパーパラメーターの調整を「同時に」行うことが最善の解決策です。(機能の選択方法によっては)これはおそらく簡単ではありません。私がそれが機能することを想像する方法は、候補として異なる特徴のセットを持ち、それらすべての候補セットからの特徴の1つのセットの選択を追加のハイパーパラメーターとして扱うようなものです。
実際にはそれは実際には実現可能ではないかもしれません。一般に、考えられるすべての組み合わせを評価する余裕がない場合は、以下をお勧めします。
一部のハイパーパラメーターに極端に悪い値を割り当てないようにするために、ハイパーパラメーターを大まかに最適化します。これは多くの場合、ハイパーパラメーターを直感的に理解している場合は手動で行うことができます。または、他の点ではまともな機能であることがわかっている機能の束を使用して、非常に短いハイパーパラメーター最適化手順で行うこともできます。
機能の選択。ハイパーパラメータは100%最適化されていない可能性がありますが、少なくともそれほどひどいものではありません。少なくともある程度適切に構成された機械学習アルゴリズムを既に持っている場合、優れた機能を持つことは、ハイパーパラメーターをマイクロ最適化するよりもパフォーマンスにとって非常に重要になります。極端な例:機能がない場合、何も予測できません。クラスラベルを含む不正行為機能がある場合は、すべてを完全に分類できます。
上記の手順で選択した機能を使用してハイパーパラメーターを最適化します。これは良い機能セットになるはずで、実際にはハイパーパラメータを少し最適化する価値があるかもしれません。
Nikolasがコメントで投稿した追加の質問に対処するために、これらすべて(機能選択、ハイパーパラメーター最適化)がk分割交差検証とどのように相互作用するかを考えます。
フォールドの1つでデータをまったく使用せずに、同じフォールドでパフォーマンスを評価すると、パフォーマンスの偏った見積もりが得られます(パフォーマンスを過大評価します)。したがって、特徴選択ステップのすべてのフォールドのデータを使用し、それらのフォールドのそれぞれでパフォーマンスを評価すると、それぞれのフォールドのパフォーマンスに偏った見積もりが得られます(これは良くありません)。同様に、データ駆動型のハイパーパラメーター最適化があり、特定のフォールド(またはすべてのフォールド)からのデータを使用し、それらの同じフォールドで評価すると、パフォーマンスのバイアス推定が再び得られます。可能な解決策は次のとおりです。
すべてのフォールド内でパイプライン全体を個別に繰り返します(たとえば、各フォールド内で、機能選択+ハイパーパラメーター最適化およびトレーニングモデルを実行します)。これを行うと、k分割交差検証により、この完全なパイプラインのパフォーマンスの公平な見積もりが得られます。
初期データセットを「前処理データセット」と「トレーニング/テストデータセット」に分割します。「前処理データセット」で機能選択+ハイパーパラメーター最適化を行うことができます。次に、選択した機能とハイパーパラメーターを修正し、 '' train / test dataset ''でk分割交差検証を実行します。これを行うと、固定された特徴セットとハイパーパラメーターの値が与えられた場合に、k分割交差検証により、MLアルゴリズムのパフォーマンスの公平な見積もりが得られます。
2つのソリューションのパフォーマンスの見積もりがわずかに異なることに注意してください。どちらがより興味深いかは、ユースケースによって異なり、実際に機械学習ソリューションをデプロイする方法によって異なります。たとえば、機能選択の完全なパイプライン+ハイパーパラメーターの最適化+毎日/週/月/年/その他すべてを自動的に実行するトレーニングを予定している会社の場合、その完全なパフォーマンスにも関心があります。パイプライン、あなたは最初のソリューションが必要になります。
一方、機能の選択+ハイパーパラメーターの最適化を1度だけ行う余裕があり、その後、アルゴリズムをある程度定期的に再トレーニングする(機能セットとハイパーパラメーターの値を固定)場合、パフォーマンスそのステップだけがあなたが興味を持っているものになるでしょう、そしてあなたは2番目の解決策に行くべきです