特徴選択方法のパフォーマンスを比較する方法は?


10

いくつかの特徴選択 /変数選択アプローチがあります(たとえば、Guyon&Elisseeff、2003 ; Liu et al。、2010を参照):

  • フィルター方法(例:相関ベース、エントロピーベース、ランダムフォレスト重要度ベース)、
  • ラッパーメソッド(たとえば、前方検索、山登り検索)、および
  • 特徴選択がモデル学習の一部である埋め込みメソッド。

公開されているアルゴリズムの多くは、R、Pythonなどの機械学習ツールにも実装されています。

異なる特徴選択アルゴリズムを比較し、特定の問題/データセットに最適な方法を選択するための適切な方法は何ですか?さらなる質問は、特徴選択アルゴリズムのパフォーマンスを測定する既知のメトリックがあるかどうかです。

回答:


4

これは難しい問題であり、研究者は多くの進歩を遂げています。

監視機能の選択を探している場合は、LASSOをお勧めしますとそのバリエーションをします。アルゴリズムの評価は、教師あり学習で非常に簡単です。テストデータに対して選択したメトリックのパフォーマンス。

LASSOの2つの主な注意点は、(1)選択した機能が相互作用を自動的に検出しないため、すべての機能をアプリオリに(つまり、モデルで実行する前に)作成する必要があり、(2)LASSOが-線形関係(たとえば、2次関係)。

これらの2つの警告を回避する方法は、機能選択を自動的に実行するGradient Boosted Machinesを使用することです。GBMの統計的特性はLASSOの統計的特性よりも少しあいまいであることは注目に値します。

監視されていない機能の選択を探している場合、これらの研究者が使用している同様の正則化アプローチがあるようですが、この特定のケースでの評価はあまり明確になりません。人々は、PCA / SVDやK-Meansなどのさまざまなことを試みますが、最終的にはデータの線形近似を見つけようとします。

その場合、パフォーマンスの一般的な測定値は、クラスターの再構成エラーまたはRMSEです。

ソフトウェアに関しては、RとPythonの両方にGBM、LASSO、K-Means、SVD、PCAがあります。RのGLMNETとXGBoostとPython用のSklearnが関連するライブラリです。


1

私は常に機能選択を最終結果へのステップと見なしています。

以下では、機能の選択と次元の削減をいくつかの方法で組み合わせます。これらはいくつかの目標があり、混乱する可能性があります。

いくつかの典型的な用途:

  • 機械学習における計算の削減:選択の質は最終的な学習結果の要素であり、明らかに、その学習を完了するための速度

  • 最終的に複数のディメンションを組み合わせる、データの視覚化/理解。おもしろいものを隠さずに理解できるといい

  • 学習結果を単純化しますが、理解しやすくします(根本原因分析など)。シンプルであればよいが、品質に関しては十分

  • 前の回答が示唆しているように、フィッティングを制御する

  • ...

だから、(MLのように)一般的なルールはないと思いますが、これはケースバイケースの問題です。

ただ個人的な信念...


0

特定の状況や解決したい問題に大きく依存します。ラッパーメソッドなど、いくつかの一般的なルールがあります。はより柔軟で、過剰適合しがちです。

特徴選択のパフォーマンスは、学習タスクの全体的なパフォーマンスによって評価できます。たとえば、さまざまな方法で特徴を選択し、これらの異なる特徴セットを分類に使用して、取得した分類子の精度を比較できます。

一部の生物学的アプリケーションなどの一部のシナリオにおけるもう1つの重要な要素は、選択した機能の解釈可能性と、たとえばクラスタリングの問題における結果です。選択した機能の意味と結果のクラスターは、パフォーマンスの非常に重要な指標です。


0

入力変数のどのサブセットが出力変数に影響するかを事前に把握しながら、さまざまな方法を使用して関連機能を検出しようとする一連の人工テストを実行する必要があります。

良いトリックは、異なる分布を持つランダムな入力変数のセットを保持し、機能選択アルゴリズムが実際にそれらを関連性がないものとしてタグ付けすることを確認することです。

別のトリックは、行を並べ替えた後、関連としてタグ付けされた変数が関連として分類されなくなることを確認することです。

上記は、フィルターとラッパーの両方のアプローチに適用されます。

また、個別に(1つずつ)取得した場合、変数がターゲットに影響を及ぼさない場合は、ケースを処理する必要があります。例は、よく知られているXOR問題です(Pythonコードを確認してください)。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression,mutual_info_classif

x=np.random.randn(5000,3)
y=np.where(np.logical_xor(x[:,0]>0,x[:,1]>0),1,0)

plt.scatter(x[y==1,0],x[y==1,1],c='r',marker='x')
plt.scatter(x[y==0,0],x[y==0,1],c='b',marker='o')
plt.show()
print(mutual_info_classif(x, y)) 

出力:

Python 3 XORイラスト

[0. 0. 0.00429746]

そのため、おそらく強力な(ただし、単変量)フィルタリングメソッド(外部変数と入力変数間の相互情報の計算)では、データセット内の関係を検出できませんでした。それが100%の依存関係であることは確かですが、Xを知っていれば100%の精度でYを予測できます。

機能選択方法の一種のベンチマークを作成するのは良い考えですが、誰か参加したいですか?

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