はじめに
このチュートリアルでは、分類に異なる SVM カーネルを使用するプロセスを説明します。Iris データセットを使用します。このデータセットには、花の測定値が含まれています。このデータセットには 3 つのクラスがありますが、2 値分類には 2 つのクラスのみを使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使用して練習します。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
データの読み込み
Iris データセットを読み込み、可視化の目的で最初の 2 つの特徴のみを選択して始めます。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, svm
iris = datasets.load_iris()
X = iris.data
y = iris.target
X = X[y!= 0, :2]
y = y[y!= 0]
データの準備
次に、学習とテスト用にデータを準備します。データを 90% は学習用、10% はテスト用に分割します。
n_sample = len(X)
np.random.seed(0)
order = np.random.permutation(n_sample)
X = X[order]
y = y[order].astype(float)
X_train = X[: int(0.9 * n_sample)]
y_train = y[: int(0.9 * n_sample)]
X_test = X[int(0.9 * n_sample) :]
y_test = y[int(0.9 * n_sample) :]
異なるカーネルを使ってモデルを学習させる
ここでは、線形、RBF、多項式の 3 種類の異なるカーネルを使って SVM モデルを学習させます。各カーネルについて、学習データにモデルを適合させ、決定境界を描画し、テストデータでの精度を表示します。
## fit the model
for kernel in ("linear", "rbf", "poly"):
clf = svm.SVC(kernel=kernel, gamma=10)
clf.fit(X_train, y_train)
plt.figure()
plt.clf()
plt.scatter(
X[:, 0], X[:, 1], c=y, zorder=10, cmap=plt.cm.Paired, edgecolor="k", s=20
)
## Circle out the test data
plt.scatter(
X_test[:, 0], X_test[:, 1], s=80, facecolors="none", zorder=10, edgecolor="k"
)
plt.axis("tight")
x_min = X[:, 0].min()
x_max = X[:, 0].max()
y_min = X[:, 1].min()
y_max = X[:, 1].max()
XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()])
## Put the result into a color plot
Z = Z.reshape(XX.shape)
plt.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)
plt.contour(
XX,
YY,
Z,
colors=["k", "k", "k"],
linestyles=["--", "-", "--"],
levels=[-0.5, 0, 0.5],
)
plt.title(kernel)
plt.show()
print(f"Accuracy with {kernel} kernel: {clf.score(X_test, y_test)}")
結果の解釈
線形カーネルは線形の決定境界を生成するのに対し、RBF カーネルと多項式カーネルはより複雑な境界を生成することがわかります。テストデータでの精度は、RBF カーネルが最も高く、その次が多項式カーネル、そして線形カーネルです。
まとめ
このチュートリアルでは、分類に異なる SVM カーネルをどのように使用するかを学びました。3 種類の異なるカーネルを使って SVM モデルを学習させ、それぞれの決定境界を可視化しました。また、各カーネルについてテストデータでの精度を計算しました。Iris データセットに対しては、RBF カーネルが最良の結果をもたらすことがわかりました。