特徴選択は、トレーニングデータのみ(またはすべてのデータ)で実行する必要がありますか?


10

特徴選択は、トレーニングデータ(またはすべてのデータ)に対してのみ実行する必要がありますか?私はGuyon(2003)Singhi and Liu(2006)などのいくつかのディスカッションと論文を読みましたが、正しい答えについてはまだわかりません。

私の実験のセットアップは次のとおりです:

  • データセット:50人の健康なコントロールと50人の病気の患者(病気の予測に関連する可能性のある200の機能)。
  • タスクは、利用可能な機能に基づいて疾患を診断することです。

私がすることは

  1. データセット全体を取り、特徴選択(FS)を実行します。今後の処理のために選択した機能のみを保持します
  2. テストとトレーニングに分割し、トレーニングデータと選択した機能を使用して分類子をトレーニングします。次に、分類子をテストデータに適用します(ここでも、選択した機能のみを使用します)。Leave-one-out検証が使用されます。
  3. 分類精度を取得する
  4. 平均化:1)〜3)をN回繰り返します。(100)。N=50

データセット全体でFSを実行するとある程度のバイアスが生じる可能性があることに同意しますが、私の意見では、平均化(ステップ4)中に「平均化」されるということです。あれは正しいですか?(精度の差異は)<2%

1 Guyon、I.(2003) "An Introduction to Variable and Feature Selection"、The Journal of Machine Learning Research、Vol。1 3、pp。1157-1182
2 Singhi、SKおよびLiu、H.(2006)「分類学習のための特徴サブセット選択バイアス」、Proceeding ICML '06 Proceedings on the 23rd International Conference on Machine Learning、pp。849-856

回答:


12

手順2と3で使用したテストセットからのデータを使用して、手順1で使用する機能を決定するため、使用している手順では、楽観的に偏ったパフォーマンス推定が得られます。演習を繰り返すと、パフォーマンス推定値の分散が減少します。バイアスなので、バイアスは平均しません。公平なパフォーマンスの見積もりを取得するには、テストデータを使用して、モデルの選択(機能の選択など)を行うことはできません。

より良いアプローチは、入れ子の交差検証を使用することです。これにより、外側の交差検証は、モデルを構築する方法(機能選択を含む)を使用して得られるパフォーマンスの推定を提供し、内側の交差検証は、機能を個別に選択するために使用されます。外側の相互検証の各フォールド。次に、すべてのデータを使用して最終的な予測モデルを作成します。

ケースよりも多くの機能があるため、機能を選択するだけでデータを過剰適合させる可能性が非常に高くなります。機能の選択によって予測パフォーマンスが向上するというのはちょっとした神話です。そのため、これに関心がある場合は(関連する機能をそれ自体で終わりとして識別するのではなく)、リッジ回帰を使用して機能を実行しないほうがよいでしょう。選択。隆起パラメーターが慎重に選択されている場合、これはおそらく機能選択よりも予測性能が向上します(私はアレンのPRESS統計の最小化を使用します-つまり、平均二乗誤差の去り残し推定値)。

詳細については、AmbroiseとMcLachlan、およびこの質問に対する私の回答を参照してください。


答えてくれてありがとう。実際、関連する機能を見つけて予測パフォーマンスを向上させるために、両方に興味があります。私の実験(分類用のSVM)では、特徴選択によって予測精度が大幅に向上しました(ただし、これはデータの過剰適合の結果である可能性があることに注意してください)。リッジ回帰とは、ティホノフ正則化としても知られていることを意味していると思いますか?
pedro29 2013

はい、リッジ回帰は、重みの2乗ノルムに基づくペナルティ項を持つ通常の線形回帰です。ほとんどの問題では、SVMと同じように機能しますが、実装が簡単です(ハイパーパラメーターの調整に使用できる、基本的に無料で1対1の相互検証エラーを解決できます)。
Dikran Marsupial

ちなみに、リッジ正則化と特徴選択の違いは何ですか?つまり、1日の終わりに、どちらも特定の予測子のセットからの「最良のサブセット」の予測子を示します。
pedro29 2013

