Come devono essere ordinate la selezione delle caratteristiche e l'ottimizzazione dell'iperparametro nella pipeline dell'apprendimento automatico?


14

Il mio obiettivo è classificare i segnali dei sensori. Finora il concetto della mia soluzione è: i) Funzionalità di ingegneria dal segnale non elaborato ii) Selezione di funzionalità rilevanti con ReliefF e un approccio di clustering iii) Applicazione di NN, Random Forest e SVM

Tuttavia sono intrappolato in un dilemma. In ii) e iii), ci sono iperparametri come k-Neigbours più vicino per ReliefF o la lunghezza della finestra, per cui viene valutato il segnale del sensore, o il numero di unità nascoste in ogni strato di NN

Ci sono 3 problemi che vedo qui: 1) L'ottimizzazione dei parametri di selezione delle caratteristiche influenzerà le prestazioni del classificatore 2) L'ottimizzazione degli iperparametri del classificatore influenzerà la scelta delle funzioni. 3) La valutazione di ogni possibile combinazione di configurazione è intrattabile.

Quindi le mie domande sono: a) Posso fare un presupposto semplificante, i parametri di selezione delle funzioni di ottimizzazione possono essere disaccoppiati dai parametri del classificatore di ottimizzazione? b) Ci sono altre possibili soluzioni?


Penso che il disaccoppiamento dell'ottimizzazione della selezione delle funzioni e dell'ottimizzazione del classificatore sia valido, poiché l'euritica di reliefF mira a massimizzare la varianza tra le classi e minimizzare la varianza tra le classi che indica anche un buon classificatore. Pertanto, la messa a punto di parametri ottimali per reliefF rende anche un buon classificatore più "probabile". Comunque avere una formulazione matematica a sostegno di questa idea, sarebbe molto bello.
Grunwalski

