Come confrontare le prestazioni dei metodi di selezione delle funzionalità?


10

Esistono diversi approcci di selezione delle caratteristiche / selezione delle variabili (vedi ad esempio Guyon & Elisseeff, 2003 ; Liu et al., 2010 ):

  • metodi di filtro (ad esempio, basato sulla correlazione, basato sull'entropia, basato sull'importanza della foresta casuale),
  • metodi wrapper (ad es. ricerca in avanti, ricerca in salita) e
  • metodi incorporati in cui la selezione delle funzioni fa parte dell'apprendimento del modello.

Molti algoritmi pubblicati sono anche implementati negli strumenti di apprendimento automatico come R, Python, ecc.

Quale sarebbe un metodo appropriato per confrontare diversi algoritmi di selezione delle caratteristiche e selezionare il metodo migliore per un determinato problema / set di dati? Un'ulteriore domanda sarebbe se ci sono metriche conosciute che misurano le prestazioni degli algoritmi di selezione delle caratteristiche?

Risposte:


4

Questo è un problema difficile e i ricercatori stanno facendo molti progressi.

Se stai cercando una selezione di funzioni supervisionate , consiglierei LASSO e le sue varianti. La valutazione dell'algoritmo è molto semplice con l'apprendimento supervisionato: le prestazioni di qualsiasi metrica si scelga sui dati di test.

Due avvertenze principali di LASSO sono che (1) le funzionalità selezionate non rileveranno automaticamente un'interazione, quindi è necessario creare tutte le funzionalità a priori (ovvero, prima di eseguirle attraverso il modello) e (2) LASSO non identificherà non -le relazioni lineari (ad es. una relazione quadratica ).

Un modo per provare a superare questi due avvertimenti è usare le macchine potenziate a gradiente che effettuano la selezione automatica. Vale la pena notare che le proprietà statistiche di GBM sono un po 'più ambigue di quelle di LASSO.

Se stai cercando una selezione di funzioni senza supervisione, sembra che ci sia un approccio di regolarizzazione simile usato da questi ricercatori, ma la valutazione in questo caso particolare diventa meno ovvia. Le persone provano molte cose diverse come PCA / SVD o K-Means che alla fine cercheranno di trovare un'approssimazione lineare ai dati.

In tal caso, le misure tipiche della prestazione sono l'errore di ricostruzione o l'RMSE dei cluster.

In termini di software, R e Python hanno entrambi GBM, LASSO, K-Means, SVD e PCA. GLMNET e XGBoost in R e Sklearn per Python sono le librerie rilevanti.


1

Considero sempre la selezione delle funzionalità come un passo verso un risultato finale.

Di seguito, mescolo in qualche modo la selezione delle caratteristiche e la riduzione della dimensionalità, che potrebbero avere alcuni obiettivi e possono essere confuse.

Alcuni usi tipici:

  • riduzione dei calcoli nell'apprendimento automatico: la qualità della selezione è un fattore del risultato finale dell'apprendimento e, ovviamente, anche la velocità per realizzare l'apprendimento

  • visualizzazione / comprensione dei dati, dove si combinano eventualmente più dimensioni. È buono quando non nasconde cose interessanti e quando è comprensibile

  • semplificazione dei risultati di apprendimento, ancora per renderli comprensibili (ad es. analisi delle cause alla radice). Buono se semplice ma comunque sufficiente in termini di qualità

  • controllo sull'adattamento, come suggerisce la risposta precedente

  • ...

Quindi, non penso che ci sia una regola generale (come sempre in ML), ma questo è un problema caso per caso.

Solo una convinzione personale ...


0

Dipende molto dalla situazione specifica e dal problema che si desidera risolvere. Esistono alcune regole generali, ad esempio i metodi wrapper sono più flessibili e anche più inclini al sovradimensionamento.

Le prestazioni di selezione delle funzioni possono essere valutate dalle prestazioni complessive dell'attività di apprendimento, ad esempio si possono selezionare funzioni con metodi diversi e quindi utilizzare questi diversi set di funzioni per la classificazione e confrontare la precisione dei classificatori ottenuti.

Un altro fattore importante in alcuni scenari come alcune applicazioni biologiche è l'interpretazione delle funzionalità selezionate e i risultati, ad esempio in un problema di clustering, il significato delle funzionalità selezionate e dei cluster risultanti è una misura molto importante delle prestazioni.


0

Dovresti eseguire una serie di test artificiali, cercando di rilevare funzionalità pertinenti utilizzando metodi diversi e sapendo in anticipo quali sottoinsiemi di variabili di input influenzano la variabile di output.

Un buon trucco sarebbe quello di mantenere un insieme di variabili di input casuali con diverse distribuzioni e assicurarsi che gli algoritmi di selezione delle funzionalità li taggino come non rilevanti.

Un altro trucco sarebbe assicurarsi che, dopo aver permesso le righe, le variabili contrassegnate come rilevanti smettano di essere classificate come rilevanti.

Quanto sopra si applica ad entrambi gli approcci di filtro e wrapper.

Assicurati anche di gestire i casi quando presi separatamente (uno per uno) le variabili non mostrano alcuna influenza sul bersaglio, ma se presi congiuntamente rivelano una forte dipendenza. Esempio potrebbe essere un noto problema XOR (controlla il codice 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)) 

Produzione:

Python 3 XOR illustrazione

[0. 0. 0.00429746]

Pertanto, il metodo di filtro presumibilmente potente (ma univariato) (calcolo delle informazioni reciproche tra variabili out e input) non è stato in grado di rilevare alcuna relazione nel set di dati. Considerando che sappiamo per certo che è una dipendenza al 100% e possiamo prevedere Y con una precisione del 100% conoscendo X.

Una buona idea sarebbe quella di creare una sorta di benchmark per i metodi di selezione delle funzionalità, qualcuno vuole partecipare?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.