SVMソフトウェアの比較

オープンソースSVMソフトウェアの基本デフォルトの設定で比較などをしてみた。

利用データはLIBSVM Data: Classification, Regression, and Multi-labelのa9aとnews20.binaryを利用した。
データセットの詳細は以下のようになっている

データセット 訓練データ数 テストデータ数 データの次元
a9a 32561 16281 123
news20.binary 15000 4996 1355199

なお、news20.binaryでの訓練データとテストデータの作成については id:n_shuyoさんの記事を参考にした。

比較に用いたソフトウェアは以下の5つ

測定結果は以下のようになった。パラメータの設定はデフォルトのものを利用。svm-perfに限りC=1.0とした*1

a9a

ソフトウェア 訓練時間(sec) 精度(%)
LIBSVM(Linear Kernel) 82.79 84.98
LIBSVM(RBF Kernel) 64.21 84.81
SVM-Light(Linear Kernel) 4.084 85.01
SVM-Light(RBF Kernel) 386.6 79.87
TinySVM(Linear Kernel) 216.3 84.98
SVM-perf(Linear Kernel) 0.410 84.59
LIBLINEAR(Linear Kernel) 0.639 84.96

news20.binary

ソフトウェア 訓練時間(sec) 精度(%)
LIBSVM(Linear Kernel) 267.27 96.43
SVM-Light(Linear Kernel) 53.624 96.42
TinySVM(Linear Kernel) 445.5 96.43
SVM-perf(Linear Kernel) 7.077 80.20
LIBLINEAR(Linear Kernel) 3.638 96.36

考察

結果から次のようなことが読み取れる

  • a9aに関してはlinear kernelとRBF kernelで顕著な精度の違いはない
  • Linear Kernelに関してはSVM-perf以外はどれも似たような精度となっている
    • 何でSVM-perfだけ精度が低くなっているのかは、まだ元論文を読んでいないので不明、単にパラメータの設定の仕方が悪いだけかも
  • TinySVMはLinear Kernelを利用しているものの中では長い訓練時間がかかっている
    • TinySVMの開発が2002年で止まっていることが理由の一つとしてあげられる。
  • SVM-LightはLinear Kernelのときはそこそこ高速に訓練が行える
    • SVM-Lightのページには"use of folding in the linear case"と書いており、この工夫が速度に影響していると考えられる

*1:指定しないと実行できないため