はじめに
この実験では、Radial Basis Function (RBF) カーネルを使用した非線形サポートベクターマシン (Support Vector Machine: SVM) を用いて二値分類を行うプロセスを案内します。予測対象は入力の排他的論理和 (XOR) です。カラーマップは、SVM が学習した決定関数を示しています。このタスクには Python の scikit-learn ライブラリを使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして Notebook タブに切り替え、Jupyter Notebook を開いて練習を行ってください。
場合によっては、Jupyter Notebook の読み込みが完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby に質問してください。セッション終了後にフィードバックを提供していただければ、迅速に問題を解決します。
必要なライブラリをインポートする
このステップでは、このタスクに必要なライブラリをインポートします。データの可視化には numpy と matplotlib を、SVM 分類には scikit-learn を使用します。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
データを生成する
このステップでは、SVM 分類器の学習とテストに使用するデータを生成します。2 つの特徴量を持つ 300 個のランダムなデータポイントを生成します。予測対象は入力の排他的論理和 (XOR) です。
np.random.seed(0)
X = np.random.randn(300, 2)
Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
モデルを学習する
このステップでは、生成したデータを使用して、RBF カーネルを持つ SVM 分類器を学習させます。
clf = svm.NuSVC(gamma="auto")
clf.fit(X, Y)
決定関数を可視化する
このステップでは、SVM が学習した決定関数を可視化します。点のメッシュグリッドを作成し、SVM 分類器を使用して各点のクラスを予測します。その後、各点をそれぞれのクラスとともにプロットし、SVM が学習した決定境界を描画します。
xx, yy = np.meshgrid(np.linspace(-3, 3, 500), np.linspace(-3, 3, 500))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.imshow(
Z,
interpolation="nearest",
extent=(xx.min(), xx.max(), yy.min(), yy.max()),
aspect="auto",
origin="lower",
cmap=plt.cm.PuOr_r,
)
contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linestyles="dashed")
plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired, edgecolors="k")
plt.xticks(())
plt.yticks(())
plt.axis([-3, 3, -3, 3])
plt.show()
まとめ
この実験では、RBF カーネルを使用した非線形 SVM を用いて二値分類を行う方法を学びました。2 つの特徴量と排他的論理和 (XOR) の予測対象を持つデータを生成しました。生成したデータを使用して SVM 分類器を学習させ、SVM が学習した決定関数を可視化しました。