Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Mão na massa: construindo um classificador com o dataset Iris

# Classificador do dataset Iris com aprendizado supervisionado (KNN)

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report

# 1 - Carregar e explorar os dados
iris = datasets.load_iris()

df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['especie'] = [iris.target_names[i] for i in iris.target]

print("Primeiras linhas do dataset:")
print(df.head())
print("\nInformações gerais:")
print(df.describe())

# 2 - Pré-processar os dados
X = df[iris.feature_names]           # atributos (medidas das flores)
y = iris.target                      # rótulos (0, 1 ou 2)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# 3 - Treinar o modelo (K-Nearest Neighbors)
modelo = KNeighborsClassifier(n_neighbors=5)
modelo.fit(X_train, y_train)

# 4 - Avaliar o desempenho do modelo
y_pred = modelo.predict(X_test)

acuracia = accuracy_score(y_test, y_pred)
print(f"\nAcurácia no conjunto de teste: {acuracia:.2f}")

print("\nRelatório de classificação:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# Validação cruzada (5 folds)
scores_cv = cross_val_score(modelo, X, y, cv=5)
print(f"Acurácia média na validação cruzada: {scores_cv.mean():.2f}")
print(f"Desvio padrão: {scores_cv.std():.2f}")

# 5 - Testar com novos exemplos
novas_amostras = np.array([
    [5.1, 3.5, 1.4, 0.2],  # provável Setosa
    [6.0, 2.7, 4.1, 1.0],  # provável Versicolor
    [6.9, 3.1, 5.4, 2.1],  # provável Virginica
])

predicoes = modelo.predict(novas_amostras)

for amostra, classe in zip(novas_amostras, predicoes):
    print(f"Amostra {amostra} -> Classe prevista: {iris.target_names[classe]}")
1 resposta

Oi, Everton. Tudo bem com você?

Obrigado por compartilhar sua solução para a atividade de construção de um classificador com o dataset Iris. Seu código atende aos requisitos propostos no exercício e contempla todas as etapas do fluxo de aprendizado supervisionado. Você realizou o carregamento dos dados, criou um DataFrame para exploração inicial, separou corretamente os atributos e os rótulos, dividiu os dados em conjuntos de treino e teste, treinou um modelo KNN e avaliou seu desempenho utilizando tanto a acurácia quanto a validação cruzada. Além disso, a inclusão do classification_report agrega uma análise mais completa do desempenho do modelo por classe, enriquecendo a solução.

Um ponto interessante é o teste com novas amostras após o treinamento. Esse tipo de validação aproxima o exercício de um cenário real, no qual um modelo treinado é utilizado para classificar dados inéditos. Como exemplo, você poderia experimentar alterar o valor de n_neighbors para 3 ou 7 e comparar os resultados obtidos na acurácia e na validação cruzada, observando como a escolha desse parâmetro influencia o comportamento do classificador.

Na sua opinião, quais diferenças você espera observar ao testar outros algoritmos supervisionados, como uma Árvore de Decisão, utilizando o mesmo conjunto de dados?

Parabéns pela dedicação e por compartilhar uma solução tão completa. Continue praticando e conte com o fórum sempre que quiser discutir novas abordagens ou esclarecer dúvidas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!