You are on page 1of 33
VYUUUUYUEUYUYU YDS UY MUU UUUY » u JOU VRVVVUY Generar buenos modelos de entrenamiento: preprocesamiento de datos La calidad de los datos y la cantidad de informacién util que contienen son factores clave que determinan lo bien que pueden aprender un algoritmo de aprendizaje automatico. Por lo tanto, es absolutamente imprescindible que nos aseguremos de examinar y preprocesar un conjunto de datos antes de lanzarlo a un algoritmo de aprendizaje. En este capitulo, trataremos las técnicas fundamentales para el preprocesamiento de datos, que nos ayudaran a generar buenos modelos de aprendizaje automatico. Los temas que trataremos en este capitulo son los siguientes + Eliminar e imputar valores ausentes de un conjunto de datos. * Dar forma a datos categéricos para los algoritmos de aprendizaje automatico. Seleccionar caracteristicas importantes para la construccion del modelo. Tratar con datos ausentes | mundo real que nuestras muestras carezcan de uno No es extrafio en aplicaciones del jucido un error en el proceso ‘9 mas valores por varias razones. Puede haberse prod que ciertas medidas no sean hayan dejado en blanco en una encuesta, por ejemplo. faltan como espacios en blanco en nuestras de recopilacién de datos, aplicables o que, simplemente, determinados campos se Normalmente vemos los valores que tablas de datos o como cadenas de texto por defecto como Nan, que significa not a number, 0 NULL (un indicador de datos desconocidos en bases de datos relacionales). 129 - - ‘antes de proceder con otros andlisis. técnicas practicas para tratar los valores datos 0 imputando los valores tras y caracterfsticas. lores ausentes en datos tabulares blar de las distintas técnicas para tratar los valores ausentes, vamos a ‘marco de datos de ejemplo a partir de un archivo Valores Separados CSV, del inglés Comma-separated Values) para entender mejor el problema: port pandas as pd -om io import StringIO >>> csv_data = \ 1192, B,C,D 1.0,2.0,3.0,4.0 -0,6.0,,8.0 4 10.0,11.0,12.0,''' S35 # Si est4s utilizando Python 2.7, debes >>> # corivertir la cadena a unicode: >>> # csv_data = unicode (csv_data) >>> df = pd.read_csv(StringI0(csv_data)) >>> df A B . D 01.0 2.0 3.0 4.0 15.0 6.0 NaN 8.0 210.0 11.0 12.0 NaN my ww = aw ~ ee ~ ~ > ~ ~ + = ~~ — Mediante este c6digo, leemos unos datos en formato CSV en un DataFrame = de pandas mediante la funcién read_csv y observamosique las dos celdas ‘desaparecidas han sido sustituidas por Nav. Hemos utilizado la funcion stxing10 en el cdigo de ejemplo anterior solo con propésitos ilustrativos. Esto nos permite leer Ja cadena asignada a csv_data en un DataFrame de pandas como si fuera un archivo CSV normal en nuestro disco duro. Para un DataFrame mas amplio, puede ser tedioso buscar valores manualmente. En este caso, podemos utilizar el método isnul1 para devolver un DataFrame con valores booleanos que indican si una celda contiene un valor numérico (False) 0 si falta algan dato (true). Después, con el método sun, podemos devolver el numero de valores ausentes por columna del siguiente modo: 130 IBHPHRHHHHH EHR eH Hee VOEVVUEV EVV OYEYUVYYUUUUUUUUUUUUUUUCOOOCEE o , pe oth itulo 4 >>> Af. isnul2() .sum() é x6 Boo ae 2, at dtype: intea Aunque scikit-learn fue desarrollado para trabajar con matrices de NumPy, a veces puede ser més contveniente preprocesar datos mediante un DataFrame de pandas. Siempre podemos acceder a la matriz subyacente de NumPy de un DataFrame a través del atributo RC values antes de incorporarlo a un estimador de scikit-learn: >>> df, values, array({{ 1. , ad Bd 0 Tees nan, 8.1, (10., 12., mnanj]) Eliminar muestras o caracteristicas con valores ausentes Una de las formas mas sencillas de tratar con datos perdidos es, simplemente, eliminar Por completo las correspondientes caracteristicas (columnas) 0 muestras (filas) del conjunto de datos; las filas con valores ausentes se pueden descartar facilmente con el método dropna >>> df .dropna (axis=0) fees cD Dete0 2.0 3.0 4.0 De forma parecida, podemos descartar columnas que tengan como minimo un NaN en alguna fila ajustando el argumento axis a1 >>> df.dropna (axis=1) OPE D2 0 1 5.0 6.0 2 10.0 11.0 El método dropna soporta muchos parametros adicionales que pueden ser utiles: las columna n NaN # solo se descartan filas donde toda # devuelve toda la matriz puesto que no os valores # tenemos una fila donde todos an NaN —10-——— secs Babs Ke 298 “filas donde NaN aparece en determinadas columnas Ja climinacién de los datos eliminados pueda parecer un enfoque adecuado, -algin inconveniente. Por ejemplo, podemos acabar ‘demasiadas muestras, lo que evitara obtener un andlisis confiable; 0, os demasiadas columnas, corremos el riesgo de perder informacion ‘necesita nuestro clasificador para discriminar entre clases. En la siguiente ‘echaremos un vistazo.a una de las alternativas mas utilizadas para tratar con es perdidos: las técnicas de interpolaci6n. _ Imputar valores ausentes A menudo, la eliminacién de muestras 0 de columnas enteras de caracteristicas no puede llevar a cabo porque perderiamos demasiados datos valiosos. En este caso, ‘utilizar distintas técnicas de interpolacin para estimar los valores ausentes p de otras muestras de entrenamiento en nuestro conjunto de datos. Una de ; técnicas de interpolacién mas conocidas es la imputaci6n por medias, donde ente sustituimos el valor ausente con el valor medio de toda la columna de | Una manera adecuada de conseguirlo es mediante la clase Imputer de ‘como se muestra en el codigo siguiente: from sklearn.preprocessing import Imputer = Imputer (missing values='NaN', strategy-'mean', axis=0) , imr = imr. fit (df.values) d_data = imr.transform(df.values) 'BABRBRAHHHHHRHRHBEHEEEEEeeE ) ~) ~) ~ ~ ) m) al all al ) a a _) -s) ” aa) m7) = ny) ) =) a 3 3 =) 2 2 2 =) -) Capitulo 4 array({{ 1., re 3x 4.1, C 5., Geni BoB y 8.1, UAB, 412.6: p12.» 6.1]) En este caso, hemos sustituido cada valor Nan con la media correspondiente, que ha sido calculada por separado para cada columna de caracteristicas. Si cambiaramos el ajuste axis-0 a axis=1, calculariamos las medidas de la fila. Otras opciones para el pardmetro strategy son median o most_frequent, donde este tltimo sustituye los valores ausentes por los valores mas frecuentes. Esto resulta atil para imputar valores de caracteristicas categéricas; por ejemplo, una columna de caracteristicas que almacena una codificacién de nombres de colores, como rojo, verde y azul. Encontraremos ejemplos de este tipo de datos mas adelante en este capitulo Entender la API de estimador de scikit-learn En la secci6n anterior, hemos utilizado la clase Imput er de scikit-learn para imputar valores ausentes en nuestro conjunto de datos. La clase Imputer pertenece a las denominadas clases transformadoras de scikit-learn, que se utilizan para la transformaci6n de datos. Los dos métodos esenciales de estos estimadores son fit y transform. El método fit se utiliza para aprender los parametros a partir de los datos de entrenamiento, mientras que el método transform utiliza estos parametros para transformar los datos. Cualquier matriz de datos que debe ser transformada necesita tener el mismo numero de caracteristicas que la matriz de datos utilizada para ajustar el modelosLa siguiente figura muestra como se utiliza un transformador, ajustado en los datos de entrenamiento, para transformar tanto un conjunto de datos de entrenamiento como un nuevo conjunto de datos de prueba: Datos de prueba | est. fit(X_train) est .transform(x train) est.transform(x_test) 3) Datos de entrenamiento transformados Datos de prueba transformados 133 | Generar buenos modelos de entrenamiento: preprocesamiento de datos [Los clasificadores que utilizamos en el Capitulo 3, Un recorrido por los clasifiendores de aprendizaje automatico con scikit-learn pertenecen a los denominados estimadores de scikit-learn, con una API que es conceptualmente muy similar lores tienen un método predict aunque tambien pueden tener un método transform, como veremos mis adelante en este capitulo. Como puedes observar, también hemos utilizado el método fit para aprender los parametros de un modelo cuando entrenamos dichos estimadores para clasificacion. Sin embargo, en tareas de izaje supervisado, proporcionamos adicionalmente las etiquetas de clase para ajustar el modelo, que después se puede utilizar para hacer predicciones sobre nuevas muestras de datos mediante el método predict, como se muestra en la siguiente figura: Datos de || Etiquetas de intrenamiento] entrenamiento| 1 @ [BerROCtrain, y train) Datos de prueba @ [qrrretictctest) Etiquetas predichas Trabajar con datos categoricos Por el momento, hemos trabajado solo con valores numéricos. Sin embargo, no es extrafio que los conjuntos de datos del mundo real contengan una o més columnas de caracteristicas categéricas. En esta seccién, utilizaremos una serie de ejem ae simples pero efectivos para comprobar como podemos tratar este tipo de d a a librerias computacionales numéricas. aor Caracteristicas nominales y ordinales Cuando hablamos de datos categéricos, debemos distinguir entre caracteristicas nominales y ordinales. Las caracteristicas ordinales se pueden entender como 134 a la clase transformadora. A €\ &\ E\ \€\é€\ ev. ele ae we

You might also like