はじめに
アイリスデータセットは、分類問題に使用される古典的なデータセットです。この実験では、Python の scikit - learn を使ってアイリスデータセットにおけるさまざまな SVM 分類器をプロットする方法を学びます。アイリスデータセットの 2 次元投影上でさまざまな線形 SVM 分類器を比較します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に直面した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートしてデータセットを読み込む
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.inspection import DecisionBoundaryDisplay
## import some data to play with
iris = datasets.load_iris()
## Take the first two features. We could avoid this by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target
SVM 分類器を作成してデータに適合させる
C = 1.0 ## SVM 正則化パラメータ
models = (
svm.SVC(kernel="linear", C=C),
svm.LinearSVC(C=C, max_iter=10000, dual="auto"),
svm.SVC(kernel="rbf", gamma=0.7, C=C),
svm.SVC(kernel="poly", degree=3, gamma="auto", C=C),
)
models = (clf.fit(X, y) for clf in models)
分類器の決定領域を描画する
## 描画用の 2x2 グリッドを設定する。
fig, sub = plt.subplots(2, 2)
plt.subplots_adjust(wspace=0.4, hspace=0.4)
X0, X1 = X[:, 0], X[:, 1]
## 各分類器に対して DecisionBoundaryDisplay を作成する
for clf, title, ax in zip(models, titles, sub.flatten()):
disp = DecisionBoundaryDisplay.from_estimator(
clf,
X,
response_method="predict",
cmap=plt.cm.coolwarm,
alpha=0.8,
ax=ax,
xlabel=iris.feature_names[0],
ylabel=iris.feature_names[1],
)
## データポイントを描画する
ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors="k")
ax.set_xticks(())
ax.set_yticks(())
ax.set_title(title)
plt.show()
結果を解釈する
上記のコードは、4 つのサブプロット付きのプロットを生成します。各サブプロットは、異なる SVM 分類器の決定領域を示しています。各サブプロットのタイトルは、その分類器で使用される SVM カーネルの種類を示しています。データポイントは、そのターゲットクラスに基づいて色分けされています。
まとめ
この実験では、Python の scikit - learn を使ってアイリスデータセットにおける異なる SVM 分類器を描画する方法を学びました。アイリスデータセットの 2 次元投影上で異なる線形 SVM 分類器を比較し、結果を解釈しました。SVM 分類器は分類問題に対する強力なツールであり、幅広いデータセットに対して使用できます。