O conjunto de dados Iris (íris) é um clássico em aprendizado de máquina. Ele contém medidas de sépalas e pétalas de três espéciess: setosa, versicolor e virginica. A seguir, exploramos duas abordagens de classificação: árvore de decisão e K‑vizinhos mais próximos (KNN).
Preparação dos dados
Carregamos o conjunto e dividimos em treino e teste. O trecho abaixo exibe as primeiras informações:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
print("Nomes das features:", iris.feature_names)
print("Formato dos dados:", iris.data.shape)
X_treino, X_teste, y_treino, y_teste = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42)
print("Tamanho do treino:", X_treino.shape)
print("Tamanho do teste:", X_teste.shape)
Classificação com Árvore de Decisão
Utilizamos o critério de entropia para construir a árvore. Após o treinamento, avaliamos a acurácia e visualizamos a estrutura:
from sklearn.tree import DecisionTreeClassifier, export_graphviz
def classificar_com_arvore():
iris = load_iris()
X_treino, X_teste, y_treino, y_teste = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42)
modelo = DecisionTreeClassifier(criterion='entropy')
modelo.fit(X_treino, y_treino)
previsoes = modelo.predict(X_teste)
acuracia = modelo.score(X_teste, y_teste)
print("Acurácia da árvore de decisão:", round(acuracia, 4))
# export_graphviz(modelo, out_file='arvore_iris.dot',
# feature_names=iris.feature_names)
# (o arquivo .dot pode ser convertido em imagem com Graphviz)
classificar_com_arvore()
A árvore resultante divide os dados primeiramente pelo comprimenot da pétala (≤ 2.45 cm para identificar setosa) e depois pela largura da pétala. A acurácia obtida fica em torno de 0.9474 (valor pode variar conforme a semente aleatória).
Classificação com K‑Vizinhos Mais Próximos (KNN)
O KNN classifica uma amostra com base na maioria dos seus k vizinhos mais próximos. Aqui usamos k=3 e métrica de distância euclidiana:
from sklearn.neighbors import KNeighborsClassifier
def classificar_com_knn():
iris = load_iris()
X_treino, X_teste, y_treino, y_teste = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_treino, y_treino)
previsoes = knn.predict(X_teste)
acuracia = knn.score(X_teste, y_teste)
print("Acurácia do KNN:", round(acuracia, 4))
classificar_com_knn()
A acurácia típica do KNN no conjutno Iris é superior a 0.97, mostrando-se um método eficaz para este problema linearmente separável.
Comparação
| Algoritmo | Acurácia (exemplo) |
|---|---|
| Árvore de Decisão (entropia) | ≈ 0.9474 |
| KNN (k=3) | ≈ 0.9737 |
Embora a árvore de decisão ofereça interpretabilidade, o KNN costuma obter melhor precisão nesse conjunto.