Jak porównać skuteczność metod wyboru funkcji?

10

Istnieje kilka podejść do wyboru cech / wyboru zmiennych (patrz na przykład Guyon i Elisseeff, 2003 ; Liu i in., 2010 ):

  • metody filtrowania (np. oparte na korelacji, entropii, losowe znaczenie ważności lasu),
  • metody owijania (np. wyszukiwanie do przodu, wyszukiwanie podczas wspinaczki) i
  • metody osadzone, w których wybór funkcji jest częścią uczenia się modelu.

Wiele opublikowanych algorytmów jest również zaimplementowanych w narzędziach do uczenia maszynowego, takich jak R, Python itp.

Jaka metoda byłaby odpowiednia do porównywania różnych algorytmów wyboru funkcji i wybierania najlepszej metody dla danego problemu / zestawu danych? Kolejnym pytaniem byłoby, czy znane są jakieś miary, które mierzą wydajność algorytmów wyboru funkcji?

hopfk
źródło

Odpowiedzi:

4

To trudny problem i naukowcy robią duże postępy.

Jeśli szukasz nadzorowanego wyboru funkcji, polecam LASSO i jego warianty. Ocena algorytmu jest bardzo prosta dzięki nadzorowanemu uczeniu się: wydajność dowolnej metryki wybranej na danych testowych.

Dwa główne zastrzeżenia LASSO polegają na tym, że (1) wybrane funkcje nie będą automatycznie wykrywały interakcji, więc musisz przygotować wszystkie swoje a priori (tj. Przed uruchomieniem ich przez model) i (2) LASSO nie rozpoznaje innych niż -liniczne relacje (np. relacja kwadratowa ).

Sposobem na obejście tych dwóch ostrzeżeń jest użycie Gradient Boosted Machines, który automatycznie wybiera funkcje. Warto zauważyć, że właściwości statystyczne GBM są nieco bardziej niejednoznaczne niż właściwości LASSO.

Jeśli szukasz nieobsługiwanego wyboru funkcji, wydaje się, że istnieje podobna metoda regularyzacji stosowana przez tych badaczy, ale ocena w tym konkretnym przypadku staje się mniej oczywista. Ludzie próbują wielu różnych rzeczy, takich jak PCA / SVD lub K-Means, które ostatecznie będą próbowały znaleźć liniowe przybliżenie danych.

W takim przypadku typowymi miernikami wydajności są błąd rekonstrukcji lub RMSE klastrów.

Pod względem oprogramowania zarówno R, jak i Python mają GBM, LASSO, K-Means, SVD i PCA. GLMNET i XGBoost w R oraz Sklearn dla Python są odpowiednimi bibliotekami.

franciscojavierarceo
źródło
1

Zawsze uważam wybór funkcji za krok do ostatecznego wyniku.

Poniżej w jakiś sposób łączę wybór funkcji i redukcję wymiarów, które mogą mieć pewne cele i mogą być mylone.

Niektóre typowe zastosowania:

  • redukcja obliczeń w uczeniu maszynowym: jakość wyboru jest czynnikiem ostatecznego wyniku uczenia się, a także, oczywiście, szybkości realizacji tego uczenia się

  • wizualizacja / zrozumienie danych, gdzie ostatecznie łączysz wiele wymiarów. Dobrze, gdy nie kryje ciekawych rzeczy, a kiedy jest to zrozumiałe

  • uproszczenie wyników uczenia się, aby nadal były zrozumiałe (np. analiza przyczyn źródłowych). Dobry, jeśli prosty, ale wciąż wystarczający pod względem jakości

  • kontrolowanie dopasowania, jak sugeruje poprzednia odpowiedź

  • ...

Nie sądzę więc, aby istniała ogólna zasada (jak zawsze w ML), ale jest to indywidualny problem.

Po prostu osobiste przekonanie ...

Michael Hooreman
źródło
0

Jest to bardzo zależne od konkretnej sytuacji i problemu, który chcesz rozwiązać. Istnieją pewne ogólne zasady, na przykład metody owijania są bardziej elastyczne, a także bardziej podatne na nadmierne dopasowanie.

Wydajność wyboru cech można ocenić na podstawie ogólnej wydajności zadania uczenia się, na przykład można wybrać cechy różnymi metodami, a następnie użyć tych różnych zestawów cech do klasyfikacji i porównać dokładność uzyskanych klasyfikatorów.

Innym ważnym czynnikiem w niektórych scenariuszach, takich jak niektóre zastosowania biologiczne, jest interpretowalność wybranych cech, a wyniki, na przykład w przypadku problemu klastrowania, znaczenie wybranych cech i powstałych klastrów jest bardzo ważną miarą wydajności.

Mniszek lekarski
źródło
0

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:

Ilustracja XOR w Pythonie 3

[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ł?

Anatolij Aleksiejew
źródło