こんにちは、えびかずきです。
今回はscikit-learnでサポートベクターマシン(SVM)を使う方法について説明していきます。
こんな人におすすめ:
・scikit-learnの使い方を知りたい
・Pythonで機械学習を勉強している
結論、sk-learn.svmモジュールを使うことで実装できます。
使い方を簡単にまとめると、線形SVMを使う場合はsklearn.svmのLinearSVC
クラス、カーネルSVMを使う場合はsklearn.svmのSVCを使います。
迷った場合は、より汎用性の高いカーネルSVMを使うことをおすすめします。
開発環境
Python 3.7.3
scikit-learn 0.24.2
NumPy 1.20.2
訓練データ
今回は、scikit-learnのmake_blobsで訓練データを生成して使います。
import numpy as np
from sklearn.datasets import make_blobs
X_train, Y_train = make_blobs(centers=2, random_state=4, n_samples=30, n_features=2)
線形SVMの実装
線形SVMは以下のようにsklearn.svmのLinearSVCクラスを使って実装します。
#linear-svm
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
import mglearn
model = LinearSVC(max_iter=1000) #1000だと収束しない
result = model.fit(X_train, Y_train)
fig, ax = plt.subplots(1, 1, figsize=(4, 3))
mglearn.plots.plot_2d_separator(result, X_train, fill=False, eps=0.5,
ax=ax, alpha=.7)
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], Y_train, ax=ax,)
ax.set_title(result.__class__.__name__)
ax.set_xlabel("Feature 0")
ax.set_ylabel("Feature 1")
ax.legend()
カーネルSVMの実装
カーネルSVMは以下のようにsklearn.svmのSVCクラスを使って実装します。
#kernel-svm
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.svm import SVC
import mglearn
model = SVC(C=1,gamma=1,max_iter=10000) #1000だと収束しない
result = model.fit(X_train, Y_train)
fig, ax = plt.subplots(1, 1, figsize=(4, 3))
mglearn.plots.plot_2d_separator(result, X_train, fill=False, eps=0.5,
ax=ax, alpha=.7)
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], Y_train, ax=ax,)
ax.set_title(result.__class__.__name__)
ax.set_xlabel("Feature 0")
ax.set_ylabel("Feature 1")
ax.legend()
まとめ
今回はscikit-learnでサポートベクターマシン(SVM)を使う方法について説明しました。
scikit-learnだと少ないコードでサクッと実装できるのでいいですね。
参考
今回の記事作成にあたって、以下の情報が参考になりました。
参考URL
サポートベクターマシンの詳しい理論的な解説について【線形分離可能な場合】
参考書籍
https://github.com/amueller/introduction_to_ml_with_python
コメントを書く