scikit-learnでサポートベクターマシン(SVM)を使う方法

scikit-learnでサポートベクターマシン(SVM)を使う方法
えびかずき
えびかずき

こんにちは、えびかずきです。

今回は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

機械学習カテゴリの最新記事