Edited at

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

More than 1 year has passed since last update.


記事の主旨

「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