Introduction
以前、LIBSVMという台湾生まれのSVMライブラリのC#ラッパーを作成しました。
今回、同じ台湾生まれのLIVLINEARのC#ラッパーLibLinear.Netを作成しました。
LIVLINEARのライブラリも.NETラッパーは少ない感じです。
- libsvm.clr
- C++/CLIでLIBLINEARを再ビルドして.NETから呼べるようにしています。
めぼしいのはこれ位でした。
LibSvm.Netと同じく、
- XMLコメントほぼ全て英語と日本語で実装していますので、IntelliSenseがバリバリ
- 100%C#の.NETStandard準拠
- Linuxで動く
そして、前回と同じサンプルをLibLinear.Netで実装したものを持ってきました。
Get Started
LibSvm.Netを使うには下記の作業が必要です。
- NugetからLibLinear.Netのインストール
- LIBLINEARのソースをダウンロード
- LIBLINEARのソースをビルド
ちょっと面倒ですが、どれも手順はしっかりしています。
LIBLINEARのビルド手順はLibLinear.NetのWikiでも説明していますので参考にしてください。
Sample
1 | using System; |
このサンプルは、訓練データとテストデータの分類または回帰を実行します。
実行のために、
- https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendigits
- https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendigits.t
をダウンロードします。
これは手書き数字のデータセットです。MNISTと似ているのかな? 引数として、
- ソルバー (オプション)
- 例: -s=4
- バイアス (オプション)
- 例: -b=3
- 学習済みファイルの出力先 (オプション)
- 例: -o=trained.model
を指定できます。
分類と回帰によって実行結果が異なります。
分類
1 | D:\\Works\\OpenSource\\LibSvmDotNet\\example\\Pendigits> dotnet run -c Release optimization finished, #iter = 1000 |
回帰
1 | D:\Works\OpenSource\LibSvmDotNet\example\Pendigits> dotnet run -c Release "-s=11" |
Conclusion
またも、正直車輪の再発明な気がしないでもないですが… LibLinearのメリットは、大規模データに対してLibSvmよりも高速に実行できるところがウリのようです。
このあたりの高速性も紹介していきたいです。
Source Code
https://github.com/takuya-takeuchi/LibLinearDotNet/tree/master/example/Pendigits