2015-01-07 22 views
7

Come gestire i valori mancanti nei set di dati prima di applicare l'algoritmo di apprendimento automatico ??.Come gestire i NaN mancanti per l'apprendimento automatico in python

Ho notato che non è una cosa intelligente rilasciare i valori NAN mancanti. Di solito faccio interpolare (media calcolata) usando i panda e riempi i dati, il che è un po 'come funziona e migliora l'accuratezza della classificazione, ma potrebbe non essere la cosa migliore da fare.

Ecco una domanda molto importante. Qual è il modo migliore per gestire i valori mancanti nel set di dati?

Ad esempio, se si vede questo set di dati, solo il 30% ha dati originali.

Int64Index: 7049 entries, 0 to 7048 
Data columns (total 31 columns): 
left_eye_center_x   7039 non-null float64 
left_eye_center_y   7039 non-null float64 
right_eye_center_x   7036 non-null float64 
right_eye_center_y   7036 non-null float64 
left_eye_inner_corner_x  2271 non-null float64 
left_eye_inner_corner_y  2271 non-null float64 
left_eye_outer_corner_x  2267 non-null float64 
left_eye_outer_corner_y  2267 non-null float64 
right_eye_inner_corner_x  2268 non-null float64 
right_eye_inner_corner_y  2268 non-null float64 
right_eye_outer_corner_x  2268 non-null float64 
right_eye_outer_corner_y  2268 non-null float64 
left_eyebrow_inner_end_x  2270 non-null float64 
left_eyebrow_inner_end_y  2270 non-null float64 
left_eyebrow_outer_end_x  2225 non-null float64 
left_eyebrow_outer_end_y  2225 non-null float64 
right_eyebrow_inner_end_x 2270 non-null float64 
right_eyebrow_inner_end_y 2270 non-null float64 
right_eyebrow_outer_end_x 2236 non-null float64 
right_eyebrow_outer_end_y 2236 non-null float64 
nose_tip_x     7049 non-null float64 
nose_tip_y     7049 non-null float64 
mouth_left_corner_x   2269 non-null float64 
mouth_left_corner_y   2269 non-null float64 
mouth_right_corner_x   2270 non-null float64 
mouth_right_corner_y   2270 non-null float64 
mouth_center_top_lip_x  2275 non-null float64 
mouth_center_top_lip_y  2275 non-null float64 
mouth_center_bottom_lip_x 7016 non-null float64 
mouth_center_bottom_lip_y 7016 non-null float64 
Image      7049 non-null object 
+4

"* Qual è il modo migliore per gestire i valori mancanti nel set di dati? *" I sosterrebbe che la risposta a questa domanda è sia specifica della situazione, sia basata sull'opinione pubblica. – CoryKramer

+0

È possibile rilasciare le righe con valori mancanti, ma ciò potrebbe ridurre le prestazioni o impostare i valori mancanti su un valore che non influisce sulla previsione, ma questo potrebbe ancora variare il modello se si dispone di molti valori mancanti, in realtà dipende . Puoi usare la media/mediana ma dovrai misurare le prestazioni di tutti gli approcci e vedere cosa è meglio, dipende dal fatto che ci sia un valore in quelle funzioni e quale modello tu selezioni – EdChum

risposta

9
What is the best way to handle missing values in data set? 

non c'è miglior modo, ogni soluzione/algoritmo ha i propri pro e contro (e si può anche mescolare alcuni di loro insieme per creare la propria strategia e mettere a punto i parametri relativi a venire uno meglio soddisfare i tuoi dati, ci sono molte ricerche/documenti su questo argomento).

Ad esempio, media Assegnazione è semplice e veloce, ma sarebbe sottovalutare la varianza e la forma della distribuzione è distorto sostituendo NaN con il valore medio, mentre KNN Assegnazione potrebbe non essere ideale in un grande insieme di dati in termini di complessità temporale, dal momento che itera su tutti i punti dati ed esegue il calcolo per ciascun valore NaN e l'ipotesi è che l'attributo NaN sia correlato con altri attributi.

How to handle missing values in datasets before applying machine learning algorithm?? 

Oltre a significare imputazione si parla, si potrebbe anche dare un'occhiata a K-Nearest Imputazione Neighbour e Regressione Imputazione, e si riferiscono alla potente classe Imputer in scikit-learn per controllare API esistenti usare.

KNN Imputazione

calcolare la media dei k più vicini vicini di casa di questo punto NaN.

Regressione Imputazione

Un modello di regressione è stimata per prevedere i valori osservati di una variabile sulla base di altre variabili, e che il modello viene poi utilizzato per imputare i valori nei casi in cui tale variabile è mancante.

Here collegamenti a '' 'Impressione dei valori mancanti' sezione. Ho anche sentito parlare della libreria Orange per l'imputazione, ma non ho ancora avuto la possibilità di usarla.

2

Non esiste un unico modo migliore per gestire i dati mancanti. L'approccio più rigoroso è quello di modellare i valori mancanti come parametri aggiuntivi in ​​un quadro probabilistico come PyMC. In questo modo otterrai una distribuzione su valori possibili, invece di una singola risposta.Ecco un esempio di come trattare i dati mancanti usando PyMC: http://stronginference.com/missing-data-imputation.html

Se si vuole veramente tappare quei buchi con stime puntuali, allora si sta cercando di eseguire "imputazione". Allontanerei da semplici metodi di imputazione come il riempimento del mean poiché essi macellano davvero la distribuzione congiunta delle tue caratteristiche. Invece, prova qualcosa come softImpute (che cerca di dedurre il valore mancante tramite un'approssimazione di basso grado). La versione originale di softImpute è scritta per R ma ho creato una versione Python (insieme ad altri metodi come l'imputazione di kNN): https://github.com/hammerlab/fancyimpute