スパースモデリング用ライブラリ spm-image を公開しました

スパースモデリング用ライブラリ Spm-image を公開しました
先日の Machine Learing Meetup Kansai #1 で発表したのですが、スパースモデリング・圧縮センシング用の Python ライブラリ spm-image を公開しました。現時点での主だった実装は辞書学習アルゴリズムの k-SVD と Lasso の ADMM 、前処理のための ZCA Whitening といったところです。examples にいくつか使い方の例の notebook もあげてありますので、是非ご覧ください。このライブラリの対応範囲・コンセプトは以下の通りです。

  • スパースモデリング・圧縮センシングのアルゴリズム・ユーティリティを実装する
  • scikit-learn ( および NumPy と scipy ) のみに依存する
  • インターフェースやパッケージ構造は sckit-learn に極力あわせる

一つ目は言わずもがなですが、ハカルスで注力しているスパースモデリングや圧縮センシングで用いるアルゴリズムやユーティリティは社内でも共通化のニーズは高く、また書籍や論文にしか実装が見当たらないものを公開していくことは、スパースモデリングの裾野を広げて行くという意味でも意義あることだと考え、今回の共通ライブラリ化・OSS 化にいたりました。

後者の scikit-learn への準拠ですが、私たち自身が頻繁に scikit-learn を使っていることもあり、同じような scikit-learn のユーザの方にとって

  • 依存関係を一つ足すだけ
  • アルゴリズムの切り替えは既存の実装から、クラス名と import を変えるだけ

にすることで、気軽に試してもらいたいという考えからです。依存関係を小さくしておくことで、新しいライブラリを追加することへの抵抗も少なくなるのでは、とも考えています。

例えば、以下のような scikit-learn の Lasso を使った線形回帰のコードがあったとします。

from sklearn.linear_model import Lasso
model = Lasso(alpha=0.1)
model.fit(X_train, Y_train)
model.score(X_test, y_test)

これを spm-image の ADMM 実装に切り替えるのは、最初の二行を以下のように変更するだけです。

from spmimage.linear_model import LassoADMM
model = LassoADMM(alpha=0.1)
model.fit(X_train, Y_train)
model.score(X_test, y_test)

scikit-learn 互換になっていることで簡単に実装を試せることがわかるかと思います。

scikit-learn は、幅広く実装があり安定もしている一方で、「かゆい所に手が届かない」と思う方もいらっしゃるかと思います。沢山のユーザに利用されている OSS ですので、メンテナンスを考えるとそれは当然ですが、であれば、そのかゆい所をカバーする守備範囲の小さなライブラリたれ、というコンセプトも持っています。

実は社内的に、こういった共通ライブラリに取り組むのは二回目で、初代のライブラリは守備範囲を大きくとった結果、コンセプトがブレてしまい外に出しにくいものになってしまったという反省があります。二代目である spm-image は「山椒は小粒でもぴりりと辛い」的なライブラリとしてコンセプトも明確にし、発展させていきたいと考えています。

是非、気軽に試して見てください。ご要望やフィードバックは GitHub にてお待ちしております!

 

ハカルスについて

・株式会社ハカルス
・人工知能スターターキット HACARUS-X-Edge
・医療・ヘルスケア分野向けシステム構築 HACARUS Fit Platform
・データサイエンティスト積極採用 採用情報

Category: Machine LearningPython

Takashi Someda

サンマイクロシステムズでエンジニアとしてキャリアをスタート。未踏ソフトウェア創造事業への採択をきっかけに、ベンチャーでのプロダクト開発に携わり続けている。現在はハカルスの CTO として、グローバルな開発チームとともにサービスを成長させるべく日々奮闘中。ソフトウェアとロックと家族を愛する40歳。

ニュースレター購読Newsletter

登録はこちら