Sessió de Laboratori 28/10/2005


Preprocés de dades

A la sessió del 14/10 vam veure que no podiem executar algun algorisme perquè les dades contenien valors perduts. També hem vist a classe com el tractament d'aquests tipus de valors és una de les moltes tasques de preprocés que es poden o s'han de portar a terme abans de construir un model.

En aquesta sessió treballarem amb el conjunt de dades soybean.arff on pràcticament tots els atributs contenen valors perduts. Aplicarem vàries solucions i a més veurem un exemple de resoldre tasques de preprocés utilitzant tant eines ja existents com scripts fets per nosaltres mateixos.

Substituir els valors perduts
Eliminar les instàncies amb valors perduts

Obre el fitxer soybean.arff en un editor de text i elimina tot menys les linies corresponents a les instàncies (fixa't també si al final del fitxer hi ha algun comentari per eliminar-lo) i guarda el resultat com a soybean.txt.
Executa la comanda següent:

awk 'BEGIN{FS=","}{n=0;for (i=1;i<=NF;i++) if (match("?",$i)) n++; if (n>0) printf("%d : %d\n", NR, n)}' soybean.txt

Això et donarà una llista de quines instàncies tenen valors perduts i quants (no ho farem però això es podria guardar i visualitzar si fós necessari). Modificant  la comanda com segueix

awk 'BEGIN{FS=","}{n=0;for (i=1;i<=NF;i++) if (match("?",$i)) n++; if (n==0) print $0}' soybean.txt

pots llistar només les instàncies sense cap valor perdut.

Redirecciona la comanda anterior cap a un fitxer nou, i utilitzant les definicions d'atributs del fitxer .arff original construeix un nou conjunt de dades que només contingui aquestes instàncies sense valors perduts.

Proves

Amb el conjunt original i els dos conjunts que has construit, prova els algorismes ID3, NaiveBayesSimple i J48 utilitzant l'Experimenter i repetint 5 vegades una 10-fold cross-validation. Intenta treure alguna conclusió sobre quin dels preprocessos (o cap) dóna millor resultat.