はじめに
この実験では、Scikit-Learn のVotingClassifierを使って、2 つの特徴量に基づいてアヤメの花のクラスを予測します。DecisionTreeClassifier、KNeighborsClassifier、および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 つの分類器を初期化します:DecisionTreeClassifier、KNeighborsClassifier、および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()
結果の解釈
DecisionTreeClassifierとKNeighborsClassifierの決定境界は比較的単純であるのに対し、SVCの決定境界はより複雑であることがわかります。VotingClassifierの決定境界はSVCの決定境界に似ていますが、一部の領域では複雑さが少ないです。
まとめ
この実験では、Scikit-Learn のVotingClassifierを使って、2 つの特徴量に基づいてアヤメの花のクラスを予測しました。3 つの分類器を学習しました:DecisionTreeClassifier、KNeighborsClassifier、およびSVC。その後、VotingClassifierを使ってそれらの予測を組み合わせ、決定境界を描画しました。VotingClassifierの決定境界はSVCの決定境界に似ていることがわかりましたが、一部の領域では複雑さが少ないです。