入力変数のどのサブセットが出力変数に影響するかを事前に把握しながら、さまざまな方法を使用して関連機能を検出しようとする一連の人工テストを実行する必要があります。
良いトリックは、異なる分布を持つランダムな入力変数のセットを保持し、機能選択アルゴリズムが実際にそれらを関連性がないものとしてタグ付けすることを確認することです。
別のトリックは、行を並べ替えた後、関連としてタグ付けされた変数が関連として分類されなくなることを確認することです。
上記は、フィルターとラッパーの両方のアプローチに適用されます。
また、個別に(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))
出力:
[0. 0. 0.00429746]
そのため、おそらく強力な(ただし、単変量)フィルタリングメソッド(外部変数と入力変数間の相互情報の計算)では、データセット内の関係を検出できませんでした。それが100%の依存関係であることは確かですが、Xを知っていれば100%の精度でYを予測できます。
機能選択方法の一種のベンチマークを作成するのは良い考えですが、誰か参加したいですか?