La selezione delle funzioni deve essere eseguita solo sui dati di allenamento (o su tutti i dati)?


10

La selezione delle funzioni deve essere eseguita solo sui dati di allenamento (o su tutti i dati)? Ho esaminato alcune discussioni e articoli come Guyon (2003) e Singhi e Liu (2006) , ma non sono ancora sicuro della risposta giusta.

La configurazione del mio esperimento è la seguente:

  • Set di dati: 50 controlli sani e 50 pazienti con malattia (circa 200 caratteristiche che possono essere rilevanti per la previsione della malattia).
  • Compito è diagnosticare la malattia in base alle funzionalità disponibili.

Quello che faccio è

  1. Prendi l'intero set di dati ed esegui la selezione delle funzioni (FS). Conservo solo le funzionalità selezionate per ulteriori elaborazioni
  2. Dividi per testare e addestrare, classificare i treni utilizzando i dati del treno e le funzionalità selezionate. Quindi, applica il classificatore per testare i dati (usando nuovamente solo le funzionalità selezionate). Viene utilizzata la convalida di esclusione.
  3. ottenere l'accuratezza della classificazione
  4. Media: ripetere 1) -3) N volte. (100).N=50

Concordo sul fatto che l'esecuzione di FS su tutto il set di dati può comportare alcuni pregiudizi, ma la mia opinione è che durante la media sia "mediata" (fase 4). È corretto? (La varianza della precisione è )<2%

1 Guyon, I. (2003) "An Introduction to Variable and Feature Selection", The Journal of Machine Learning Research, vol. 3, pagg. 1157-1182
2 Singhi, SK e Liu, H. (2006) "Distorsione di selezione del sottoinsieme di funzioni per l'apprendimento delle classificazioni", procedimento ICML '06 Atti della 23a conferenza internazionale sull'apprendimento automatico, pagg. 849-856

Risposte:


12

La procedura che stai utilizzando comporterà stime delle prestazioni ottimisticamente distorte, perché utilizzi i dati del set di test utilizzato nei passaggi 2 e 3 per decidere quali funzionalità utilizzate nel passaggio 1. Ripetendo l'esercizio si riduce la varianza della stima delle prestazioni, non il bias, quindi il bias non sarà nella media. Per ottenere una stima delle prestazioni imparziale, i dati del test non devono essere utilizzati in alcun modo per effettuare scelte sul modello, inclusa la selezione delle funzionalità.

Un approccio migliore consiste nell'utilizzare la convalida incrociata nidificata, in modo che la convalida incrociata esterna fornisca una stima delle prestazioni ottenibili utilizzando un metodo di costruzione del modello (inclusa la selezione delle funzionalità) e la convalida incrociata interna sia utilizzata per selezionare le funzionalità in modo indipendente in ogni piega della convalida incrociata esterna. Quindi crea il tuo modello predittivo finale utilizzando tutti i dati.

Dato che hai più funzioni rispetto ai casi, è molto probabile che si adattino troppo ai dati semplicemente selezionando le funzionalità. È un po 'un mito che la selezione delle caratteristiche migliora le prestazioni predittive, quindi se questo è ciò che ti interessa (piuttosto che identificare le caratteristiche rilevanti come un fine in sé), allora probabilmente stai meglio usando la regressione della cresta e non eseguendo alcuna funzione selezione. Ciò probabilmente fornirà prestazioni predittive migliori rispetto alla selezione delle caratteristiche, a condizione che il parametro di cresta sia selezionato con cura (utilizzo la minimizzazione della statistica PRESS di Allen, ovvero la stima di esclusione dell'errore quadratico medio).

Per ulteriori dettagli, vedi Ambroise e McLachlan e la mia risposta a questa domanda .


Grazie per la risposta. In effetti sono interessato a entrambi, per trovare le funzionalità pertinenti e migliorare le prestazioni predittive. Nei miei esperimenti (SVM per la classificazione), la selezione delle caratteristiche ha migliorato in modo significativo l'accuratezza della previsione (tuttavia, come hai notato, questo potrebbe essere il risultato di un eccesso di adattamento dei dati). Suppongo che per regressione della cresta intendi qualcosa noto anche come regolarizzazione di Tikhonov?
pedro29,

