• Home
  • Chi sono
  • Risorse
  • Contatti
  • Approfondimenti
  • Cerca nel sito

Lorenzo Govoni

Business e Tecnologia

  • Big Data
  • Business
  • Excel
  • Intelligenza Artificiale

Feature Selection: come funziona la tecnica RFE

RFE

Quando ci si trova a che fare con un elevano numero di caratteristiche, il modello di machine learning che si sta addestrando può risentirne nelle performance.

Vuoi perché alcune di esse sono tra loro positivamente correlate, o perché altre aggiungono poche informazioni aggiuntive al dataset: di fatto si ottengono risultati più scarsi di quelli che ci si può aspettare.

Un modo per superare questo problema è avvalersi di un metodo di Feature Selection, selezione delle caratteristiche (o selezione delle funzionalità).

 

Cos’è la Feature Selection?

Un set di dati di apprendimento automatico per la classificazione o la regressione è composto da righe e colonne, come un foglio di calcolo Excel. Le righe sono spesso indicate come campioni (samples) e le colonne sono indicate come caratteristiche, funzionalità (features) o attributi (attributes).

La selezione delle funzionalità è uno dei concetti chiave, che consiste nel selezionare solo alcune caratteristiche di un dataset.

Troppe caratteristiche possono influire negativamente sulle prestazioni del modello, sia in termini di tempo per l’addestramento, sia in termini di rischio di overfitting.

I metodi di selezione delle caratteristiche aiutano a risolvere questi problemi riducendo le dimensioni del set di dati senza far perdere troppe informazioni al dataset iniziale. Per non parlare del fatto che aiutano a dare un senso alle caratteristiche e alla loro importanza.

Insieme alla pulizia dei dati, la feature selection dovrebbe essere un elemento di importanza primaria quando si inizia la progettazione di un modello di machine learning.

Feature Selection: metodi principali

Esistono diversi strumenti per eseguire la selezione delle caratteristiche. Essi si possono classificare in:

  • Metodi Wrapper: si basano su algoritmi greedy, che mirano a trovare la migliore combinazione possibile di funzionalità che si traducono nel modello con le migliori prestazioni. Ciò sarà costoso dal punto di vista computazionale e spesso poco pratico in caso di ricerca esaustiva.

  • Metodi Filtro: permettono di selezionare le funzionalità da un set di dati in modo indipendente per qualsiasi algoritmo di apprendimento automatico. Basandosi solo sulle caratteristiche di queste variabili, le funzionalità vengono filtrate dai dati prima che inizi l’apprendimento.

    Questi metodi sono potenti e semplici in quanto aiutano a rimuovere rapidamente le funzionalità e sono generalmente il primo passo di qualsiasi pipeline di selezione delle funzionalità.

  • Metodi Embedded: i metodi integrati completano il processo di selezione delle funzionalità all’interno della costruzione dell’algoritmo di apprendimento automatico stesso. In altre parole, eseguono la selezione delle funzionalità durante l’addestramento del modello, motivo per cui vengono chiamati metodi incorporati.

    Un algoritmo di apprendimento sfrutta il proprio processo di selezione delle variabili ed esegue contemporaneamente la selezione delle funzionalità con la classificazione / regressione.

In questo articolo ci concentriamo su un metodo wrapper, la RFE o Recursive Feature Elimination.

 

Cos’è la Recursive Feature Elimination?

Chiamata anche Eliminazione delle caratteristiche ricorsive, la RFE è una tecnica che rimuove in modo ricorsivo le funzionalità; successivamente costruisce un modello usando gli attributi rimanenti e infine calcola l’accuratezza del modello.

In Scikit-Learn esistono due importanti opzioni di configurazione quando si utilizza RFE: la scelta del numero di funzionalità da selezionare e la scelta dell’algoritmo utilizzato per aiutare a scegliere le funzionalità.

Entrambi questi iperparametri possono essere esplorati, anche se le prestazioni del metodo non dipendono fortemente dalla corretta configurazione di questi iperparametri.

In ogni modo, il funzionamento di questo algoritmo può essere sintetizzato nel seguente modo:

  1. Adatta il modello al set di dati di allenamento (metodo fit());
  2. Registra le metriche di punteggio corrispondenti per il modello, ad es. – accuratezza, precisione, richiamo;
  3. Determina quale caratteristica è la meno importante nel formulare previsioni sul set di dati di test e rilascia questa funzionalità;
  4. Il nostro modello ha ora ridotto il set di funzionalità di 1. Se il set di funzionalità è composto da più di una funzionalità, si riparte dal passaggio 1 (con una funzionalità in meno, quella esclusa), altrimenti si prosegue al passaggio 5;
  5. Seleziona il set di funzionalità che fornisce la metrica di punteggio più alta (o più bassa, a seconda di quale usi). 

 

Scelta del dataset

