A certain engineer "COMPLEX"

.NETで機械学習を試してみる LibLinear.Net編 第1回

Introduction


以前、LIBSVMという台湾生まれのSVMライブラリのC#ラッパーを作成しました。
今回、同じ台湾生まれのLIVLINEARのC#ラッパーLibLinear.Netを作成しました。

takuya-takeuchi/LibLinearDotNet
LibLinearDotNet - .NET wrapper for LIBLINEAR written in C#

LIVLINEARのライブラリも.NETラッパーは少ない感じです。

  • libsvm.clr
    • C++/CLIでLIBLINEARを再ビルドして.NETから呼べるようにしています。

めぼしいのはこれ位でした。

LibSvm.Netと同じく、

  • XMLコメントほぼ全て英語と日本語で実装していますので、IntelliSenseがバリバリ
  • 100%C#の.NETStandard準拠
  • Linuxで動く

そして、前回と同じサンプルをLibLinear.Netで実装したものを持ってきました。

takuya-takeuchi/LibLinearDotNet
LibLinearDotNet - .NET wrapper for LIBLINEAR written in C#

Get Started


LibSvm.Netを使うには下記の作業が必要です。

      1. NugetからLibLinear.Netのインストール
      2. LIBLINEARのソースをダウンロード
      3. LIBLINEARのソースをビルド

ちょっと面倒ですが、どれも手順はしっかりしています。
LIBLINEARのビルド手順はLibLinear.NetのWikiでも説明していますので参考にしてください。

Sample


このサンプルは、訓練データとテストデータの分類または回帰を実行します。
実行のために、

  • 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

を指定できます。

分類と回帰によって実行結果が異なります。

分類

回帰

Conclusion


またも、正直車輪の再発明な気がしないでもないですが...
LibLinearのメリットは、大規模データに対してLibSvmよりも高速に実行できるところがウリのようです。
このあたりの高速性も紹介していきたいです。

Source Code


https://github.com/takuya-takeuchi/LibLinearDotNet/tree/master/example/Pendigits

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。