はじめに
この実験では、SVM カーネルを使用してデータポイントを分類する方法についての手順を示します。データポイントが線形に分離できない場合、SVM カーネルは特に役立ちます。このタスクを実行するために、Python scikit-learn を使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使用して練習します。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
このステップでは、分類タスクを実行するために必要なライブラリをインポートします。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
データセットとターゲットの作成
このステップでは、分類タスク用のデータセットとターゲットを作成します。データセットとターゲットの作成には numpy ライブラリを使用します。
X = np.c_[
(0.4, -0.7),
(-1.5, -1),
(-1.4, -0.9),
(-1.3, -1.2),
(-1.1, -0.2),
(-1.2, -0.4),
(-0.5, 1.2),
(-1.5, 2.1),
(1, 1),
## --
(1.3, 0.8),
(1.2, 0.5),
(0.2, -2),
(0.5, -2.4),
(0.2, -2.3),
(0, -2.7),
(1.3, 2.1),
].T
Y = [0] * 8 + [1] * 8
モデルの作成
このステップでは、線形、多項式、ラジアルベース関数 (RBF) の 3 種類の異なるカーネルを持つ SVM カーネルモデルを作成します。線形カーネルは線形に分離可能なデータポイントに使用され、多項式カーネルと RBF カーネルは非線形に分離可能なデータポイントに役立ちます。
## fit the model
for kernel in ("linear", "poly", "rbf"):
clf = svm.SVC(kernel=kernel, gamma=2)
clf.fit(X, Y)
モデルの可視化
このステップでは、線、点、および平面に最も近いベクトルをプロットすることで、SVM カーネルモデルを可視化します。
## plot the line, the points, and the nearest vectors to the plane
plt.figure(fignum, figsize=(4, 3))
plt.clf()
plt.scatter(
clf.support_vectors_[:, 0],
clf.support_vectors_[:, 1],
s=80,
facecolors="none",
zorder=10,
edgecolors="k",
)
plt.scatter(X[:, 0], X[:, 1], c=Y, zorder=10, cmap=plt.cm.Paired, edgecolors="k")
plt.axis("tight")
x_min = -3
x_max = 3
y_min = -3
y_max = 3
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.figure(fignum, figsize=(4, 3))
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.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.xticks(())
plt.yticks(())
fignum = fignum + 1
plt.show()
まとめ
この実験では、SVM カーネルを使ってデータポイントを分類する方法を学びました。データセットとターゲットを作成し、3 種類の異なるカーネルを持つ SVM カーネルモデルを作成し、そしてモデルを可視化しました。データポイントが線形に分離不可能な場合、SVM カーネルは特に役立ちます。