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

[Projeto] Mão na massa: construindo um classificador com o dataset Iris [Especisliats IA]

#============================================================
#Classificador de Flores Iris — Aprendizado Supervisionado
#============================================================

#── ETAPA 1: Carregar e explorar os dados ───────────────────
from sklearn.datasets import load_iris
import pandas as pd

iris = load_iris()

df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['especie'] = pd.Categorical.from_codes(iris.target, iris.target_names)

print("=== Primeiras linhas do dataset ===")
print(df.head(10))

print("\n=== Informações gerais ===")
print(df.info())

print("\n=== Estatísticas descritivas ===")
print(df.describe())

print("\n=== Distribuição das espécies ===")
print(df['especie'].value_counts())


#── ETAPA 2: Pré-processar os dados ─────────────────────────
from sklearn.model_selection import train_test_split

X = iris.data          # atributos (sépalas e pétalas)
y = iris.target        # rótulos (0 = setosa, 1 = versicolor, 2 = virginica)

X_treino, X_teste, y_treino, y_teste = train_test_split(
    X, y,
    test_size=0.2,      # 20% para teste
    random_state=42,    # semente para reprodutibilidade
    stratify=y          # mantém proporção das classes
)

print(f"\nTamanho do conjunto de treino : {X_treino.shape[0]} amostras")
print(f"Tamanho do conjunto de teste  : {X_teste.shape[0]} amostras")


#── ETAPA 3: Treinar o modelo ────────────────────────────────
from sklearn.tree import DecisionTreeClassifier

modelo = DecisionTreeClassifier(
    max_depth=4,        # limita profundidade para evitar overfitting
    random_state=42
)

modelo.fit(X_treino, y_treino)
print("\nModelo treinado com sucesso!")


#── ETAPA 4: Avaliar o desempenho ────────────────────────────
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.model_selection import cross_val_score
import numpy as np

#Previsões no conjunto de teste
y_pred = modelo.predict(X_teste)

#Acurácia simples
acuracia = accuracy_score(y_teste, y_pred)
print(f"\n=== Acurácia no conjunto de teste: {acuracia:.2%} ===")

#Relatório detalhado por classe
print("\n=== Relatório de Classificação ===")
print(classification_report(y_teste, y_pred, target_names=iris.target_names))

#Matriz de confusão
print("=== Matriz de Confusão ===")
cm = confusion_matrix(y_teste, y_pred)
cm_df = pd.DataFrame(cm, index=iris.target_names, columns=iris.target_names)
print(cm_df)

#Validação cruzada (5 folds)
scores = cross_val_score(modelo, X, y, cv=5, scoring='accuracy')
print(f"\n=== Validação Cruzada (5 folds) ===")
print(f"Acurácias por fold : {[f'{s:.2%}' for s in scores]}")
print(f"Média              : {scores.mean():.2%}")
print(f"Desvio padrão      : {scores.std():.2%}")


#── ETAPA 5: Testar com novas amostras ──────────────────────
print("\n=== Teste com novas amostras ===")

#Formato: [comp_sepala, larg_sepala, comp_petala, larg_petala] — em cm
novas_flores = [
    [5.1, 3.5, 1.4, 0.2],   # provavelmente Setosa
    [6.3, 3.3, 4.7, 1.6],   # provavelmente Versicolor
    [7.2, 3.0, 5.8, 1.6],   # provavelmente Virginica
]

previsoes = modelo.predict(novas_flores)
probabilidades = modelo.predict_proba(novas_flores)

for i, (flor, pred, prob) in enumerate(zip(novas_flores, previsoes, probabilidades), 1):
    especie = iris.target_names[pred]
    confianca = prob[pred]
    print(f"\nAmostra {i}: {flor}")
    print(f"  → Espécie prevista : {especie} (confiança: {confianca:.0%})")
    print(f"     Setosa={prob[0]:.0%}  Versicolor={prob[1]:.0%}  Virginica={prob[2]:.0%}")
1 resposta

Oi, Tamy! Tudo bem?

A sua atividade construindo um classificador com o dataset Iris mostra uma prática muito completa de aprendizado supervisionado com Python e Machine Learning.

Você organizou muito bem o fluxo do projeto ao passar por exploração dos dados, pré-processamento, treinamento do modelo, avaliação de desempenho e teste com novas amostras, usando recursos como DecisionTreeClassifier, classification_report, confusion_matrix e cross_val_score. Essa sequência demonstra uma boa habilidade de planejamento, algo muito importante em projetos de Inteligência Artificial, porque ajuda a validar cada etapa antes de avançar.

Dica: ao registrar seus estudos, mantenha esse padrão de dividir o código por etapas e anotar o objetivo de cada uma, pois isso facilita a revisão, a manutenção e a explicação do modelo para outras pessoas.

Qual etapa você achou mais interessante nesse classificador com o dataset Iris: a preparação dos dados, o treinamento ou a avaliação do modelo?

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