Saltar al contenido

kNN Imputación por valores perdidos en el aprendizaje automático

7 de julio de 2020

Los conjuntos de datos pueden tener valores perdidos, y esto puede causar problemas para muchos algoritmos de aprendizaje de máquinas.

Como tal, es una buena práctica identificar y reemplazar los valores faltantes para cada columna en sus datos de entrada antes de modelar su tarea de predicción. Esto se llama imputación de datos perdidos, o imputación para abreviar.

Un enfoque popular para la imputación de datos faltantes es utilizar un modelo para predecir los valores faltantes. Esto requiere que se cree un modelo para cada variable de entrada que tenga valores perdidos. Aunque cualquiera de los diferentes modelos puede utilizarse para predecir los valores perdidos, el algoritmo del vecino más cercano (KNN) ha demostrado ser generalmente eficaz, a menudo denominado «imputación del vecino más cercano.”

En este tutorial, descubrirá cómo utilizar las estrategias de imputación del vecino más cercano para los datos que faltan en el aprendizaje automático.

Después de completar este tutorial, lo sabrás:

  • Los valores perdidos deben ser marcados con valores NaN y pueden ser reemplazados con los valores estimados del vecino más cercano.
  • Cómo cargar un archivo CSV con valores faltantes y marcar los valores faltantes con valores NaN e informar el número y el porcentaje de valores faltantes para cada columna.
  • Cómo imputar los valores perdidos con los modelos del vecino más cercano como método de preparación de datos al evaluar los modelos y al ajustar un modelo final para hacer predicciones sobre nuevos datos.

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ó la columna utilizada para la predicción en los ejemplos.

kNN Imputación por valores perdidos en el aprendizaje automático

kNN Imputación por valores perdidos en el aprendizaje automático
Foto de Portengaround, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. k-Imputación del vecino más cercano
  2. Conjunto de datos sobre cólicos de caballo
  3. Imputación del vecino más cercano con KNNImputer
    1. Transformación de datos de KNNImputer
    2. Evaluación del KNNImputer y del modelo
    3. KNNImputer y un número diferente de vecinos
    4. KNNImputer se transforma cuando hace una predicción

k-Imputación del vecino más cercano

Un conjunto de datos puede tener valores perdidos.

Son filas de datos en las que no están presentes uno o más valores o columnas de esa fila. Los valores pueden faltar por completo o pueden estar marcados con un carácter o valor especial, como un signo de interrogación «?“.

Los valores podrían faltar por muchas razones, a menudo específicas del dominio del problema, y podrían incluir razones como la corrupción de las mediciones o la falta de disponibilidad.

La mayoría de los algoritmos de aprendizaje por máquina requieren valores de entrada numéricos, y un valor para cada fila y columna en un conjunto de datos. Por lo tanto, los valores perdidos pueden causar problemas para los algoritmos de aprendizaje automático.

Es común identificar los valores faltantes en un conjunto de datos y reemplazarlos por un valor numérico. Esto se llama imputación de datos, o imputación de datos faltantes.

… los datos que faltan pueden ser imputados. En este caso, podemos usar la información de los predictores del conjunto de entrenamiento para, en esencia, estimar los valores de otros predictores.

– Página 42, Applied Predictive Modeling, 2013.

Un enfoque eficaz para la imputación de datos es utilizar un modelo para predecir los valores que faltan. Se crea un modelo para cada característica que tiene valores perdidos, tomando como valores de entrada de quizás todas las demás características de entrada.

Una técnica popular para la imputación es un modelo de vecindad K-nearest. Una nueva muestra se imputa encontrando las muestras en el conjunto de entrenamiento «más cercano» a ella y promedia estos puntos cercanos para completar el valor.

– Página 42, Applied Predictive Modeling, 2013.

Si las variables de entrada son numéricas, entonces se pueden utilizar modelos de regresión para la predicción, y este caso es bastante común. Se puede utilizar un rango de diferentes modelos, aunque un simple modelo de vecino más cercano (KNN) ha demostrado ser efectivo en los experimentos. El uso de un modelo KNN para predecir o rellenar valores perdidos se conoce como «Imputación del vecino más cercano«o»Imputación KNN.”

Demostramos que el KNNimpute parece proporcionar un método más robusto y sensible para la estimación de valores perdidos […] y KNNimpute superan el método de promedio de filas comúnmente utilizado (además de llenar los valores que faltan con ceros).

