Codificar o alvo categórico usando LabelEncoder de sklearn.preprocessing
Nesta etapa, pré-processaremos nossa variável alvo y. O alvo do conjunto de dados Iris é categórico, representado pelos números 0, 1 e 2, que correspondem às três espécies diferentes de flores de Iris. Embora já sejam numéricos, é uma boa prática entender como codificar rótulos categóricos, especialmente se estivessem em formato de string (por exemplo, 'setosa', 'versicolor').
LabelEncoder explicado:
- Propósito: Converte rótulos categóricos (strings ou tipos mistos) em inteiros
- Como funciona: Atribui um inteiro único a cada categoria única
- Exemplo: ['cat', 'dog', 'cat'] → [0, 1, 0]
Por que usar LabelEncoder?
- Muitos algoritmos de ML exigem entradas numéricas
- Armazenamento e computação eficientes
- Mantém a natureza categórica dos dados
Métodos chave:
fit(y): Aprende o mapeamento de categorias para inteiros
transform(y): Aplica o mapeamento aprendido
fit_transform(y): Combina ambas as etapas em uma única chamada
inverse_transform(y_encoded): Converte inteiros de volta para as categorias originais
Notas importantes:
- A ordem é arbitrária (baseada na primeira aparição ou ordenação)
- Não é adequado para dados ordinais onde a ordem importa (use OrdinalEncoder em vez disso)
- Para features (não alvos), considere OneHotEncoder para dados nominais
Adicione o seguinte código ao seu arquivo preprocess.py sob o comentário ## --- Step 5: Encode the target ---. Criaremos uma instância de LabelEncoder e usaremos o método fit_transform(), que combina o ajuste e a transformação em uma única etapa.
## --- Step 5: Encode the target ---
encoder = LabelEncoder()
y_encoded = encoder.fit_transform(y)
print("\nOriginal target sample:", y[:5]) ## Mostra os primeiros 5 rótulos originais
print("Encoded target sample:", y_encoded[:5]) ## Mostra os primeiros 5 rótulos codificados
print("Unique encoded values:", np.unique(y_encoded)) ## Mostra todos os valores codificados únicos
Salve o arquivo e execute-o pela última vez.
python3 preprocess.py
A saída mostrará que a variável alvo foi codificada. Como ela já estava no formato inteiro correto, o resultado é o mesmo, mas isso demonstra o processo que você usaria para rótulos baseados em strings.
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]