Python
Mac
LIBSVM
scikit-learn
svm

PythonのSVMで多クラス分類をする

記事の主旨

「SVMで多クラス分類がしたい。手持ちのデータを手軽に分類したい」
そんな人のための学習リソースを集めた記事です。

既存のライブラリ(scikit-learnとLIBSVM)を使って、ちゃちゃっと分類しちゃいましょう。

事前知識

SVMによる多クラス分類には、代表的な2種類の手法があります。

  • 1対1分類法(OvO:One versus the One)
  • 1対他分類法(OvR:One versus the Rest)

今回はこれらを2つの手法を扱ったライブラリを使います。
詳しくは、以下の記事が参考になります。

参考サイト:
 ・SVMを使いこなす! - 多クラス分類

scikit-learnでSVM (OvOとOvR)

1. scikit-learnライブラリをインストール

  • pip install scikit-learnでインストール

2. 簡単な事例でHello world!

付属データセットを用いた事例:
 ・OvOとOvRによる手書き文字の分類
 ・Jupyter Notebookを用いた手書き文字の分類

3. 手持ちのデータを当てはめる

公式リファレンス:
 ・sklearn.multiclass.OneVsOneClassifier(OvO)
 ・sklearn.multiclass.OneVsRestClassifier(OvR)

LIBSVMでSVM (OvOのみ)

1. LIBSVMライブラリをインストール

LIBSVMライブラリのダウンロード&インストール方法
 (makeコマンドでインストールするところまで)
LIBSVM - Github

2. 簡単な実装記事でHello world!

簡単なテストデータを用いた事例:
 ・SVM図解 + LIBSVM実装の手順とその解説

3. 手持ちのデータを当てはめる

公式情報(英語):
 ・公式サイト
 ・公式FAQ
公式情報の日本語訳
 ・設定パラメータ表(日本語)
 ・公式FAQの日本語訳(一部)

応用: 筆者がやったこと

1. 主成分分析に線形SVMを載せて描画

主成分分析(PCA)の第一主成分(PC1)と第二主成分(PC2)による超平面上に、線形SVMを描画しました。
PC1とPC2の寄与率が高い場合は、この図で色々と直感的な説明ができます。

参考サイト:
 ・Multilabel classification(公式)
 ・Intro to scikit-learn の Multilabel classification

2. 線形SVMの特徴量の重みをパス図として描画

多数の特徴量で構成した数式モデルを、パス図として描画しました。
視覚的にモデル式を説明したい時に使えます。

参考サイト:
 ・LIBSVMの学習モデルを用いた特徴量の重み計算スクリプト
  (学習モデルの取得方法はここに載ってます)
 ・パス図描画ライブラリ「graphviz」- Examples