Vediamo come utilizzare l’RFE avvalendoci del Parkinson Dataset, che puoi reperire a questo link. Vengono valutate le condizioni di salute di 31 pazienti, 23 di queste affette dalla malattia di Parkinson.

Il dataset è formato da 23 caratteristiche, che riassumono le condizioni cliniche dei pazienti, di seguito rappresentate:

  • Name – Nome soggetto ASCII e numero di registrazione;
  • MDVP: Fo (Hz) – Frequenza fondamentale vocale media;
  • MDVP: Fhi (Hz) – Frequenza fondamentale vocale massima;
  • MDVP: Flo (Hz) – Frequenza vocale minima;
  • MDVP: Jitter (%), MDVP: Jitter (Abs), MDVP: RAP, MDVP: PPQ, Jitter: DDP – Diverse misure di variazione della frequenza fondamentale;
  • MDVP: Shimmer, MDVP: Shimmer (dB), Shimmer: APQ3, Shimmer: APQ5, MDVP: APQ, Shimmer: DDA – Diverse misure di variazione dell’ampiezza;
  • NHR, HNR – Due misure del rapporto tra rumore e componenti tonali nella voce;
  • RPDE, D2 – Due misure di complessità dinamica non lineare;
  • DFA – Esponente del ridimensionamento del segnale frattale;
  • spread1, spread2, PPE – Tre misure non lineari di variazione di frequenza fondamentale.

La variabile target da prevedere invece è lo status, che indica appunto lo stato di salute del paziente (uno, ha il Parkinson, zero è sano).

L’obiettivo risulta quello di prevedere se un nuovo paziente è affetto dalla malattia, oppure no. Ovviamente il dataset è molto piccolo, e in questa sede si vuole far comprendere al lettore come funziona la selezione delle caratteristiche col metodo RFE (una volta valutato il modello è poi possibile prevedere una nuova istanza per vedere cosa si ottiene).

 

Importare le librerie

Per iniziare importiamo le librerie necessarie all’esecuzione dell’algoritmo.

Tra di esse abbiamo:

  • Pandas, Numpy e Matplotlib: 3 delle librerie fondamentali per importare i dati, eseguire calcoli matematici e visualizzare i risultati su un grafico;
  • RFE: la classe per poter utilizzare l’algoritmo Recursive Feature Elimination e ordinare per importanza le caratteristiche prescelte;
  • SVM: il modulo SVM, per poter utilizzare il Support Vector Machine. Vedi questo articolo per maggiori informazioni;
  • StratifiedKFold e Cross_val_score: per eseguire e valutare il modello di convalida incrociata stratificata.

Caricare il dataset

Carichiamo il dataset, utilizzando il metodo read_csv (siccome il file è salvato in tale formato). I due puntini stanno ad indicare che si deve indicare il percorso corretto dove è salvato il file:

Visualizziamo il formato del dataset e vediamo che è composto da 195 righe e 24 colonne.

Definiamo il valore delle caratteristiche (X), eliminando quelle in questa sede di non interesse (Status e Name), e del target (y):

 

Modello senza RFE

Costruiamo in primo luogo un modello senza ricorrere al metodo RFE per vedere le differenze. Utilizziamo il Linear Support Vector Classification, la classe del support vector machine per trovare gli iperpiani lineari che suddividano le due classi.

Passiamo il parametro dual pari a false perché le righe sono più grandi delle colonne, come consigliato nella documentazione Sklearn:

Valutiamo il modello appena istanziato con un tipo di convalida incrociata, la convalida stratificata. Scegliamo 10 pieghe e attraverso la funzione cross_val_score, valutiamo il risultato di accuratezza della convalida incrociata sul modello linearSVC, sulle caratteristiche e sul target:

Come risultato otteniamo una media pari a 0,818 e tra parentesi la deviazione standard pari a poco più del 10%:

 

Modello con RFE

In secondo luogo vediamo come tale risultato cambia selezionando un predefinito numero di caratteristiche con il metodo RFE.

Per usarlo, prima la classe viene configurata con l’algoritmo scelto specificato tramite l’argomento “estimator” e il numero di funzioni da selezionare tramite l’argomento “n_features_to_select“.

Nel nostro caso selezioniamo 10 caratteristiche, quasi la metà di quelle originali, e come estimator il modello LinearSVC, richiamato nello step precedente.

In aggiunta definiamo quante caratteristiche devono essere “troncate” ad ogni step con il parametro step (che definiamo pari a 1). Un numero X maggiore di uno indica che ad ogni iterazione l’algoritmo toglie le X caratteristiche meno importanti valutate.

Dopodichè, come visto prima, calcoliamo il risultato della convalida incrociata cambiando il valore dello stimatore (che diventa rfe):

La media risulta incrementata (0,85) e la deviazione standard diminuita (0,099): abbiamo migliorato leggermente le performance!

Valutiamo ora le caratteristiche che ha scelto il modello RFE.

