Vamos implementar um classificador supervisionado completo usando o dataset Iris :
- Carregar e explorar os dados
python
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report
Carregar dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = iris.target
print(df.head())
print(df['species'].value_counts())
2. Pré-processamento
python
X = df[iris.feature_names] # Atributos
y = df['species'] # Rótulos
Divisão treino/teste
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
Normalização (essencial para KNN)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
3. Treinar modelo (KNN)
python
modelo = KNeighborsClassifier(n_neighbors=5)
modelo.fit(X_train_scaled, y_train)
4. Avaliar modelo
python
y_pred = modelo.predict(X_test_scaled)
acuracia = accuracy_score(y_test, y_pred)
print(f"Acurácia: {acuracia:.2%}")
print(classification_report(y_test, y_pred, target_names=iris.target_names))
Validação cruzada
cv_scores = cross_val_score(modelo, X, y, cv=5)
print(f"Validação cruzada (5 folds): {cv_scores.mean():.2%}")
5. Testar nova flor
python
def classificar_flor(caracteristicas):
"""caracteristicas: [comp_sépala, larg_sépala, comp_pétala, larg_pétala]"""
nova_flor_scaled = scaler.transform([caracteristicas])
especie_id = modelo.predict(nova_flor_scaled)[0]
return iris.target_names[especie_id]
Exemplo
teste = [5.1, 3.5, 1.4, 0.2]
print(f"Flor {teste} → {classificar_flor(teste)}")
Saída esperada
text
Acurácia: 97.78%
Validação cruzada (5 folds): 96.67%
Flor [5.1, 3.5, 1.4, 0.2] → setosa
Resumo do fluxo
Etapa Ação
1 Carregar dataset Iris
2 Separar atributos (X) e rótulos (y)
3 Dividir em treino (70%) e teste (30%)
4 Normalizar dados (StandardScaler)
5 Treinar KNN com k=5
6 Avaliar com acurácia e validação cruzada