Classificação do Conjunto de Dados Iris com Árvore de Decisão e KNN

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.

Tags: iris scikit-learn arvore-de-decisao knn classificação

Publicado em 6-8 21:19 por Thomas