Representación: Limpieza de datos

Los manzanos producen una mezcla de frutas excelentes y gusanos. Sin embargo, las manzanas que se muestran en los supermercados refinados son frutas 100% perfectas. Entre el huerto y el supermercado, alguien pasa mucho tiempo quitando las manzanas en mal estado o lanzando un poco de cera sobre las que se pueden recuperar. Como ingeniero de AA, dedicarás una gran cantidad de tu tiempo a desechar ejemplos malos y limpiar los que se pueden recuperar. Incluso unas pocas "manzanas en mal estado" pueden arruinar un gran conjunto de datos.

Ajusta valores de atributos

Escalamiento significa convertir los valores de atributos de punto flotante de su rango natural (por ejemplo, 100 a 900) al rango estándar (por ejemplo, 0 a 1 o -1 a +1). Si un conjunto de atributos consiste en una sola función, el escalamiento proporciona poco o ningún beneficio práctico. Sin embargo, si un conjunto de atributos consta de varios atributos, el escalamiento de atributos proporciona los siguientes beneficios:

  • Ayuda a que el descenso de gradientes converja más rápidamente.
  • Ayuda a evitar la "trampa de NaN", en la que un número del modelo se convierte en un NaN (p.ej., cuando un valor excede el límite de precisión de punto flotante durante el entrenamiento) y, debido a operaciones matemáticas, el resto de los números del modelo finalmente se convierte en NaN.
  • Permite que el modelo aprenda las ponderaciones correspondientes para cada atributo. Sin el ajuste de atributos, el modelo les prestará demasiada atención a los atributos que tienen un rango más amplio.

No es necesario que asignes el mismo ajuste de escala a cada atributo de punto flotante. No sucederá nada terrible si el Atributo A se escala de -1 a +1, mientras que el Atributo B se ajusta de -3 a +3. Sin embargo, tu modelo reaccionará mal si el Atributo B se escala de 5,000 a 100,000.

Manejo de valores atípicos extremos

El siguiente gráfico representa un atributo llamado roomsPerPerson del conjunto de datos Viviendas de California. El valor de roomsPerPerson se dividió dividiendo la cantidad total de habitaciones en un área por la población en esa área. El gráfico muestra que la gran mayoría de áreas en California tiene una o dos habitaciones por persona. Pero veamos el eje X.

Un gráfico de la función RoomPerPerson en el que casi todos los valores están agrupados entre 0 y 4, pero hay una cola muy larga que se extiende hasta 55 habitaciones por persona

Figura 4: Una cola muy larga.

¿Cómo podríamos minimizar la influencia de esos valores atípicos extremos? Una forma sería obtener el logaritmo de cada valor:

Un gráfico de log(roomsPerPerson) en el que el 99% de los valores se agrupan entre 0.4 y 1.8, pero todavía hay una cola larga que se extiende aproximadamente hasta 4.2.

Figura 5: El escalamiento logarítmico todavía tiene cola.

El escalamiento logarítmico funciona un poco mejor, pero todavía hay una cola significativa de valores atípicos. Apliquemos otro enfoque. ¿Qué pasa si "limitamos" o "recortamos" el valor máximo de roomsPerPerson en un valor arbitrario, por ejemplo, 4.0?

Un gráfico de ambientesPorPersona en el que todos los valores se encuentran entre -0.3 y 4.0. El diagrama tiene forma de campana, pero hay una colina anómala en el valor 4.0

Figura 6: Recorte de valores de atributos en 4.0

El recorte del valor del atributo en 4.0 no significa que ignoremos todos los valores superiores a 4.0. En cambio, significa que todos los valores que eran superiores a 4.0 ahora se convierten en 4.0. Esto explica la elevación extraña en 4.0. A pesar de esa elevación, el conjunto de atributos ajustado ahora es más útil que los datos originales.

Discretización

En el siguiente gráfico, se muestra la prevalencia relativa de las casas en diferentes latitudes de California. Observa el agrupamiento en clústeres: Los Ángeles se encuentra en la latitud 34 y San Francisco se encuentra en la latitud 38.

Un gráfico de casas por latitud. El diagrama es muy irregular, contiene pozos cerca de la latitud 36 y picos enormes alrededor de las latitudes 34 y 38.

Figura 7: Casas por latitud.

En el conjunto de datos, latitude es un valor de punto flotante. Sin embargo, no tiene sentido representar latitude como un atributo de punto flotante en nuestro modelo. Eso se debe a que no existe una relación lineal entre la latitud y los valores de las viviendas. Por ejemplo, las casas en la latitud 35 no son \(\frac{35}{34}\) más costosas (o menos costosas) que las casas en la latitud 34. Sin embargo, las latitudes individuales probablemente son un muy buen predictor de los valores de casas.

Para que la latitud sea un predictor útil, debemos dividir las latitudes en discretizaciones, como se sugiere en la siguiente figura:

Un gráfico de casas por latitud. El diagrama se divide en

Figura 8: Valores de discretización.

En lugar de tener un atributo de punto flotante, ahora tenemos 11 atributos booleanos distintos (LatitudeBin1, LatitudeBin2, ..., LatitudeBin11). Tener 11 atributos independientes es algo poco elegante, por lo que hay que unirlos en un solo vector de 11 elementos. Esto nos permitirá representar la latitud 37.4 de la siguiente manera:

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

Gracias a la discretización, nuestro modelo ahora puede aprender pesos completamente diferentes para cada latitud.

Mantenimiento

Hasta ahora, suponemos que todos los datos que se usaron para el entrenamiento y las pruebas eran confiables. En la vida real, muchos ejemplos de los conjuntos de datos no son confiables debido a uno o más de los siguientes motivos:

  • Valores omitidos. Por ejemplo, una persona olvidó ingresar un valor para la antigüedad de una casa.
  • Ejemplos duplicados. Por ejemplo, un servidor subió por error los mismos registros dos veces.
  • Etiquetas incorrectas. Por ejemplo, una persona etiquetó incorrectamente una imagen de un roble como un arce.
  • Valores de atributos incorrectos. Por ejemplo, alguien escribió un dígito de más o un termómetro quedó al sol.

Una vez detectados, por lo general, para "corregir" ejemplos incorrectos quitándolos del conjunto de datos. Para detectar valores omitidos o ejemplos duplicados, puedes escribir un programa simple. Detectar valores de atributos o etiquetas incorrectos puede ser mucho más complicado.

Además de detectar ejemplos incorrectos individuales, también debes detectar datos incorrectos en el agregado. Los histogramas son un gran mecanismo para visualizar tus datos en el total. Además, obtener estadísticas como las siguientes puede ser de ayuda:

  • Máximo y mínimo
  • Media y mediana
  • Desviación estándar

Considera generar listas de los valores más comunes para atributos discretos. Por ejemplo, la cantidad de ejemplos con country:uk debe coincidir con la cantidad esperada. ¿language:jp debería ser el idioma más común en tu conjunto de datos?

Conozca sus datos

Sigue estas reglas:

  • Ten en cuenta cómo crees que deberían verse los datos.
  • Verifica que los datos cumplan estas expectativas (o que puedas explicar por qué no).
  • Vuelve a verificar que los datos de entrenamiento concuerden con otras fuentes (por ejemplo, paneles).

Trata tus datos con el mismo cuidado que con cualquier código de servicio crítico. Un buen AA depende de datos correctos.

Información adicional

Reglas de aprendizaje automático, AA, fase II: Ingeniería de atributos