はじめに
この実験では、scikit-learn を使って 2 クラスの分離可能なデータセットを作成し、線形カーネルを持つサポートベクターマシン (SVM) 分類器を使って最大マージン分離超平面をプロットします。SVM は、クラス間のマージンを最大化しながらデータを異なるクラスに分離する最適な境界または超平面を見つける強力な分類アルゴリズムです。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習します。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題がある場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
2 クラスの分離可能なデータセットを作成する
2 クラスの分離可能なデータセットを作成するには、scikit-learn の make_blobs() 関数を使います。この関数は、クラスタリングと分類用の等方ガウスブロブを生成します。2 つの中心と乱数シード 6 を使って 40 個のサンプルを作成します。また、matplotlib を使ってデータポイントをプロットします。
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
## create a two-class separable dataset
X, y = make_blobs(n_samples=40, centers=2, random_state=6)
## plot the data points
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.show()
SVM モデルを適合させる
次に、線形カーネルと正則化パラメータ 1000 を使って SVM モデルをデータセットに適合させます。scikit-learn の svm.SVC() 関数を使って SVM 分類器を作成します。
from sklearn import svm
## fit the SVM model
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)
最大マージン分離超平面をプロットする
最大マージン分離超平面をプロットするには、scikit-learn の DecisionBoundaryDisplay.from_estimator() 関数を使います。この関数は、SVM 分類器の決定関数とサポートベクトルをプロットします。また、サポートベクトルを塗りつぶさない黒い枠の円としてプロットします。
from sklearn.inspection import DecisionBoundaryDisplay
## plot the decision function and support vectors
ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
clf,
X,
plot_method="contour",
colors="k",
levels=[-1, 0, 1],
alpha=0.5,
linestyles=["--", "-", "--"],
ax=ax,
)
ax.scatter(
clf.support_vectors_[:, 0],
clf.support_vectors_[:, 1],
s=100,
linewidth=1,
facecolors="none",
edgecolors="k",
)
plt.show()
まとめ
この実験では、2 クラスの分離可能なデータセットを作成し、線形カーネルを使って SVM モデルを適合させ、scikit-learn を使って最大マージン分離超平面をプロットする方法を学びました。SVM は、画像分類、テキスト分類、生物情報学など、さまざまなアプリケーションに使用できる強力な分類アルゴリズムです。