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!

0
respostas

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

import pandas as pd
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
iris = load_iris()
df = pd.DataFrame(
iris.data,
columns=iris.feature_names
)
df["species"] = iris.target
df["species"] = df["species"].map({
0: "setosa",
1: "versicolor",
2: "virginica"
})

print("Primeiras linhas do dataset:")
print(df.head())

print("\nInformações gerais:")
print(df.info())

print("\nEstatísticas descritivas:")
print(df.describe())
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.30,
random_state=42,
stratify=y
)

print("\nQuantidade de amostras para treino:", len(X_train))
print("Quantidade de amostras para teste:", len(X_test))
modelo = DecisionTreeClassifier(random_state=42)
modelo.fit(X_train, y_train)

print("\nModelo treinado com sucesso!")
y_pred = modelo.predict(X_test)
acuracia = accuracy_score(y_test, y_pred)

print(f"\nAcurácia do modelo: {acuracia:.2%}")

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

print("\nMatriz de Confusão:")
print(confusion_matrix(y_test, y_pred))
scores = cross_val_score(
modelo,
X,
y,
cv=5
)

print("\nResultados da Validação Cruzada:")
print(scores)

print(f"\nAcurácia Média: {scores.mean():.2%}")
print(f"Desvio Padrão: {scores.std():.4f}")
novas_flores = [
[5.1, 3.5, 1.4, 0.2],
[6.0, 2.9, 4.5, 1.5],
[6.7, 3.0, 5.8, 2.2]
]

previsoes = modelo.predict(novas_flores)

print("\nClassificação de novas flores:")

for i, pred in enumerate(previsoes):
especie = iris.target_names[pred]
print(f"Flor {i+1}: {especie}")

Primeiras linhas do dataset:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2

species
0 setosa
1 setosa
2 setosa
3 setosa
4 setosa

Informações gerais:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):

Column Non-Null Count Dtype


0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
4 species 150 non-null object
dtypes: float64(4), object(1)
memory usage: 6.0+ KB
None

Estatísticas descritivas:
sepal length (cm) sepal width (cm) petal length (cm)
count 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000
std 0.828066 0.435866 1.765298
min 4.300000 2.000000 1.000000
25% 5.100000 2.800000 1.600000
50% 5.800000 3.000000 4.350000
75% 6.400000 3.300000 5.100000
max 7.900000 4.400000 6.900000

   petal width (cm)  

count 150.000000
mean 1.199333
std 0.762238
min 0.100000
25% 0.300000
50% 1.300000
75% 1.800000
max 2.500000

Quantidade de amostras para treino: 105
Quantidade de amostras para teste: 45

Modelo treinado com sucesso!

Acurácia do modelo: 93.33%

Relatório de Classificação:
precision recall f1-score support

  setosa       1.00      1.00      1.00        15

versicolor 1.00 0.80 0.89 15
virginica 0.83 1.00 0.91 15

accuracy                           0.93        45

macro avg 0.94 0.93 0.93 45
weighted avg 0.94 0.93 0.93 45

Matriz de Confusão:
[[15 0 0]
[ 0 12 3]
[ 0 0 15]]

Resultados da Validação Cruzada:
[0.96666667 0.96666667 0.9 0.93333333 1. ]

Acurácia Média: 95.33%
Desvio Padrão: 0.0340

Classificação de novas flores:
Flor 1: setosa
Flor 2: versicolor
Flor 3: virginica