先日、紹介したStatistical Pattern Recognition Toolboxだが、非常に使いやすい。
今まで自分用に実装してきたツールも、同じAPIで呼び出せるように改造をしていこうと思う。
ところで、よくできたマニュアルに少し間違いがあるようなので:
Table3.1のKernel Data Projectionのコマンド名がkerprojとなっているが、kerprojは存在せず、kernelprojのようだ。
何点か気づいた点:
1. GDA
GDAの計算のところで、ラベル名を0始まりにしていたら、うまくいかない。もしかしたらマニュアルのどこかに書かれているかもしれないが、1始まりにしないといけない。nClass=max(labels)としているので、1始まりしなければ、うまくいかない。対応策としては、nClass=length(unique(labels))がよいと思われるが、今後当分はこのtoolboxを使っていくつもりなので、他に不具合が出ると面白くないので、今回はlabelを変更にて対処。
2. Kernel Identifierについて
exampleではrbfのみが用いられているが、他にどんなkenelがあるかはマニュアルをざっと見たところかかれていない模様。
kernel_fun.cを見ると、linear, poly, rbf, sigmoidがサポートされいてる。
* poly: ( < x , y javascript:void(0)> + b )^a のa, bがそれぞれ第一引数、第二引数でこれを入力のoptions.argに入れればよい。
例えば、options.arg = [ a , b ] といった感じ。
* sigmoid: tanh( a * < x , y> + b ) のa, bがそれぞれ第一引数、第二引数で入力の仕方はpolyの場合と同じ。
3. Mult-class BSVM
solverは下記のものがサポートされているとマニュアルに書かれているが、実際には最新版においては一部はサポートされていないようである。
===================================================
Mitchell-Demyanov-Malozemov (solver = 'mdm').
Kozinec's algorithm (solver = 'kozinec').
Nearest Point Algorithm (solver = 'npa').
===================================================
bsvm2_mex.cの中を見ると下記のものがサポートされている。
mdm, imdm, iimdm, keerthi, kowalczyk, kozinec
従って、npaを用いているexampleも動かない。
UCI Machine Leraning Repository(http://archive.ics.uci.edu/ml/)にアップロードされている、handwritten_numeralsのFourier変換による特徴抽出データに対しては、iimdmがうまくいくようだ。学習時間も短いし精度も他のものよりよくなる。