– Métodos de estimación de valores perdidos para microarreglos de ADN, 2001.

La configuración de la imputación de KNN a menudo implica la selección de la medida de distancia (por ejemplo, euclidiano) y el número de vecinos contribuyentes para cada predicción, el hiperparámetro k del algoritmo KNN.

Ahora que estamos familiarizados con los métodos del vecino más cercano para la imputación de valores perdidos, echemos un vistazo a un conjunto de datos con valores perdidos.

¿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.

Descargue su minicurso GRATUITO

Conjunto de datos sobre cólicos de caballo

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.

Hay 300 filas y 26 variables de entrada con una variable de salida. Es una tarea de predicción de clasificación binaria que implica predecir 1 si el caballo vivió y 2 si el caballo murió.

Hay muchos campos que podríamos seleccionar para predecir en este conjunto de datos. En este caso, predeciremos si el problema fue quirúrgico o no (índice de la columna 23), convirtiéndolo en un problema de clasificación binaria.

El conjunto de datos tiene muchos valores perdidos para muchas de las columnas donde cada valor perdido se marca con un carácter de signo de interrogación («?»).

A continuación se presenta un ejemplo de filas del conjunto de datos con valores perdidos marcados.

Puedes aprender más sobre el conjunto de datos aquí:

No es necesario descargar el conjunto de datos ya que lo descargaremos automáticamente en los ejemplos trabajados.

Marcar los valores perdidos con un valor de NaN (no un número) en un conjunto de datos cargado usando Python es una buena práctica.

Podemos cargar el conjunto de datos usando la función read_csv() Pandas y especificar los «valores na» para cargar los valores de ‘?’ como faltantes, marcados con un valor NaN.

Una vez cargados, podemos revisar los datos cargados para confirmar que los valores de «?» están marcados como NaN.

Podemos entonces enumerar cada columna y reportar el número de filas con los valores faltantes para la columna.

A continuación se presenta un ejemplo completo de la carga y el resumen del conjunto de datos.

Al ejecutar el ejemplo primero se carga el conjunto de datos y se resumen las cinco primeras filas.

Podemos ver que los valores que faltaban y que estaban marcados con un carácter «?» han sido reemplazados por valores de NaN.

A continuación, podemos ver una lista de todas las columnas del conjunto de datos y el número y el porcentaje de los valores que faltan.

Podemos ver que algunas columnas (por ejemplo, los índices de las columnas 1 y 2) no tienen valores perdidos y otras columnas (por ejemplo, los índices de las columnas 15 y 21) tienen muchos o incluso la mayoría de los valores perdidos.

Ahora que estamos familiarizados con el conjunto de datos del cólico de caballo que tiene valores perdidos, veamos cómo podemos usar la imputación del vecino más cercano.

Imputación del vecino más cercano con KNNImputer

La biblioteca de aprendizaje de la máquina de aprendizaje de ciencias proporciona la clase de KNNImputer que apoya la imputación del vecino más cercano.

En esta sección, exploraremos cómo utilizar eficazmente el KNNImputer clase.

Transformación de datos de KNNImputer

KNNImputer es una transformación de datos que se configura primero en base al método utilizado para estimar los valores que faltan.

La medida de distancia por defecto es una medida de distancia euclidiana que es consciente de NaN, por ejemplo, no incluirá los valores de NaN cuando se calcule la distancia entre los miembros del conjunto de datos de entrenamiento. Esto se establece a través de la función «métrico«argumento».

El número de vecinos está establecido en cinco por defecto y puede ser configurado por el «n_vecinos«argumento».

Por último, la medida de la distancia puede ser ponderada de forma proporcional a la distancia entre instancias (filas), aunque esto se establece en una ponderación uniforme por defecto, controlada a través de la función «pesos«argumento».

Recomendado:  Es posible que las obras de arte digitales generadas por IA no estén protegidas por derechos de autor • The Register

Entonces, el imputador se ajusta a un conjunto de datos.

Luego, el imputador de ajuste se aplica a un conjunto de datos para crear una copia del conjunto de datos con todos los valores que faltan para cada columna reemplazados por un valor estimado.

