【Scikit-learn】サポートベクタマシン(SVM)で多クラス分類

この記事では、Pythonと機械学習ライブラリ「scikit-learn」を用いて、サポートベクタマシン(SVM)による多クラス分類を行う方法について紹介します。

サポートベクターマシンとは

サポートベクターマシン(略称:SVM)は、教師あり学習モデルの1つです。
2クラスのパターン識別器としては非常に強力なモデルで、データの分類や回帰などで大きな効果を発揮しています。

【SVMの詳細】
サポートベクターマシンの原理

ソースコード

サンプルプログラムを下記に示します。

【プログラムの説明】
Scikit-learnのライブラリには、あらかじめテスト用のデータ(digitsデータ)があります。
その中身は、64ピクセル(8×8)のグレイスケールの手書き数字の画像データ1797個分です。(行列形式で格納されている)
今回はこれをSVMを使って多クラス分類しています。

【svm.SVCの説明】
svm.SVCでは、gammaとC、2つのパラメータを指定しています。
γはRBFカーネル(ガウシアンカーネル)のパラメータです。(値が大きいほど境界が複雑になる)
Cはどれだけ誤分類を許容するかのパラメータです。(値が小さいほど誤分類を許容)
digits.targetには、各画像の正解データ(数字)が格納されています。

【clf.predictの説明】
上記で作成した分類器を使って、データを分類(推定)しています。

実行結果

サンプルプログラムの実行結果です。
0~9の各ラベルに対する正答率やf値などを表示しています。
この指標から分類器が正しく学習されているか確認できます。
ぱっと観る感じ正答率は1.0(100%)なのでうまく分類器が機能しているようです。
ただし、今回は教師データをそのまま確認にも使用したのでこのような結果になりました。
教師データのサンプル数を減らせば正答率も下がります。

precision recall f1-score support
0 1.00 1.00 1.00 178
1 1.00 1.00 1.00 182
2 1.00 1.00 1.00 177
3 1.00 1.00 1.00 183
4 1.00 1.00 1.00 181
5 1.00 1.00 1.00 182
6 1.00 1.00 1.00 181
7 1.00 1.00 1.00 179
8 1.00 1.00 1.00 173
9 1.00 1.00 1.00 180
avg / total 1.00 1.00 1.00 1796

Confusion matrix:
[[178 0 0 0 0 0 0 0 0 0]
[ 0 182 0 0 0 0 0 0 0 0]
[ 0 0 177 0 0 0 0 0 0 0]
[ 0 0 0 183 0 0 0 0 0 0]
[ 0 0 0 0 181 0 0 0 0 0]
[ 0 0 0 0 0 182 0 0 0 0]
[ 0 0 0 0 0 0 181 0 0 0]
[ 0 0 0 0 0 0 0 179 0 0]
[ 0 0 0 0 0 0 0 0 173 0]
[ 0 0 0 0 0 0 0 0 0 180]]

関連記事

Scikit-learnの導入方法や、その他の使い方については下記事で解説しています。
Scikit-learnをインストールする方法
Scikit-learn入門・使い方
機械学習のアルゴリズム入門

シェア&フォローお願いします!