Классификация ирисных цветов с использованием Voting Classifier

Beginner

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

Введение

В этом лабораторном занятии мы будем использовать VotingClassifier из Scikit-Learn для предсказания класса ирисных цветов на основе двух признаков. Мы сравним предсказания классификаторов DecisionTreeClassifier, KNeighborsClassifier и SVC по отдельности, а затем используем VotingClassifier для комбинирования их предсказаний и посмотрим, получим ли мы лучшие результаты.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Загрузка данных

Мы будем загружать датасет ирисов с использованием модуля datasets из Scikit-Learn. Мы будем использовать только два признака: длину чашелистика и длину лепестка.

from sklearn import datasets

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

Обучение классификаторов

Мы инициализируем три классификатора: DecisionTreeClassifier, KNeighborsClassifier и SVC. Затем мы инициализируем VotingClassifier с этими тремя классификаторами и используем его для предсказания класса ирисных цветов.

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)

Построение границ решения

Мы построим границы решения для каждого классификатора и для 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()

Интерпретация результатов

Мы можем увидеть, что границы решения для DecisionTreeClassifier и KNeighborsClassifier относительно простые, в то время как граница решения SVC более сложная. Граница решения VotingClassifier похожа на границу решения SVC, но имеет меньшую сложность в некоторых областях.

Резюме

В этом практическом занятии мы использовали VotingClassifier из Scikit-Learn для предсказания класса ирисных цветов на основе двух признаков. Мы обучили три классификатора: DecisionTreeClassifier, KNeighborsClassifier и SVC. Затем мы использовали VotingClassifier для комбинирования их предсказаний и построили границы решения. Мы увидели, что граница решения VotingClassifier была похожа на границу решения SVC, но имела меньшую сложность в некоторых областях.