import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# Carregar o dataset Iris
iris = datasets.load_iris()
# Converter para DataFrame
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
# Exibir as primeiras linhas
print("Primeiras linhas do dataset:")
print(df.head())
# Separar atributos (X) e rótulos (y)
X = df.iloc[:, :-1]
y = df['target']
# Dividir os dados em treino e teste
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
# Criar e treinar o modelo KNN
modelo = KNeighborsClassifier(n_neighbors=3)
modelo.fit(X_train, y_train)
# Realizar previsões
y_pred = modelo.predict(X_test)
# Avaliar a acurácia
acuracia = accuracy_score(y_test, y_pred)
print(f"\nAcurácia do modelo: {acuracia:.2f}")
# Validação cruzada
scores = cross_val_score(modelo, X, y, cv=5)
print(f"Acurácia média da validação cruzada: {scores.mean():.2f}")
# Testar uma nova amostra
nova_flor = np.array([[6.0, 3.0, 4.8, 1.8]])
previsao = modelo.predict(nova_flor)
print(
f"Classe prevista para a nova amostra: "
f"{iris.target_names[previsao[0]]}"
)