2009-07-23 18 views
7

Ho un database, costituito da un gruppo di record (circa 600.000) in cui alcuni record mancano di alcuni campi. Il mio obiettivo è trovare un modo per prevedere quali dovrebbero essere i valori dei dati mancanti (in modo che io possa riempirli) in base ai dati esistenti.Prevedere valori di dati mancanti in un database

Un'opzione che sto osservando è il clustering, ovvero i record che sono tutti completi come punti in qualche spazio, alla ricerca di cluster di punti, e quindi quando viene assegnato un record con valori di dati mancanti, prova a scoprire se ci sono tutti i cluster che potrebbero appartenere sono coerenti con i valori dei dati esistenti. Tuttavia ciò potrebbe non essere possibile perché alcuni dei campi di dati sono su una scala nominale (ad esempio colore) e quindi non possono essere messi in ordine.

Un'altra idea che ho avuto è quella di creare una sorta di modello probabilistico che preveda i dati, li formuli sui dati esistenti e li utilizzi per estrapolare.

Quali algoritmi sono disponibili per fare quanto sopra, e c'è un software disponibile gratuitamente che implementa tali algoritmi (questo software sarà in C# tra l'altro).

+2

Enorme problema. Molto dipendente da molte cose che non possiamo prevedere. L'istanza più semplice: ci sono dei bias di selezione in cui i record hanno campi mancanti? Come lo sai? Cosa puoi fare a riguardo? Sono disponibili indicatori proxy? E così via ... – dmckee

+1

Accettando con il commento sopra. Potrebbero esserci alcuni algoritmi generali che potresti usare, ma dovresti personalizzare ciascuno di essi nel tuo dominio. – job

risposta

7

Trattare con valori mancanti è una domanda metodico che ha a che fare con il significato reale della dati.

diversi metodi che è possibile utilizzare (dettagliato post on my blog):

  1. Ignora la riga di dati. Questo di solito viene eseguito quando manca l'etichetta di classe (presupponendo che l'obiettivo di data mining sia la classificazione), o molti attributi mancano dalla riga (non solo uno).Tuttavia si ottiene, ovviamente, scarso rendimento se la percentuale di tali righe è alta

  2. utilizzare una costante globale da compilare per i valori mancanti. Come "sconosciuto", "N/A" o meno infinito. Questo è usato perché a volte non ha senso cercare di prevedere il valore mancante. Per esempio, se si dispone di un DB se, per esempio, i candidati del college e lo stato di residenza manca per alcuni, riempiendolo in non ha molto senso ...

  3. utilizzare l'attributo significare. Ad esempio, se il reddito medio di una famiglia americana è X, è possibile utilizzare tale valore per sostituire i valori di reddito mancanti.

  4. Utilizzare la media degli attributi per tutti i campioni appartenenti alla stessa classe. Diciamo che hai un DB di prezzi delle auto che, tra le altre cose, classifica le auto in "Lusso" e "Basso budget" e hai a che fare con valori mancanti nel campo dei costi. Sostituzione costo mancante di un auto di lusso con il costo medio di tutte le automobili di lusso è probabilmente più accurata, allora il valore che si otterrebbe se si fattore di vetture a basso budget

  5. Usa algoritmo di data mining per prevedere il valore. Il valore può essere determinato usando regressione, strumenti basati sull'inferenza usando formalismo Baysiano, alberi decisionali, algoritmi di cluster utilizzati per generare input per il metodo n. 4 (K-Mean \ Median ecc.) Suggerirei prima di esaminare regressione e alberi decisionali (Generazione di alberi ID3) perché sono relativamente facili e ci sono molti esempi in rete.

Per quanto riguarda i pacchetti, se lo può permettere e siete nel look mondo Microsoft a SQL Server Analysis Services (SSAS in breve) che implementano la maggior parte del di cui sopra.

Qui ci sono alcuni link a dati senza Minning pacchetti software:

Anche se non C# è un buon intro agli alberi decisionali e all'apprendimento baysiano (usando Ruby): http://www.igvita.com/2007/04/16/decision-tree-learning-in-ruby/ http://www.igvita.com/2007/05/23/bayes-classification-in-ruby/

C'è anche questa libreria Ruby che trovo molto utile (anche a fini di apprendimento): http://ai4r.rubyforge.org/machineLearning.html

ci dovrebbero essere molti campioni per questi algoritmi on-line in qualsiasi lingua, quindi sono sicuro che vi facilmente trovare # roba C troppo ...

Modificato:

dimenticato questo nel mio post originale. Questo è sicuramente DEVE AVERE se stai giocando con il data mining ... Download Microsoft SQL Server 2008 Data Mining Add-ins for Microsoft Office 2007 (Richiede SQL Server Analysis Services - SSAS - che non è gratuito ma è possibile scaricare una versione di prova).

Questo ti permetterà di giocare facilmente e provare le diverse tecniche in Excel prima di andare a implementare questa roba da te.Poi di nuovo, dato che sei nell'ecosistema Microsoft, potresti persino decidere di optare per una soluzione basata su SSAS e contare sul fatto che i ragazzi di SQL Server lo facciano per te :)

2

La previsione dei valori mancanti viene generalmente considerata come parte della fase di pulizia dei dati che deve essere eseguita prima che i dati vengano estratti o analizzati ulteriormente. Questo è abbastanza importante nei dati del mondo reale.

Si prega di dare un'occhiata a questo algoritmo http://arxiv.org/abs/math/0701152

Attualmente Microsoft SQL Server Analysis Services 2008 è disponibile anche con algoritmi come questi http://technet.microsoft.com/en-us/library/ms175312.aspx che aiutano nella modellazione predittiva di attributi.

applausi

+0

Bello. Ma il documento sembra assumere implicitamente l'assenza di bias di selezione. O mi sono perso qualcosa? – dmckee

6

Questo è meno di un algoritmico e più di una questione filosofica e metodologica. Esistono diverse tecniche disponibili per affrontare questo tipo di domande. Acock (2005) offre una buona introduzione ad alcuni dei metodi. Sebbene possa sembrare che ci siano un sacco di matematica/statistiche (e potrebbe sembrare un grande sforzo), vale la pena di pensare a cosa succederebbe se si incasinasse. il blog di

Andrew Gelman è anche una buona risorsa, anche se la funzionalità di ricerca sul suo blog lascia un po 'a desiderare ...

Spero che questo aiuti.


Acock (2005)

blog di

http://oregonstate.edu/~acock/growth-curves/working%20with%20missing%20values.pdf

Andrew Gelman

http://www.stat.columbia.edu/~cook/movabletype/mlm/

Problemi correlati