Podemos demostrar su uso en el conjunto de datos del cólico de caballo y confirmar que funciona resumiendo el número total de valores que faltan en el conjunto de datos antes y después de la transformación.

El ejemplo completo figura a continuación.

Al ejecutar el ejemplo primero se carga el conjunto de datos y se reporta el número total de valores faltantes en el conjunto de datos como 1.605.

La transformación está configurada, ajustada y realizada, y el nuevo conjunto de datos resultante no tiene valores perdidos, lo que confirma que se realizó como esperábamos.

Cada valor que faltaba fue reemplazado por un valor estimado por el modelo.

Evaluación del KNNImputer y del modelo

Es una buena práctica evaluar los modelos de aprendizaje de la máquina en un conjunto de datos utilizando la validación cruzada del pliegue k.

Para aplicar correctamente la imputación de datos faltantes del vecino más cercano y evitar la fuga de datos, se requiere que los modelos se calculen para cada columna se calculen en el conjunto de datos de entrenamiento solamente, y luego se apliquen al tren y a los conjuntos de pruebas para cada pliegue del conjunto de datos.

Esto puede lograrse creando una tubería de modelación donde el primer paso es la imputación del vecino más cercano, luego el segundo paso es el modelo. Esto puede lograrse usando la clase de tubería.

Por ejemplo, el Pipeline que se muestra a continuación utiliza un KNNImputer con la estrategia predeterminada, seguida de un modelo de bosque aleatorio.

Podemos evaluar el conjunto de datos imputados y la tubería de modelación forestal aleatoria para el conjunto de datos del cólico de caballo con una validación cruzada repetida 10 veces.

El ejemplo completo figura a continuación.

Al ejecutar el ejemplo correctamente se aplica la imputación de datos a cada pliegue del procedimiento de validación cruzada.

El oleoducto se evalúa utilizando tres repeticiones de validación cruzada de 10 veces e informa de la precisión de la clasificación media en el conjunto de datos de alrededor del 86,2 por ciento, que es una puntuación razonable.

¿Cómo sabemos que usar un número predeterminado de vecinos de cinco es bueno o mejor para este conjunto de datos?

La respuesta es que no.

KNNImputer y un número diferente de vecinos

El hiperparámetro clave para el algoritmo KNN es kque controla el número de vecinos más cercanos que se utilizan para contribuir a una predicción.

Recomendado:  Introducción a la biblioteca de aprendizaje profundo de Python TensorFlow

Es una buena práctica probar un conjunto de valores diferentes para k.

En el ejemplo que figura a continuación se evalúan los conductos modelo y se comparan los valores impares de k del 1 al 21.

Al ejecutar el ejemplo se evalúa cada k en el conjunto de datos del cólico de caballo usando repetidas validaciones cruzadas.

Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje; considere ejecutar el ejemplo unas cuantas veces.

La exactitud de la clasificación media se informa para el oleoducto con cada k valor utilizado para la imputación.

En este caso, podemos ver que valores k más grandes resultan en un modelo de mejor rendimiento, con un k=1 resultando en el mejor rendimiento de alrededor del 86,7 por ciento de precisión.

Al final del recorrido, se crea un gráfico de caja y bigote para cada conjunto de resultados, lo que permite comparar la distribución de los resultados.

La gráfica sugiere que no hay mucha diferencia en el valor de k al imputar los valores que faltan, con pequeñas fluctuaciones alrededor del rendimiento medio (triángulo verde).

Cuadro de Imputación de Caja y Bigote Número de Vecinos para el Conjunto de Datos del Cólico del Caballo

Cuadro de Imputación de Caja y Bigote Número de Vecinos para el Conjunto de Datos del Cólico del Caballo

KNNImputer se transforma cuando hace una predicción

Puede que queramos crear un modelo final de tubería con la imputación del vecino más cercano y un algoritmo de bosque aleatorio, y luego hacer una predicción para los nuevos datos.

Esto puede lograrse definiendo la tubería y ajustándola a todos los datos disponibles, y luego llamando a la predecir() pasando nuevos datos como un argumento.

Es importante que la fila de nuevos datos marque los valores que faltan con el valor NaN.

El ejemplo completo figura a continuación.

La ejecución del ejemplo se ajusta a la tubería de modelación en todos los datos disponibles.

Se define una nueva fila de datos con valores perdidos marcados con NaNs y se hace una predicción de clasificación.