sì, la regressione della cresta è solo una normale regressione lineare con un termine di penalità basato sulla norma quadrata dei pesi. Per la maggior parte dei problemi funziona altrettanto bene come SVM, ma è più facile da implementare (e puoi risolvere l'errore di validazione incrociata con esclusione essenzialmente essenzialmente gratuito, che può essere utilizzato per ottimizzare gli iperparametri).
Dikran Marsupial,

a proposito, qual è la differenza tra regolarizzazione della cresta e selezione delle caratteristiche? Voglio dire, alla fine della giornata, entrambi indicano "il miglior sottoinsieme" di predittori da un determinato set di predittori.
pedro29,

la regressione della cresta non identifica un sottoinsieme di funzioni, la forma di regressione penalizzata LASSO o LARS. Sarebbe la mia scelta del metodo di selezione delle caratteristiche in quanto è meno suscettibile all'adattamento eccessivo poiché il termine di penalità impone un ordinamento delle caratteristiche che entrano e escono dal modello, quindi ci sono meno gradi di libertà rispetto alla semplice ricerca del set migliore di Caratteristiche.
Dikran Marsupial,

3

Proprio come un addendum alle risposte qui, ho due link che mi hanno davvero aiutato a capire perché questa non è una buona procedura:

Modifica: come richiesto, una breve spiegazione del contenuto dei collegamenti:

Supponiamo che stia addestrando un classificatore e che abbia un set di dati di 1000 campioni, con 1 milione di funzioni ciascuno. Non posso elaborarli tutti, quindi ho bisogno di meno funzionalità (diciamo, posso calcolare 300 funzionalità). Ho anche un set di test tenuto da 100 campioni per stimare con precisione la mia precisione fuori dal campione, nel mondo reale.

Se filtro le mie 1 milione di funzioni fino a 300, selezionando quelle con la più alta correlazione con le destinazioni dell'intero set di dati, commetto un errore (perché sto introducendo un overfitting che non può essere rilevato in seguito da Cross Validation). Il mio set teso mostrerà questo sputando indietro un valore di precisione scadente.

In base ai collegamenti precedenti, il modo corretto per farlo è quello di dividere il mio set di dati in un set di addestramento e set di convalida incrociata, quindi ottimizzare il mio modello (filtraggio delle funzionalità, ecc.) In base a questo set di allenamento e al punteggio CV associato. Se sto usando le pieghe a K, devo sintonizzarmi da zero ogni volta che faccio una divisione / piega e quindi fare una media dei risultati.

A livello di programmazione, si procede come segue:

  • Tenere da parte una parte del set di dati come set di controllo.
  • Dividi il resto del tuo set di dati (d'ora in poi chiamato T1) in K-fold.
  • In un ciclo continuo da i = 1 a K, procedi come segue:
    • seleziona l'i-fold come set di CV e i restanti campioni come set di allenamento (d'ora in poi chiamato Ti).
    • Fai qualunque ingegneria di funzionalità e selezione delle funzionalità che desideri: filtro funzionalità, combinale ecc.
    • Converti sia il tuo set di CV (l'attuale fold, chiamato CVi) che il tuo set di allenamento Ti Ti in uno con le funzionalità appropriate.
    • Allena il tuo modello sul set di allenamento Ti
    • Ottieni il punteggio dalla piega attuale, CVi. Aggiungi questo punteggio a un elenco contenente tutti i punteggi.
  • Ora, la tua lista ha il punteggio di ogni fold, quindi fai una media, ottenendo il punteggio di K fold.

È davvero importante eseguire l'ingegnerizzazione delle funzionalità all'interno del loop, sul set di sub-training, Ti, piuttosto che sul set di training completo, T1.

La ragione di ciò è che quando si adatta / ingegnere di funzionalità per Ti, si esegue il test su CVi, che non è visibile per quel modello. Considerando che, se si misura / si occupa di ingegnere di funzionalità su T1, qualsiasi CV scelto deve essere un sottoinsieme T1, e quindi si sarà ottimisticamente distorti, cioè si sovrautilizzerà, perché ci si sta allenando e testando sugli stessi campioni di dati.

Una risposta StackExchange davvero buona è questa , che la spiega in modo più approfondito e con un esempio del codice. Vedi anche questo come un addendum.


1
Potresti includere un breve riassunto del contenuto di questi link? Preferiamo risposte autonome, altrimenti possono essere molto vulnerabili a "linkrot" se i collegamenti cambiano posizione. In alternativa, possiamo convertirlo in un commento per te.
Silverfish

@Silverfish Done
Abhishek Divekar

Quindi all'interno del for-loop, si potrebbero avere diverse funzionalità selezionate per piega diversa?
Stackunderflow

2

Il bootstrap "ottimismo" di Efron-Gong è ottimo per questo. L'idea è di utilizzare tutti i dati disponibili per sviluppare il modello predittivo e utilizzare tutti i dati per stimare le probabili prestazioni future di quello stesso modello. E la dimensione del tuo campione è troppo piccola di un fattore 100 per far funzionare qualsiasi approccio a campione diviso.

Y

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.