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] Construindo um dataset

  1. Carregar e Explorar os Dados do Dataset Iris
import pandas as pd
from sklearn.datasets import load_iris

# Carregar o dataset Iris
iris = load_iris()

# Converter os dados para um DataFrame do Pandas
df_iris = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# Adicionar a coluna de rótulos (target) ao DataFrame
df_iris['species'] = iris.target

# Mapear os valores numéricos dos rótulos para nomes das espécies para melhor legibilidade
df_iris['species'] = df_iris['species'].map({0: 'setosa', 1: 'versicolor', 2: 'virginica'})

# Visualizar as primeiras linhas do DataFrame
print("Primeiras 5 linhas do dataset Iris:")
display(df_iris.head())

# Exibir informações gerais sobre o DataFrame
print("\nInformações do DataFrame:")
df_iris.info()

# Exibir estatísticas descritivas
print("\nEstatísticas descritivas do DataFrame:")
display(df_iris.describe())
  1. Pré-processar os Dados
from sklearn.model_selection import train_test_split

# Separar atributos (X) e rótulos (y)
X = df_iris.drop('species', axis=1)
y = df_iris['species']

print("Atributos (X) - Primeiras 5 linhas:")
display(X.head())
print("\nRótulos (y) - Primeiras 5 linhas:")
display(y.head())

# Dividir os dados em conjunto de treino e conjunto de teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

print(f"\nTamanho do conjunto de treino (X_train): {X_train.shape}")
print(f"Tamanho do conjunto de teste (X_test): {X_test.shape}")
print(f"Tamanho dos rótulos de treino (y_train): {y_train.shape}")
print(f"Tamanho dos rótulos de teste (y_test): {y_test.shape}")

print("\nDistribuição das espécies no conjunto de treino:")
display(y_train.value_counts(normalize=True))
print("\nDistribuição das espécies no conjunto de teste:")
display(y_test.value_counts(normalize=True))
  1. Treinar um Modelo de Classificação
from sklearn.tree import DecisionTreeClassifier

# Inicializar o modelo de Árvore de Decisão
# random_state=42 garante que os resultados sejam reproduzíveis
modelo_arvore_decisao = DecisionTreeClassifier(random_state=42)

# Treinar o modelo usando os dados de treino
modelo_arvore_decisao.fit(X_train, y_train)

print("Modelo de Árvore de Decisão treinado com sucesso!")
  1. Avaliar o Desempenho do Modelo
from sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_score

# Fazer previsões utilizando os dados de teste
y_pred = modelo_arvore_decisao.predict(X_test)

# Analisar a acurácia do modelo
acuracia = accuracy_score(y_test, y_pred)
print(f"Acurácia do modelo no conjunto de teste: {acuracia:.2f}")

# Utilizar validação cruzada para avaliação do desempenho
cross_val_scores = cross_val_score(modelo_arvore_decisao, X, y, cv=5)
print(f"\nScores de validação cruzada: {cross_val_scores}")
print(f"Acurácia média da validação cruzada: {cross_val_scores.mean():.2f}")
print(f"Desvio padrão da acurácia da validação cruzada: {cross_val_scores.std():.2f}")
  1. Testar com Novos Exemplos
import numpy as np

# Criar novos exemplos de flores (comprimento_sepala, largura_sepala, comprimento_petala, largura_petala)
# Exemplo 1: Características que sugerem Setosa (valores menores)
novo_exemplo_1 = np.array([[5.1, 3.5, 1.4, 0.2]])

# Exemplo 2: Características que sugerem Versicolor (valores intermediários)
novo_exemplo_2 = np.array([[6.0, 2.7, 4.2, 1.3]])

# Exemplo 3: Características que sugerem Virginica (valores maiores)
novo_exemplo_3 = np.array([[7.0, 3.2, 5.5, 2.3]])

# Exemplo 4: Um exemplo hipotético para testar
novo_exemplo_4 = np.array([[5.5, 2.5, 4.0, 1.0]])

# Fazer previsões para os novos exemplos
predicao_1 = modelo_arvore_decisao.predict(novo_exemplo_1)
predicao_2 = modelo_arvore_decisao.predict(novo_exemplo_2)
predicao_3 = modelo_arvore_decisao.predict(novo_exemplo_3)
predicao_4 = modelo_arvore_decisao.predict(novo_exemplo_4)

print(f"Previsão para o Exemplo 1 (Setosa esperada): {predicao_1[0]}")
print(f"Previsão para o Exemplo 2 (Versicolor esperada): {predicao_2[0]}")
print(f"Previsão para o Exemplo 3 (Virginica esperada): {predicao_3[0]}")
print(f"Previsão para o Exemplo 4 (Hipotético): {predicao_4[0]}")
1 resposta

Ei, Paulo! Tudo bem?

Parabéns pela excelente entrega utilizando o dataset Iris! Seu projeto apresentou uma estrutura organizada e contemplou etapas essenciais do fluxo de ciência de dados, incluindo exploração dos dados com Pandas, separação adequada entre treino e teste com estratificação das classes e treinamento do modelo de Árvore de Decisão.

Destaco também a validação do modelo por meio da acurácia e da validação cruzada, práticas importantes para avaliar a confiabilidade dos resultados e reduzir riscos de sobreajuste. A criação de exemplos inéditos para testes demonstra iniciativa e preocupação com a qualidade da análise.

Outro ponto positivo foi a aplicação das boas práticas na construção do pipeline, tornando o código mais claro, reproduzível e fácil de manter. Essa organização será um diferencial importante à medida que você avançar para projetos mais complexos e trabalhar com bases de dados maiores.

Agora que você já obteve bons resultados, qual outro algoritmo de classificação você gostaria de testar no dataset Iris?

Conteúdos para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!