Classificação de Flores de Íris usando Classificador de Votação

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, utilizaremos o VotingClassifier do Scikit-Learn para prever a classe de flores de íris com base em duas características. Compararemos as previsões dos classificadores DecisionTreeClassifier, KNeighborsClassifier e SVC individualmente e, em seguida, utilizaremos o VotingClassifier para combinar suas previsões e verificar se obtemos melhores resultados.

Dicas da Máquina Virtual

Após o arranque da VM, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Carregar os Dados

Carregaremos o conjunto de dados de íris utilizando o módulo datasets do Scikit-Learn. Utilizaremos apenas duas características: comprimento da sépala e comprimento da pétala.

from sklearn import datasets

iris = datasets.load_iris()
X = iris.data[:, [0, 2]]
y = iris.target

Treinar os Classificadores

Inicializaremos três classificadores: DecisionTreeClassifier, KNeighborsClassifier e SVC. Em seguida, inicializaremos um VotingClassifier com estes três classificadores e o usaremos para prever a classe das flores de íris.

from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

clf1 = DecisionTreeClassifier(max_depth=4)
clf2 = KNeighborsClassifier(n_neighbors=7)
clf3 = SVC(gamma=0.1, kernel="rbf", probability=True)

eclf = VotingClassifier(
    estimators=[("dt", clf1), ("knn", clf2), ("svc", clf3)],
    voting="soft",
    weights=[2, 1, 2],
)

clf1.fit(X, y)
clf2.fit(X, y)
clf3.fit(X, y)
eclf.fit(X, y)

Plotar as Fronteiras de Decisão

Plotaremos as fronteiras de decisão para cada classificador e o VotingClassifier.

import matplotlib.pyplot as plt
from itertools import product
from sklearn.inspection import DecisionBoundaryDisplay

f, axarr = plt.subplots(2, 2, sharex="col", sharey="row", figsize=(10, 8))

for idx, clf, tt in zip(
    product([0, 1], [0, 1]),
    [clf1, clf2, clf3, eclf],
    ["Decision Tree (depth=4)", "KNN (k=7)", "Kernel SVM", "Soft Voting"],
):
    DecisionBoundaryDisplay.from_estimator(
        clf, X, alpha=0.4, ax=axarr[idx[0], idx[1]], response_method="predict"
    )
    axarr[idx[0], idx[1]].scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor="k")
    axarr[idx[0], idx[1]].set_title(tt)

plt.show()

Interpretar os Resultados

Podemos observar que as fronteiras de decisão para o DecisionTreeClassifier e o KNeighborsClassifier são relativamente simples, enquanto a fronteira de decisão do SVC é mais complexa. A fronteira de decisão do VotingClassifier é semelhante à do SVC, mas com menos complexidade em algumas áreas.

Resumo

Neste laboratório, utilizamos o VotingClassifier do Scikit-Learn para prever a classe de flores de íris com base em duas características. Treinámos três classificadores: DecisionTreeClassifier, KNeighborsClassifier e SVC. Em seguida, usamos o VotingClassifier para combinar as suas previsões e plotamos as fronteiras de decisão. Observámos que a fronteira de decisão do VotingClassifier era semelhante à do SVC, mas com menos complexidade em algumas áreas.