Solucionado (ver solução)

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!

Solucionado
(ver solução)
1
resposta

[Projeto] Mão na massa: construindo um classificador com o dataset Iris | Fundamentos de IA: investigando algoritmos e abordagens de machine learning

1. CARREGAR E EXPLORAR OS DADOS

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import pandas as pd
import numpy as np

Carregar dataset Iris

iris = load_iris()
X = iris.data
y = iris.target

Converter para DataFrame e visualizar

df = pd.DataFrame(X, columns=iris.feature_names)
df['especie'] = iris.target_names[y]
print("Primeiras linhas do dataset:")
print(df.head())
print(f"\nForma dos dados: {X.shape}")
print(f"Classes: {iris.target_names}")

2. PRÉ-PROCESSAR OS DADOS

Separar características e rótulos

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

print(f"\nDados de treino: {X_train.shape}")
print(f"Dados de teste: {X_test.shape}")

3. TREINAR O MODELO

modelo = DecisionTreeClassifier(random_state=42)
modelo.fit(X_train, y_train)
print("\nModelo treinado com sucesso!")

4. AVALIAR O DESEMPENHO

Previsões

y_pred = modelo.predict(X_test)

Acurácia

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

Validação cruzada

scores = cross_val_score(modelo, X, y, cv=5)
print(f"Validação cruzada (5-fold): {scores.mean():.2%} (+/- {scores.std():.2%})")

Relatório de classificação

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

Matriz de confusão

print("\nMatriz de Confusão:")
print(confusion_matrix(y_test, y_pred))

5. TESTAR COM NOVOS EXEMPLOS

novos_exemplos = np.array([
[5.0, 3.5, 1.3, 0.3], # Provavelmente Setosa
[6.5, 3.0, 5.8, 2.2] # Provavelmente Virginica
])

predicoes = modelo.predict(novos_exemplos)
print("\nPredicoes para novos exemplos:")
for i, pred in enumerate(predicoes):
print(f"Amostra {i+1}: {iris.target_names[pred]}")

:::

Classificador Iris com Python

# 1. CARREGAR E EXPLORAR OS DADOS
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import pandas as pd
import numpy as np

# Carregar dataset Iris
iris = load_iris()
X = iris.data
y = iris.target

# Converter para DataFrame e visualizar
df = pd.DataFrame(X, columns=iris.feature_names)
df['especie'] = iris.target_names[y]
print("Primeiras linhas do dataset:")
print(df.head())
print(f"\nForma dos dados: {X.shape}")
print(f"Classes: {iris.target_names}")

# 2. PRÉ-PROCESSAR OS DADOS
# Separar características e rótulos
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

print(f"\nDados de treino: {X_train.shape}")
print(f"Dados de teste: {X_test.shape}")

# 3. TREINAR O MODELO
modelo = DecisionTreeClassifier(random_state=42)
modelo.fit(X_train, y_train)
print("\nModelo treinado com sucesso!")

# 4. AVALIAR O DESEMPENHO
# Previsões
y_pred = modelo.predict(X_test)

# Acurácia
acuracia = accuracy_score(y_test, y_pred)
print(f"\nAcurácia: {acuracia:.2%}")

# Validação cruzada
scores = cross_val_score(modelo, X, y, cv=5)
print(f"Validação cruzada (5-fold): {scores.mean():.2%} (+/- {scores.std():.2%})")

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

# Matriz de confusão
print("\nMatriz de Confusão:")
print(confusion_matrix(y_test, y_pred))

# 5. TESTAR COM NOVOS EXEMPLOS
novos_exemplos = np.array([
    [5.0, 3.5, 1.3, 0.3],  # Provavelmente Setosa
    [6.5, 3.0, 5.8, 2.2]   # Provavelmente Virginica
])

predicoes = modelo.predict(novos_exemplos)
print("\nPredicoes para novos exemplos:")
for i, pred in enumerate(predicoes):
    print(f"Amostra {i+1}: {iris.target_names[pred]}")

Explicação do Código

Etapa 1 - Exploração: O código carrega o dataset Iris contendo 150 amostras de 4 características (comprimento/largura de sépala e pétala) de 3 espécies de flores.

Etapa 2 - Pré-processamento: Divide os dados em 80% para treino e 20% para teste, mantendo a aleatoriedade controlada com random_state=42.

Etapa 3 - Treinamento: Utiliza Árvore de Decisão, algoritmo simples e interpretável que aprende padrões nos dados de treino.

Etapa 4 - Avaliação: Calcula acurácia nos dados de teste e aplica validação cruzada 5-fold para validação mais robusta, além de fornecer métricas detalhadas por classe.

Etapa 5 - Testes: Realiza previsões em exemplos novos, demonstrando a capacidade do modelo generalizar para dados não vistos.

1 resposta
solução!

Olá, Estudante! Como vai?

Parabéns pela realização das atividades!

Você apresentou um trabalho muito completo, com clareza na exploração do dataset Iris, organização no processo de treinamento e precisão na avaliação com métricas como acurácia e validação cruzada. Essa sequência mostra domínio dos fundamentos de machine learning e capacidade de aplicar boas práticas de análise de dados.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Visualização: gerar gráficos da árvore de decisão para interpretar melhor os critérios de divisão.
  • Comparação: testar outros algoritmos como Random Forest ou SVM para avaliar ganhos de desempenho.
  • Normalização: aplicar técnicas de pré-processamento (como StandardScaler) para melhorar a generalização em modelos mais sensíveis.

Ah uma pergunta: O que você considera mais interessante para evoluir nesse projeto, explorar diferentes algoritmos de classificação ou aprofundar na interpretação dos resultados da árvore de decisão?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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