記事の主旨
「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
公式情報の日本語訳
・[設定パラメータ表(日本語)]
(http://hy-adversaria.blogspot.jp/2011/04/pythonlibsvm.html)
・公式FAQの日本語訳(一部)
応用: 筆者がやったこと
1. 主成分分析に線形SVMを載せて描画
主成分分析(PCA)の第一主成分(PC1)と第二主成分(PC2)による超平面上に、線形SVMを描画しました。
PC1とPC2の寄与率が高い場合は、この図で色々と直感的な説明ができます。
参考サイト:
・Multilabel classification(公式)
・Intro to scikit-learn の Multilabel classification
2. 線形SVMの特徴量の重みをパス図として描画
多数の特徴量で構成した数式モデルを、パス図として描画しました。
視覚的にモデル式を説明したい時に使えます。
参考サイト:
・LIBSVMの学習モデルを用いた特徴量の重み計算スクリプト
(学習モデルの取得方法はここに載ってます)
・パス図描画ライブラリ「graphviz」- Examples