투표 분류기를 이용한 아이리스 꽃 분류

Beginner

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

소개

이 실습에서는 Scikit-Learn 의 VotingClassifier를 사용하여 두 가지 특징에 기반한 아이리스 꽃의 종류를 예측합니다. DecisionTreeClassifier, KNeighborsClassifier, 그리고 SVC 분류기를 개별적으로 예측한 결과를 비교하고, VotingClassifier를 사용하여 예측 결과를 결합하여 더 나은 결과를 얻을 수 있는지 확인합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접속합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

데이터 로드

Scikit-Learn 의 datasets 모듈을 사용하여 아이리스 데이터셋을 로드합니다. 꽃받침 길이와 꽃잎 길이 두 가지 특징만 사용합니다.

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()

결과 해석

DecisionTreeClassifierKNeighborsClassifier의 결정 경계는 비교적 단순한 반면, SVC의 결정 경계는 더 복잡합니다. VotingClassifier의 결정 경계는 SVC의 결정 경계와 유사하지만 일부 영역에서는 복잡성이 덜합니다.

요약

이 실험에서는 Scikit-Learn 의 VotingClassifier를 사용하여 두 가지 특징을 기반으로 아이리스 꽃의 종류를 예측했습니다. DecisionTreeClassifier, KNeighborsClassifier, 그리고 SVC 세 가지 분류기를 학습시켰습니다. 그런 다음 VotingClassifier를 사용하여 이들의 예측 결과를 결합하고 결정 경계를 시각화했습니다. 그 결과 VotingClassifier의 결정 경계는 SVC의 결정 경계와 유사하지만 일부 영역에서는 복잡성이 덜하다는 것을 확인했습니다.