Będziesz musiał uruchomić zestaw sztucznych testów, próbując wykryć odpowiednie funkcje przy użyciu różnych metod, jednocześnie wiedząc z góry, które podzbiory zmiennych wejściowych wpływają na zmienną wyjściową.
Dobrą sztuczką byłoby utrzymanie zestawu losowych zmiennych wejściowych o różnych rozkładach i upewnienie się, że algos wyboru funkcji rzeczywiście oznaczają je jako nieistotne.
Inną sztuczką byłoby upewnienie się, że po dopuszczeniu wierszy zmienne oznaczone jako odpowiednie przestają być klasyfikowane jako odpowiednie.
Powyższe dotyczy zarówno podejścia do filtra, jak i owijania.
Pamiętaj także, aby rozpatrywać przypadki, gdy wzięte oddzielnie (jedna po drugiej) zmienne nie wykazują żadnego wpływu na cel, ale gdy są wzięte razem, ujawniają silną zależność. Przykładem może być dobrze znany problem XOR (sprawdź kod 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))
Wynik:
[0,0 0,00429746]
Tak więc, prawdopodobnie potężna (ale jednoczynnikowa) metoda filtrowania (obliczanie wzajemnej informacji między zmiennymi wyjściowymi i wejściowymi) nie była w stanie wykryć żadnych relacji w zbiorze danych. Chociaż wiemy na pewno, że jest to 100% zależność i możemy przewidzieć Y ze 100% dokładnością znając X.
Dobrym pomysłem byłoby stworzenie pewnego rodzaju testu porównawczego dla metod wyboru funkcji, czy ktoś chce wziąć udział?