アイリスデータセット上の SVM 分類器

Beginner

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

はじめに

アイリスデータセットは、分類問題に使用される古典的なデータセットです。この実験では、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 分類器は分類問題に対する強力なツールであり、幅広いデータセットに対して使用できます。