Preparación de datos para el curso acelerado de aprendizaje automático.
Prepara los datos con Python en 7 días.
La preparación de los datos implica la transformación de los datos en bruto en una forma más apropiada para el modelado.
La preparación de datos puede ser la parte más importante de un proyecto de modelización predictiva y la que más tiempo consume, aunque parece ser la menos discutida. En cambio, la atención se centra en los algoritmos de aprendizaje automático, cuyo uso y parametrización se ha convertido en algo bastante rutinario.
La preparación práctica de datos requiere conocimientos de limpieza de datos, transformación de datos de selección de características, reducción de la dimensionalidad y más.
En este curso intensivo, descubrirá cómo puede empezar y preparar con confianza los datos para un proyecto de modelado predictivo con Python en siete días.
Este es un puesto grande e importante. Puede que quieras marcarlo.
Descubre la limpieza de datos, la selección de características, la transformación de datos, la reducción de la dimensionalidad y mucho más en mi nuevo libro, con 30 tutoriales paso a paso y el código fuente completo en Python.
Empecemos.
- Actualizado Jun/2020: Cambió el objetivo para el conjunto de datos del cólico de caballo.
¿Para quién es este curso intensivo?
Antes de empezar, asegurémonos de que estás en el lugar correcto.
Este curso es para los desarrolladores que pueden saber algo de aprendizaje aplicado a las máquinas. Tal vez sepan cómo trabajar en un problema de modelado predictivo de punta a punta, o al menos la mayoría de los pasos principales, con herramientas populares.
Las lecciones de este curso asumen algunas cosas de usted, como:
- Sabes cómo usar el Python básico para programar.
- Puede que sepas algo de NumPy básico para la manipulación de matrices.
- Puede que sepas algo de ciencia-ficción básica para modelar.
NO necesitas estarlo:
- ¡Un mago de las matemáticas!
- ¡Un experto en aprendizaje de máquinas!
Este curso intensivo le llevará desde un desarrollador que conoce un poco la máquina de aprendizaje hasta un desarrollador que puede preparar de forma eficaz y competente los datos para un proyecto de modelado predictivo.
Nota: Este curso intensivo asume que tienes un entorno Python 3 SciPy funcionando con al menos NumPy instalado. Si necesitas ayuda con tu entorno, puedes seguir el tutorial paso a paso aquí:
Resumen del Curso de Choque
Este curso intensivo se divide en siete lecciones.
Podrías completar una lección por día (recomendado) o completar todas las lecciones en un día (hardcore). Realmente depende del tiempo que tengas disponible y de tu nivel de entusiasmo.
A continuación se presenta una lista de las siete lecciones que le permitirán comenzar y ser productivo con la preparación de datos en Python:
- Lección 01: Importancia de la preparación de los datos
- Lección 02: Llenar de imputación los valores perdidos
- Lección 03: Seleccione las características con RFE
- Lección 04: Escala de datos con normalización
- Lección 05: Transformar las categorías con una codificación de un solo golpe
- Lección 06: Transformar los números en categorías con kBins
- Lección 07: Reducción de la dimensionalidad con PCA
Cada lección puede llevarte 60 segundos o hasta 30 minutos. Tómese su tiempo y complete las lecciones a su propio ritmo. Haga preguntas e incluso publique los resultados en los comentarios de abajo.
Las lecciones pueden esperar que te vayas y descubras cómo hacer las cosas. Te daré pistas, pero parte del objetivo de cada lección es forzarte a aprender dónde buscar ayuda con y sobre los algoritmos y las mejores herramientas de Python. (Pista: Tengo todas las respuestas en este blog; usa el cuadro de búsqueda).
Publica tus resultados en los comentarios; ¡te animaré!
Aguanta, no te rindas.
¿Quieres empezar a preparar los datos?
Toma mi curso intensivo gratuito de 7 días por correo electrónico ahora (con código de muestra).
Haga clic para inscribirse y también para obtener una versión gratuita del curso en formato PDF.
Lección 01: Importancia de la preparación de datos
En esta lección, descubrirá la importancia de la preparación de datos en el modelado predictivo con el aprendizaje de las máquinas.
Los proyectos de modelización predictiva implican aprender de los datos.
Los datos se refieren a ejemplos o casos del dominio que caracterizan el problema que se quiere resolver.
En un proyecto de modelización predictiva, como la clasificación o la regresión, los datos en bruto no suelen poder utilizarse directamente.
Hay cuatro razones principales por las que esto es así:
- Tipos de datos: Los algoritmos de aprendizaje de máquinas requieren que los datos sean números.
- Requisitos de datos: Algunos algoritmos de aprendizaje de máquinas imponen requisitos a los datos.
- Errores de datos: Es posible que haya que corregir el ruido estadístico y los errores en los datos.
- Complejidad de datos: Las complejas relaciones no lineales pueden ser sacadas de los datos.
Los datos en bruto deben ser preprocesados antes de ser utilizados para ajustar y evaluar un modelo de aprendizaje de máquina. Este paso en un proyecto de modelado predictivo se denomina «preparación de datos.”
Hay tareas comunes o estándar que puede utilizar o explorar durante el paso de preparación de datos en un proyecto de aprendizaje automático.
Estas tareas incluyen:
- Limpieza de datos: Identificando y corrigiendo errores o fallos en los datos.
- Selección de características: Identificar las variables de entrada más relevantes para la tarea.
- Transformaciones de datos: Cambiar la escala o distribución de las variables.
- Ingeniería de características: Derivando nuevas variables de los datos disponibles.
- Reducción de la dimensionalidad: Creando proyecciones compactas de los datos.
Cada una de estas tareas es todo un campo de estudio con algoritmos especializados.
Su tarea
Para esta lección, debe enumerar tres algoritmos de preparación de datos que conoce o puede haber utilizado antes y dar un resumen de una línea para su propósito.
Un ejemplo de un algoritmo de preparación de datos es la normalización de datos que escala las variables numéricas al rango entre cero y uno.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
En la próxima lección, descubrirá cómo fijar los datos que tienen valores perdidos, llamados imputación de datos.
Lección 02: Llenar de imputación los valores perdidos
En esta lección, descubrirá cómo identificar y rellenar los valores que faltan en los datos.
Los datos del mundo real a menudo tienen valores perdidos.
Los datos pueden tener valores faltantes por varias razones, como las observaciones que no se registraron y la corrupción de los datos. El manejo de los datos faltantes es importante, ya que muchos algoritmos de aprendizaje automático no admiten datos con valores faltantes.
Llenar los valores perdidos con datos se denomina imputación de datos y un método popular para la imputación de datos consiste en calcular un valor estadístico para cada columna (como una media) y sustituir todos los valores perdidos de esa columna por la estadística.
El conjunto de datos del cólico de los caballos describe las características médicas de los caballos con cólico y si vivieron o murieron. Tiene valores perdidos marcados con un signo de interrogación ‘?’. Podemos cargar el conjunto de datos con la función read_csv() y asegurarnos de que los valores de los signos de interrogación están marcados como NaN.
Una vez cargado, podemos usar la clase SimpleImputer para transformar todos los valores perdidos marcados con un valor NaN con la media de la columna.
El ejemplo completo figura a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Transformación de imputación estadística para el conjunto de datos del cólico de caballo de numpy importación isan de pandas importación read_csv de sklearn.imputar importación SimpleImputer # Cargar conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv’ dataframe = read_csv(url, encabezado=Ninguno, na_valores=‘?’) # Dividido en elementos de entrada y salida datos = dataframe.valores ix = [[i para i en rango(datos.forma[[1]) si i != 23] X, y = datos[[:, ix], datos[[:, 23] # Imprimir el total de lo que falta imprimir(«Desaparecido: %d % suma(isan(X).aplanar())) # definir imputador imputador = SimpleImputer(estrategia=«malo»…) # Encajar en el conjunto de datos imputador.encajar(X) # Transformar el conjunto de datos Xtrans = imputador.Transformar(X) # Imprimir el total de lo que falta imprimir(«Desaparecido: %d % suma(isan(Xtrans).aplanar())) |
Su tarea
Para esta lección, debe ejecutar el ejemplo y revisar el número de valores que faltan en el conjunto de datos antes y después de la transformación de imputación de datos.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
En la próxima lección, descubrirás cómo seleccionar las características más importantes de un conjunto de datos.
Lección 03: Seleccionar características con RFE
En esta lección, descubrirá cómo seleccionar las características más importantes de un conjunto de datos.
La selección de características es el proceso de reducir el número de variables de entrada cuando se desarrolla un modelo predictivo.
Es conveniente reducir el número de variables de entrada para reducir el costo computacional de la modelación y, en algunos casos, mejorar el rendimiento del modelo.
La eliminación de características recursivas, o RFE para abreviar, es un algoritmo de selección de características muy popular.
La RFE es popular porque es fácil de configurar y utilizar y porque es eficaz para seleccionar aquellas características (columnas) en un conjunto de datos de entrenamiento que son más o más relevantes para predecir la variable objetivo.
La biblioteca de aprendizaje de máquinas de Python de aprendizaje científico proporciona una implementación de RFE para el aprendizaje de máquinas. RFE es una transformación. Para utilizarla, primero, la clase se configura con el algoritmo elegido especificado a través del argumento «estimator» y el número de características a seleccionar a través del «n_funciones_para_seleccionar«argumento».
En el ejemplo que figura a continuación se define un conjunto de datos de clasificación sintética con cinco características de entrada redundantes. La RFE se utiliza entonces para seleccionar cinco características utilizando el algoritmo del árbol de decisión.
# Informe de las características que fueron seleccionadas por RFE de sklearn.conjuntos de datos importación make_classification de sklearn.selección_de_características importación RFE de sklearn.árbol importación DecisionTreeClassifier # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=10, n_informativo=5, n_redundante=5, estado_aleatorio=1) # Definir RFE rfe = RFE(estimador=DecisionTreeClassifier(), n_funciones_para_seleccionar=5) # Encajar RFE rfe.encajar(X, y) # resumir todas las características para i en rango(X.forma[[1]): imprimir(Columna: %d, Seleccionado=%s, Rango: %d’ % (i, rfe.apoyo_[[i], rfe.ranking_[[i])) |
Su tarea
Para esta lección, debe ejecutar el ejemplo y revisar qué características se seleccionaron y la clasificación relativa que se asignó a cada característica de entrada.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
En la próxima lección, descubrirá cómo escalar datos numéricos.
Lección 04: Escala de datos con normalización
En esta lección, descubrirá cómo escalar datos numéricos para el aprendizaje de la máquina.
Muchos algoritmos de aprendizaje de máquinas funcionan mejor cuando las variables de entrada numérica se escalan a un rango estándar.
Esto incluye algoritmos que usan una suma ponderada de la entrada, como la regresión lineal, y algoritmos que usan medidas de distancia, como los vecinos más cercanos.
Una de las técnicas más populares para escalar datos numéricos antes de la modelización es la normalización. La normalización escala cada variable de entrada por separado al rango 0-1, que es el rango para los valores de punto flotante donde tenemos la mayor precisión. Requiere que conozca o sea capaz de estimar con precisión los valores mínimos y máximos observables de cada variable. Puede ser capaz de estimar estos valores a partir de los datos disponibles.
Puedes normalizar tu conjunto de datos usando el objeto de aprendizaje científico MinMaxScaler.
En el ejemplo que figura a continuación se define un conjunto de datos de clasificación sintética y luego se utiliza el MinMaxScaler para normalizar las variables de entrada.
# Ejemplo de normalización de datos de entrada de sklearn.conjuntos de datos importación make_classification de sklearn.preprocesamiento importación MinMaxScaler # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=5, n_informativo=5, n_redundante=0, estado_aleatorio=1) # resumir los datos antes de la transformación imprimir(X[[:3, :]) # definir el escalador trans = MinMaxScaler() # Transformar los datos X_norm = trans.fit_transform(X) # resumir los datos después de la transformación imprimir(X_norm[[:3, :]) |
Su tarea
Para esta lección, debe ejecutar el ejemplo e informar la escala de las variables de entrada tanto antes como después de la transformación de normalización.
Para los puntos de bonificación, calcule el mínimo y el máximo de cada variable antes y después de la transformación para confirmar que se aplicó como se esperaba.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
En la próxima lección, descubrirá cómo transformar las variables categóricas en números.
Lección 05: Transformar las categorías con una codificación de un solo golpe
En esta lección, descubrirá cómo codificar variables de entrada categóricas como números.
Los modelos de aprendizaje automático requieren que todas las variables de entrada y salida sean numéricas. Esto significa que si sus datos contienen datos categóricos, debe codificarlos en números antes de poder ajustar y evaluar un modelo.
Una de las técnicas más populares para transformar las variables categóricas en números es la codificación de una sola vez.
Los datos categóricos son variables que contienen valores de etiqueta en lugar de valores numéricos.
Cada etiqueta de una variable categórica puede ser mapeada a un entero único, llamado codificación ordinal. Luego, una codificación de un solo golpe puede ser aplicada a la representación ordinal. Aquí es donde se añade una nueva variable binaria al conjunto de datos para cada valor entero único de la variable, y la variable categórica original se elimina del conjunto de datos.
Por ejemplo, imagina que tenemos un «color» variable con tres categorías (‘rojo‘, ‘verdey…azul‘). En este caso, se necesitan tres variables binarias. Un valor «1» se coloca en la variable binaria para el color y un valor «0» para los otros colores.
Por ejemplo:
rojo, verde, azul 1, 0, 0 0, 1, 0 0, 0, 1 |
Esta transformación de codificación de una sola vez está disponible en la biblioteca de aprendizaje de la máquina Python a través de la clase OneHotEncoder.
El conjunto de datos del cáncer de mama contiene sólo variables de entrada categóricas.
El siguiente ejemplo carga el conjunto de datos y un hot encode cada una de las variables de entrada categóricas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Un solo golpe codifica el conjunto de datos del cáncer de mama de pandas importación read_csv de sklearn.preprocesamiento importación OneHotEncoder # Definir la ubicación del conjunto de datos url = «https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv» # Cargar el conjunto de datos dataset = read_csv(url, encabezado=Ninguno) # Recuperar el conjunto de datos datos = dataset.valores # Separados en columnas de entrada y salida X = datos[[:, :–1].astype(str) y = datos[[:, –1].astype(str) # resumir los datos en bruto imprimir(X[[:3, :]) # Definir la única transformación de codificación en caliente codificador = OneHotEncoder(escasos=Falso) # Encajar y aplicar la transformación a los datos de entrada X_oe = codificador.fit_transform(X) # resumir los datos transformados imprimir(X_oe[[:3, :]) |
Su tarea
Para esta lección, debe ejecutar el ejemplo e informar sobre los datos en bruto antes de la transformación, y el impacto en los datos después de que se aplicó la codificación de un solo disparo.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
En la próxima lección, descubrirá cómo transformar las variables numéricas en categorías.
Lección 06: Transformar los números en categorías con kBins
En esta lección, descubrirá cómo transformar las variables numéricas en variables categóricas.
Algunos algoritmos de aprendizaje de máquinas pueden preferir o requerir variables de entrada categóricas u ordinales, como algunos algoritmos de árbol de decisión y basados en reglas.
Esto podría ser causado por valores atípicos en los datos, distribuciones multimodales, distribuciones altamente exponenciales y más.
Muchos algoritmos de aprendizaje automático prefieren o funcionan mejor cuando las variables de entrada numérica con distribuciones no estándar se transforman para tener una nueva distribución o un tipo de datos totalmente nuevo.
Un enfoque consiste en utilizar la transformación de la variable numérica para tener una distribución de probabilidad discreta en la que a cada valor numérico se le asigna una etiqueta y las etiquetas tienen una relación ordenada (ordinal).
Esto se denomina transformación de discretización y puede mejorar el rendimiento de algunos modelos de aprendizaje automático de conjuntos de datos al hacer discreta la distribución de probabilidad de las variables de entrada numérica.
El transformador de discretización está disponible en la biblioteca de aprendizaje de la máquina Python de scikit-learn a través de la clase KBinsDiscretizer.
Permite especificar el número de contenedores discretos a crear (n_bins), si el resultado de la transformación será una codificación ordinal o de una sola vez (codificación), y la distribución utilizada para dividir los valores de la variable (estrategia), como ‘uniforme.’
En el ejemplo que figura a continuación se crea una variable de entrada sintética con 10 variables de entrada numéricas, y luego se codifica cada una de ellas en 10 contenedores discretos con una codificación ordinal.
# discretizar las variables de entrada numérica de sklearn.conjuntos de datos importación make_classification de sklearn.preprocesamiento importación KBinsDiscretizador # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=5, n_informativo=5, n_redundante=0, estado_aleatorio=1) # resumir los datos antes de la transformación imprimir(X[[:3, :]) # definir la transformación trans = KBinsDiscretizador(n_bins=10, codificar=«ordinal, estrategia=«uniforme) # Transformar los datos X_discreto = trans.fit_transform(X) # resumir los datos después de la transformación imprimir(X_discreto[[:3, :]) |
Su tarea
Para esta lección, debe ejecutar el ejemplo e informar sobre los datos en bruto antes de la transformación, y luego el efecto que la transformación tuvo sobre los datos.
Para obtener puntos de bonificación, explore las configuraciones alternativas de la transformación, como las diferentes estrategias y el número de recipientes.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
En la próxima lección, descubrirá cómo reducir la dimensionalidad de los datos de entrada.
Lección 07: Reducción de la dimensionalidad con PCA
En esta lección, descubrirá cómo utilizar la reducción de la dimensionalidad para reducir el número de variables de entrada en un conjunto de datos.
El número de variables o características de entrada de un conjunto de datos se denomina su dimensionalidad.
La reducción de la dimensionalidad se refiere a las técnicas que reducen el número de variables de entrada en un conjunto de datos.
Más características de entrada a menudo hacen que la tarea de modelación predictiva sea más difícil de modelar, lo que se conoce más generalmente como la maldición de la dimensionalidad.
Aunque en las estadísticas de alta dimensionalidad se suelen utilizar técnicas de reducción de la dimensionalidad para la visualización de los datos, estas técnicas pueden utilizarse en el aprendizaje automático aplicado para simplificar una clasificación o un conjunto de datos de regresión a fin de ajustarse mejor a un modelo de predicción.
Tal vez la técnica más popular para la reducción de la dimensionalidad en el aprendizaje de las máquinas es el Análisis de Componentes Principales, o PCA para abreviar. Es una técnica que proviene del campo del álgebra lineal y puede ser utilizada como técnica de preparación de datos para crear una proyección de un conjunto de datos antes de ajustar un modelo.
El conjunto de datos resultante, la proyección, puede ser usado como entrada para entrenar un modelo de aprendizaje de la máquina.
La biblioteca de aprendizaje de ciencias proporciona la clase de PCA que se puede ajustar en un conjunto de datos y utilizar para transformar un conjunto de datos de entrenamiento y cualquier conjunto de datos adicionales en el futuro.
En el ejemplo que figura a continuación se crea un conjunto de datos de clasificación binaria sintética con 10 variables de entrada y luego se utiliza el PCA para reducir la dimensionalidad del conjunto de datos a los tres componentes más importantes.
# ejemplo de pca para la reducción de la dimensionalidad de sklearn.conjuntos de datos importación make_classification de sklearn.descomposición importación PCA # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=10, n_informativo=3, n_redundante=7, estado_aleatorio=1) # resumir los datos antes de la transformación imprimir(X[[:3, :]) # definir la transformación trans = PCA(n_componentes=3) # Transformar los datos X_dim = trans.fit_transform(X) # resumir los datos después de la transformación imprimir(X_dim[[:3, :]) |
Su tarea
Para esta lección, debe ejecutar el ejemplo e informar sobre la estructura y la forma del conjunto de datos en bruto y el conjunto de datos después de que se haya aplicado la transformación.
Para los puntos de bonificación, explore las transformaciones con diferentes números de componentes seleccionados.
Ponga su respuesta en los comentarios de abajo. Me encantaría ver lo que se te ocurre.
Esta fue la última lección del minicurso.
¡El fin!
(Mira lo lejos que has llegado)
Lo lograste. ¡Bien hecho!
Tómese un momento y mire hacia atrás para ver lo lejos que ha llegado.
Usted descubrió:
- La importancia de la preparación de datos en un proyecto de aprendizaje de la máquina de modelado predictivo.
- Cómo marcar los datos que faltan e imputar los valores que faltan utilizando la imputación estadística.
- Cómo eliminar las variables de entrada redundantes mediante la eliminación recursiva de características.
- Cómo transformar las variables de entrada con escalas diferentes a un rango estándar llamado normalización.
- Cómo transformar las variables de entrada categóricas para que sean números llamados de codificación de una sola vez.
- Cómo transformar las variables numéricas en categorías discretas llamadas discretización.
- Cómo usar el PCA para crear una proyección de un conjunto de datos en un número menor de dimensiones.