Una variante specifica di questa domanda: la selezione delle caratteristiche dovrebbe far parte della routine di crossvalidation (come in: # per ogni set di hyperparam classifer: # per ogni serie CV di k-fold: 1) selezione delle caratteristiche, 2) ridimensionamento delle caratteristiche, 3) adattamento del classificatore 4) prevedere sul set di test?
Nikolas Rieble,

1
@NikolasRieble Ho appena scritto una risposta alla domanda originale e ho incluso anche la tua domanda nella risposta
Dennis Soemers,

Risposte:


14

Come ti sei già osservato, la scelta delle funzionalità (selezione delle funzionalità) potrebbe avere un impatto su quali iperparametri per il tuo algoritmo sono ottimali e quali iperparametri selezionati per il tuo algoritmo potrebbero avere un impatto su quale scelta delle funzionalità sarebbe ottimale.

Quindi, sì, se davvero ti interessa davvero spremere ogni singola percentuale delle prestazioni dal tuo modello e puoi permetterti la quantità richiesta di calcolo, la soluzione migliore è probabilmente quella di fare la selezione delle caratteristiche e l'ottimizzazione dell'iperparametro "allo stesso tempo". Probabilmente non è facile (a seconda di come si fa la selezione delle funzionalità). Il modo in cui immagino che funzioni sarebbe come avere diversi set di funzionalità come candidati e trattare la selezione di un set di funzionalità tra tutti i set candidati come un iperparametro aggiuntivo.

In pratica, però, potrebbe non essere fattibile. In generale, se non puoi permetterti di valutare tutte le possibili combinazioni, ti consiglierei:

  1. Ottimizza in modo molto lento gli iperparametri, solo per assicurarti di non assegnare valori estremamente negativi ad alcuni iperparametri. Questo spesso può essere fatto solo a mano se hai una buona comprensione intuitiva dei tuoi iperparametri o se esegui una procedura di ottimizzazione dell'iperparametro molto breve usando solo un mucchio di funzioni che altrimenti decenti sono buone.

  2. Selezione delle caratteristiche, con iperparametri che forse non sono ottimizzati al 100% ma almeno non estremamente terribili. Se hai già almeno un algoritmo di apprendimento automatico configurato in modo abbastanza decente, avere buone funzionalità sarà significativamente più importante per le tue prestazioni rispetto agli iperparametri a micro-ottimizzazione. Esempi estremi: se non si dispone di funzionalità, non è possibile prevedere nulla. Se hai una funzione cheat che contiene l'etichetta di classe, puoi classificare perfettamente tutto.

  3. Ottimizza gli iperparametri con le funzionalità selezionate nel passaggio precedente. Questa dovrebbe essere una buona serie di funzioni ora, dove in realtà potrebbe valere la pena ottimizzare un po 'l'iperparam.


Per rispondere alla domanda aggiuntiva che Nikolas ha pubblicato nei commenti, chiedendo come tutte queste cose (selezione delle caratteristiche, ottimizzazione dell'iperparametro) interagiscono con la validazione incrociata di k-fold: direi che dipende.

Ogni volta che utilizzi i dati in una delle pieghe per qualsiasi cosa e poi valuta le prestazioni su quella stessa piega, ottieni una stima distorta delle tue prestazioni (sopravvaluterai le prestazioni). Pertanto, se si utilizzano i dati in tutte le pieghe per la fase di selezione della funzione e quindi si valutano le prestazioni su ciascuna di queste pieghe, si otterranno stime distorte delle prestazioni per ciascuna di esse (il che non va bene). Allo stesso modo, se si dispone dell'ottimizzazione dell'iperparametro basata sui dati e si utilizzano i dati di determinate pieghe (o tutte le pieghe) e si valuta su quelle stesse pieghe, si otterranno nuovamente stime distorte delle prestazioni. Le possibili soluzioni sono:

  1. Ripetere la pipeline completa all'interno di ogni piega separatamente (ad es. All'interno di ogni piega, selezionare la funzione + ottimizzazione dell'iperparametro e modello di addestramento). Ciò significa che la convalida incrociata di k-fold fornisce stime imparziali delle prestazioni di questa pipeline completa .

  2. Dividi il tuo set di dati iniziale in un '' set di dati di preelaborazione '' e un '' set di dati treno / test ''. È possibile eseguire la selezione delle funzioni + l'ottimizzazione dell'iperparametro nel '' set di dati di preelaborazione ''. Quindi, correggi le funzionalità e gli iperparametri selezionati ed esegui la convalida incrociata di k-fold sul '' set di dati treno / test ''. Ciò significa che la convalida incrociata di k-fold fornisce stime imparziali delle prestazioni dell'algoritmo ML dati i valori fissi del set di funzioni e dell'iperparametro .

Nota come le due soluzioni generano stime leggermente diverse delle prestazioni. Quale è più interessante dipende dal tuo caso d'uso, dipende da come prevedi di implementare le tue soluzioni di machine learning in pratica. Se, ad esempio, sei un'azienda che intende avere la pipeline completa di selezione delle caratteristiche + ottimizzazione dell'iperparametro + formazione in esecuzione automaticamente ogni giorno / settimana / mese / anno / qualunque cosa, sarai anche interessato alle prestazioni di quel completo pipeline e vorrai la prima soluzione.

Se, d'altra parte, puoi permetterti di fare la selezione della funzione + l'ottimizzazione dell'iperparametro solo una volta nella tua vita, e in seguito solo un po 'periodicamente ri-addestrare l'algoritmo (con valori di set di funzionalità e iperparam fissi), quindi le prestazioni di quel solo passo sarà quello che ti interessa e dovresti scegliere la seconda soluzione


Puoi fornire anche riferimenti?
Nikolas Rieble,

1
Ci sono alcune immagini di un libro ben noto in questo post: nodalpoint.com/not-perform-feature-selection . Quelli sembrano concordare con la mia "possibile soluzione 1". Non ho un riferimento necessariamente per l'altro caso, a parte ... me stesso? Ho fornito il mio ragionamento / motivazione lì, che secondo me verifica, quindi questo è il riferimento: D
Dennis Soemers,

1
Quel capitolo di ESL dovrebbe essere al 100% richiesto per qualsiasi modellatore predittivo.
Matthew Drury,

Quindi, per quanto riguarda il soln 1, come si ottiene il set di funzionalità finale e l'iperparametro del modello dopo aver eseguito la selezione della funzione (fs) e l'ottimizzazione dell'iperparam (ho) in diversi iter di cv? Inoltre, quando li eseguiamo in un iter di cv, eseguiamo prima fs e poi usiamo quelle funzionalità?
SM

1
Il CV @skim viene generalmente utilizzato solo per ottenere una buona stima delle prestazioni. In genere non inizieresti direttamente a utilizzare nessuno dei modelli addestrati in una delle serie di pieghe . Se ritieni che le prestazioni stimate tramite CV siano soddisfacenti, eseguiresti di nuovo l'intera pipeline sull'insieme completo di dati di addestramento (incluso, ancora una volta, la selezione delle funzioni e l'ottimizzazione dell'iperparam). Il set di funzionalità + hyperparams + modello che ottieni è quello che avresti messo "in produzione"K1
Dennis Soemers,

4

Nessuno ha menzionato approcci che rendono la sintonizzazione dell'iperparametro e la selezione delle caratteristiche uguali, quindi ne parlerò. Per questo caso dovresti progettare tutte le funzionalità che desideri all'inizio e includerle tutte.

La ricerca ora nella comunità delle statistiche ha cercato di rendere la selezione delle funzionalità un criterio di ottimizzazione. Fondamentalmente penalizzi un modello in modo tale che sia incentivato a scegliere solo alcune funzionalità che lo aiutano a fare la migliore previsione. Ma aggiungi un parametro di ottimizzazione per determinare l'entità della penalità che dovresti sostenere.

In altre parole, consenti al modello di scegliere le funzionalità per te e hai più o meno il controllo del numero di funzionalità. Questo in realtà riduce il calcolo perché non è più necessario decidere quali funzioni, ma solo quante funzioni e il modello fa il resto.

Quindi, quando si esegue la convalida incrociata sul parametro, si esegue effettivamente la convalida incrociata anche sulla selezione delle funzionalità.

Esistono già molti modelli ML che incorporano questa selezione di funzionalità in un modo o nell'altro.

  • Macchine vettore di supporto doppiamente regolarizzate che è come il normale SVM ma con la selezione delle caratteristiche
  • Rete elastica che si occupa della regressione lineare
  • Regolarizzazione drop-out nelle reti neurali (non c'è riferimento per questo)
  • La foresta casuale esegue normalmente sottoinsiemi casuali di funzionalità, quindi tipo di handle per la selezione delle funzionalità

In breve, le persone hanno cercato di incorporare l'ottimizzazione dei parametri e la selezione delle funzioni allo stesso tempo per ridurre la complessità ed essere in grado di effettuare la convalida incrociata


0

Penso che ci stia pensando troppo. La selezione delle funzionalità, che fa parte dell'ingegneria delle funzionalità, è di solito utile, ma alcune funzionalità ridondanti non sono molto dannose nella fase iniziale di un sistema di apprendimento automatico. Quindi la migliore pratica è di generare prima tutte le funzionalità significative, quindi di usarle per selezionare algoritmi e ottimizzare i modelli, dopo aver ottimizzato il modello è possibile tagliare il set di funzionalità o decidere di utilizzare nuove funzionalità.

La procedura di apprendimento automatico è in realtà un processo iterativo, in cui si esegue l'ingegnerizzazione delle funzionalità, quindi si prova con alcuni algoritmi, quindi si sintonizzano i modelli e si torna indietro fino a quando non si è soddisfatti del risultato.


Vuoi dire che ci sta provando finché non funziona: D
Grunwalski,

Provare in una procedura ML, non a caso. In realtà ML è in realtà un po 'di hacking di per sé.
THN,
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.