Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python intermedio para IA, Unidad 10 — Preparación para Machine Learning, 10.2 — Preprocesamiento en Python puro ·

Codificación básica

Codificación básica para preprocesamiento de datos en Python puro

Introducción

En la preparación de los datos para machine learning (ML), una etapa crucial es el preprocesamiento. Este proceso implica transformar y limpiar los datos brutos antes de aplicar modelos ML. El preprocesamiento puede implicar cualquier cosa, desde manejar valores faltantes hasta codificar variables categóricas. En este artículo, exploraremos la codificación básica de variables categóricas en Python puro.

Explicación principal con ejemplos

La codificación de variables categóricas es un paso fundamental para que los modelos ML puedan trabajar con datos no numéricos. Hay varios métodos comunes para codificar variables categóricas, incluyendo one-hot encoding, dummy variable encoding y label encoding.

Ejemplo: One-Hot Encoding

One-hot encoding convierte cada categoría en una nueva columna binaria (0 o 1), donde solo una de las columnas tiene un valor 1 para cada observación. Este método evita el problema del "dummy variable trap" y es especialmente útil cuando los datos categóricos no tienen orden.

import pandas as pd

# Crear un DataFrame de ejemplo con una columna categórica
df = pd.DataFrame({'color': ['rojo', 'azul', 'verde']})

# Codificar usando one-hot encoding en Python puro
def one_hot_encoding(df, column_name):
    unique_values = df[column_name].unique()
    for value in unique_values:
        df[value] = (df[column_name] == value).astype(int)
    del df[column_name]
    return df

one_hot_encoded_df = one_hot_encoding(df, 'color')
print(one_hot_encoded_df)

Ejemplo: Label Encoding

Label encoding asigna un valor numérico a cada categoría. Es útil cuando las relaciones entre las categorías tienen algún orden o ponderación. Sin embargo, debe usarse con precaución para evitar el "dummy variable trap".

def label_encoding(df, column_name):
    unique_values = df[column_name].unique()
    value_mapping = {value: idx for idx, value in enumerate(unique_values)}
    df[column_name] = df[column_name].map(value_mapping)
    return df

label_encoded_df = label_encoding(df, 'color')
print(label_encoded_df)

Errores típicos / trampas

Trampa 1: Olvidar la codificación inversa

Es común codificar los datos para entrenar un modelo y luego olvidarse de decodificarlos al hacer predicciones o interpretaciones. Si no se recupera la codificación, podrás perder información valiosa.

# Ejemplo de error en el proceso de codificación inversa
encoded_df = label_encoding(df, 'color')
decoded_df = encoded_df.copy()
decoded_df['color'] = decoded_df.apply(lambda row: list(unique_values)[row['color']], axis=1)

Trampa 2: Ignorar la consistencia en la codificación

Si no se mantiene consistente el mapeo de valores numéricos a categorías, podrás obtener resultados erróneos o inconsistentes. Es importante documentar y mantener un registro del mapeo usado.

# Ejemplo de inconsistencia en la codificación
mapping1 = {'rojo': 0, 'azul': 1, 'verde': 2}
mapping2 = {'rojo': 0, 'azul': 2, 'verde': 1}

df_encoded_1 = label_encoding(df, 'color', mapping1)
df_encoded_2 = label_encoding(df, 'color', mapping2)

Trampa 3: No manejar los valores no vistos

Durante el preprocesamiento de datos en producción, es común que se encuentren valores que no estaban presentes durante la fase de entrenamiento. Es importante diseñar un sistema para manejar estos casos de manera adecuada.

# Ejemplo de error al manejar valores no vistos
new_row = pd.DataFrame({'color': ['naranja']})
df_encoded = label_encoding(df, 'color')
try:
    new_row['color'] = df_encoded['color'].map({**{value: idx for idx, value in enumerate(unique_values)}, **{'naranja': -1}})
except KeyError as e:
    print(f"Error: {e}. Manejar valor no vistado.")

Checklist accionable

  • Codifica consistentemente: Utiliza el mismo mapeo de valores numéricos a categorías en todo tu proceso.
  • Mantén un registro de codificación: Documenta cómo se han transformado las variables categóricas y cómo se decodificarán para interpretaciones o predicciones.
  • Maneja los valores no vistos: Define una estrategia para manejar nuevos valores que puedan surgir durante el procesamiento de datos en producción.
  • Valida la codificación inversa: Revisa constantemente si la codificación inversa se realiza correctamente y documenta cualquier cambio.
  • Utiliza librerías especializadas: Considera usar bibliotecas como pandas o scikit-learn para simplificar y asegurar el preprocesamiento.

Siguientes pasos

  • Explora más técnicas de codificación: Aprende sobre otras formas de codificación, como ordinal encoding.
  • Implementa en proyectos reales: Aplica las técnicas aprendidas a un proyecto real para mejorar tu entendimiento y habilidades prácticas.
  • Asegúrate del rendimiento: Evalúa el impacto que tiene la codificación en el rendimiento del modelo ML.

Siguiendo estos pasos, podrás preparar tus datos de manera efectiva y asegurar que estén listos para ser utilizados en modelos de machine learning.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).