ボーティング分類器を用いたアヤメの花の分類

Beginner

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

はじめに

この実験では、Scikit-Learn のVotingClassifierを使って、2 つの特徴量に基づいてアヤメの花のクラスを予測します。DecisionTreeClassifierKNeighborsClassifier、およびSVC分類器の予測結果を個別に比較し、その後VotingClassifierを使ってそれらの予測結果を組み合わせ、より良い結果が得られるかどうかを確認します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習します。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

データの読み込み

Scikit-Learn のdatasetsモジュールを使ってアヤメのデータセットを読み込みます。2 つの特徴量のみを使用します:がく片の長さと花弁の長さ。

from sklearn import datasets

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

分類器の学習

3 つの分類器を初期化します:DecisionTreeClassifierKNeighborsClassifier、およびSVC。その後、これら 3 つの分類器を使って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を使って、2 つの特徴量に基づいてアヤメの花のクラスを予測しました。3 つの分類器を学習しました:DecisionTreeClassifierKNeighborsClassifier、およびSVC。その後、VotingClassifierを使ってそれらの予測を組み合わせ、決定境界を描画しました。VotingClassifierの決定境界はSVCの決定境界に似ていることがわかりましたが、一部の領域では複雑さが少ないです。