Una volta configurata, la classe rfe viene adattata ad un set di dati di allenamento per selezionare le funzionalità chiamando la funzione fit(). Dopo che ciò è avvenuto, la scelta delle variabili di input può essere vista tramite l’attributo “support_” che fornisce un True o False per ogni variabile di input.

In questa sede estraiamo solo le caratteristiche scelte (rfe.support_[i] == True) estrandole da un ciclo for:

Come risultato, otteniamo il numero di colonna delle 10 caratteristiche selezionate, tra parentesi il nome della caratteristica effettivamente scelta e il punteggio che gli è stato assegnato:

Quest’ultimo valore viene assegnato grazie all’attributo Ranking_, il quale assegna un punteggio pari a 1 per tutte le caratteristiche scelte dall’algoritmo.

 

Recursive Feature Elimination con Cross Validation (RFECV)

Vediamo ora un’altra tecnica forse più diffusa del Recursive Feature Elimination Standard. Essa viene utilizzata insieme al metodo di convalida incrociata e prende il nome di RFECV, dall’unione dei due metodi.

Il vantaggio principale di quest’ultima tecnica è che permette di ottimizzare il numero di caratteristiche da eliminare dal modello iniziale.

Come ci riesce?

Semplicemente usando la convalida incrociata. Per ogni passaggio in cui viene eliminato il numero di funzionalità, calcola il punteggio sui dati di convalida. Il numero di funzionalità rimaste, nel passaggio che fornisce il punteggio massimo sui dati di convalida, è considerato come “the best n_features” dei dati.

Con questo metodo non è possibile selezionare un numero predefinito di features (caratteristiche), a meno che non si usa l’attributo ranking_, che indica il punteggio ottenuto dopo la convalida incrociata da ogni caratteristica (per maggiori informazioni vedi questa discussione in stackoverflow).

In aggiunta tieni presente che, in Sklearn la classe RFECV funziona solo con stimatori/classificatori che hanno gli attributi feature_importances_ o coef_ (vedi documentazione Scikit-Learn). Lo stimatore LinearSVC in precedenza richiamato possiede l’attributo coef_, quindi non dobbiamo per forza usarne un altro.

Come prima cosa importiamo la classe RFECV:

Definiamo lo stimatore, gli step e il tipo di convalida incrociata che andrà ad utilizzare (scegliamo la convalida stratificata a 10 pieghe come sopra).

Dopodiché con la funzione fit adattiamo il modello ai dati:

Visualizziamo i risultati della convalida incrociata per ogni sottoinsieme di caratteristiche con l’attributo grid_scores_:

Possiamo vedere che il valore massimo lo si ottiene alla sesta caratteristica (pari a 0,84973684). 

Quindi, il numero ottimale delle caratteristiche è pari a 6. Lo possiamo visualizzare con l’attributo n_features_:

Non ci resta che visualizzare questo risultato su un grafico. Definiamo il formato dell’immagine, l’asse x e y e i dati con la funzione plot:

Come prima, visualizziamo le sei colonne migliori trovate con l’RFECV:

Le migliori sei caratteristiche risultano le seguenti (anch’esse rappresentate come numero colonna, nome caratteristica e punteggio ottenuto, sempre pari a 1): 


Conclusione

In questo articolo abbiamo introdotto la feature selection e un metodo wrapper per scegliere un numero limitato di funzionalità, la Recursive Feature Elimination.

Un algoritmo di apprendimento automatico diverso viene fornito alla RFE e utilizzato nel nucleo del metodo: è racchiuso da RFE e utilizzato per aiutare a selezionare le funzionalità.

Questa metodologia è in contrasto con le selezioni di funzionalità basate su filtro che assegnano un punteggio a ciascuna caratteristica e selezionano quelle con il punteggio più grande (o più piccolo).

In ogni modo è buona norma usare la RFE come tecnica di preprocessamento prima di addestrare il modello. Spesso viene anche abbinata a una pipeline di machine learning in quanto permette di ridurre la perdita di dati dal modello durante l’addestramento dello stesso.

  • Modello di Kano per individuare la soddisfazione dei clienti
    Modello di Kano per individuare la soddisfazione dei clienti
  • Tre tecniche di regolarizzazione: Ridge, Lasso ed Elastic Net
    Tre tecniche di regolarizzazione: Ridge, Lasso ed…
  • L’Overfitting e l’Underfitting nel machine learning
    L’Overfitting e l’Underfitting nel machine learning
  • Algoritmo Gradient Boosting per problemi di regressione
    Algoritmo Gradient Boosting per problemi di regressione
Share
Pin
Share
Tweet

Intelligenza Artificiale Machine Learning, Sklearn, Support Vector Machine

  • Home
  • Archivio
  • Risorse
  • Newsletter
  • Cerca nel sito

Copyright © 2021 · Lorenzo Govoni - Privacy Policy