Codificar objetivo categórico usando LabelEncoder de sklearn.preprocessing
En este paso, preprocesaremos nuestra variable objetivo y. El objetivo del conjunto de datos Iris es categórico, representado por los números 0, 1 y 2, que corresponden a las tres especies diferentes de flores Iris. Aunque ya son numéricos, es una buena práctica comprender cómo codificar etiquetas categóricas, especialmente si estuvieran en formato de cadena (por ejemplo, 'setosa', 'versicolor').
LabelEncoder explicado:
- Propósito: Convierte etiquetas categóricas (cadenas o tipos mixtos) en enteros
- Cómo funciona: Asigna un entero único a cada categoría única
- Ejemplo: ['cat', 'dog', 'cat'] → [0, 1, 0]
¿Por qué usar LabelEncoder?
- Muchos algoritmos de ML requieren entradas numéricas
- Almacenamiento y computación eficientes
- Mantiene la naturaleza categórica de los datos
Métodos clave:
fit(y): Aprende el mapeo de categorías a enteros
transform(y): Aplica el mapeo aprendido
fit_transform(y): Combina ambos pasos en una sola llamada
inverse_transform(y_encoded): Convierte enteros de nuevo a categorías originales
Notas importantes:
- El orden es arbitrario (basado en la primera aparición o en la ordenación)
- No es adecuado para datos ordinales donde el orden importa (use OrdinalEncoder en su lugar)
- Para características (no objetivos), considere OneHotEncoder para datos nominales
Agrega el siguiente código a tu archivo preprocess.py debajo del comentario ## --- Step 5: Encode the target ---. Crearemos una instancia de LabelEncoder y usaremos el método fit_transform(), que combina el ajuste y la transformación en un solo paso.
## --- Step 5: Encode the target ---
encoder = LabelEncoder()
y_encoded = encoder.fit_transform(y)
print("\nOriginal target sample:", y[:5]) ## Show first 5 original labels
print("Encoded target sample:", y_encoded[:5]) ## Show first 5 encoded labels
print("Unique encoded values:", np.unique(y_encoded)) ## Show all unique encoded values
Guarda el archivo y ejecútalo por última vez.
python3 preprocess.py
La salida mostrará que la variable objetivo ha sido codificada. Dado que ya estaba en el formato entero correcto, el resultado es el mismo, pero esto demuestra el proceso que usaría para etiquetas basadas en cadenas.
Shape of features (X): (150, 4)
Shape of target (y): (150,)
Scaler object created: StandardScaler()
Scaler mean: [5.84333333 3.05733333 3.758 1.19933333]
Original data mean: [5.84 3.06 3.76 1.2 ]
Scaled data mean: [-0. -0. -0. -0.]
Scaled data sample:
[[-0.9 1.02 -1.34 -1.32]
[-1.14 -0.13 -1.34 -1.32]
[-1.39 0.33 -1.4 -1.32]
[-1.51 0.1 -1.28 -1.32]
[-1.02 1.25 -1.34 -1.32]]
Original target sample: [0 0 0 0 0]
Encoded target sample: [0 0 0 0 0]
Unique encoded values: [0 1 2]