リッジ回帰は機能のサブセットを識別しませんが、ペナルティ回帰のLASSOまたはLARS形式は識別します。ペナルティ項がモデルに出入りするフィーチャに順序付けを課すため、過剰適合の影響を受けにくく、最適なセットを徹底的に検索するよりも自由度が少ないため、これは特徴選択方法の私の選択になります。特徴。
Dikran Marsupial

3

ここでの回答の補足として、私はこれがなぜ良い手順ではないのかを理解するのに本当に役立つ2つのリンクを持っています。

編集:要求に応じて、リンクの内容の簡単な説明:

私が分類器をトレーニングしていて、それぞれ100万個の特徴を持つ1000個のサンプルのデータセットがあるとします。すべてを処理することはできないので、必要な機能は少なくなります(たとえば、300の機能を計算できます)。また、サンプルの実際の精度を正確に見積もるために、100サンプルのテストセットも用意しています。

データセット全体のターゲットとの相関が最も高いフィーチャを選択して、100万個のフィーチャを300までフィルタリングすると、間違いが発生します(後でクロス検証で検出できないオーバーフィットを導入しているため)。私のホールドアウトセットは、悪い精度値を吐き出すことによってこれを示します。

上記のリンクによると、正しい方法は、データセットをトレーニングセットと相互検証セットに分割し、このトレーニングセットとそれに関連付けられたCVスコアに基づいてモデルを調整する(機能を除外するなど)ことです。K分割を使用している場合は、分割/分割を行うたびにゼロから調整し、結果を平均化する必要があります。

プログラム的には、次のことを行います。

  • データセットの一部をホールドアウトセットとして確保します。
  • データセットの残りの部分(以降、T1と呼びます)をK分割に分割します。
  • i = 1からKまでのforループで、以下を実行します。
    • i番目のフォールドをCVセットとして選択し、残りのサンプルをトレーニングセット(以降Tiと呼びます)として選択します。
    • 必要な機能エンジニアリングと機能選択を行います:機能のフィルタリング、それらの組み合わせなど。
    • CVセット(現在のフォールド、CViと呼ばれます)と現在のトレーニングセットTiの両方を、適切な機能を備えたものに変換します。
    • トレーニングセットTiでモデルをトレーニングする
    • 現在のフォールド、CViからスコアを取得します。このスコアを、すべてのスコアを保持するリストに追加します。
  • これで、リストには各フォールドのスコアがあるため、平均してKフォールドスコアを取得します。

完全なトレーニングセットT1ではなく、サブトレーニングセットTiでループ内で機能エンジニアリングを実行することが非常に重要です。

この理由は、Tiのフィッティング/機能エンジニアを行う場合、そのモデルでは目に見えないCViでテストするためです。一方、T1でフィット/機能エンジニアを行う場合、選択するすべてのCVはサブセットT1である必要があります。そのため、同じデータサンプルでトレーニングとテストを行っているため、楽観的にバイアスがかかります。つまり、オーバーフィットします。

StackExchangeの非常に優れた答えはこれです。これにより、コードの例を使用して、より深く説明できます。参照してくださいこれを付録として。


1
これらのリンクの内容の簡単な要約を含めることができますか?自己完結型の回答をお勧めします。そうしないと、リンクの場所が変更された場合に「linkrot」に対して非常に脆弱になる可能性があります。または、これをコメントに変換することもできます。
Silverfish

@Silverfish完了
Abhishek Divekar 2016年

したがって、forループ内では、フォールドごとに異なる機能を選択できますか?
stackunderflow 2017

2

Efron-Gongの「楽観主義」ブートストラップは、これに非常に適しています。アイデアは、予測モデルの開発に利用可能なすべてのデータを使用し、同じモデルの将来のパフォーマンスの可能性を推定するためにすべてのデータを使用することです。また、サンプルサイズが100分の1であり、分割サンプルアプローチが機能しない。

ブートストラップを正しく使用するには、を使用したすべてのステップをプログラム、各リサンプルでそれらを新たに繰り返す必要があります。特徴の選択を除いて、ここに良い例があります:複数の予測子を持つロジスティック回帰モデルの解釈Y

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