- 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())
- 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))
- 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!")
- 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}")
- 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]}")