はじめに
Rubyの機械学習ライブラリであるRumaleで、RidgeとLinearRegressionで、solver: 'auto' とした場合に、Numo::Linalgがロードされていない場合は、L-BFGS法をソルバーとするようにした。Numo::Linalgがロードされている場合は、従来どおり特異値分解を用いる方法を使う。これを、ver. 0.23.0としてリリースした。
rumale | RubyGems.org | your community gem host
使い方
Rumaleはgemコマンドでインストールできる。
$ gem install rumale
使い方は変わらない。RidgeとLinearRegressionのオブジェクトを生成する際に、ソルバーを指定するsolverパラメータを'auto'とすると、L-BFGS法が選択される。Numo::Linalgがロードされている場合は、特異値分解を用いる。
require 'rumale' reg = Rumale::LinearModel::Ridge.new(solver: 'auto') pp reg.params[:solver] # > "lbfgs" require 'numo/openblas' reg = Rumale::LinearModel::Ridge.new(solver: 'auto') pp reg.params[:solver] # > "svd"
おわりに
これまで確率的勾配降下法(Stochastic Gradient Descent, SGD)が選択されていたが、SGDはパラメーターの設定方法が難しいようなので、L-BFGS法を選択するようにした。安定的に解を得たい場合は、Numo::Linalgをロードして、特異値分解を用いるのが良い。 Rumaleの開発は、これでしばらくはメンテナンスモードに入ろうと思っている。学習アルゴリズムは無数にあるので、足そうと思えばいくらでも足せるのだが、そうすると巨大ライブラリになってしまう。それよりも、自然言語処理ライブラリとか、OpenCVのRubyバインディングだとか、機械学習と組み合わせて使うものを充実させた方が良いと考える。あと、APIリファレンスだけじゃなくて、User GuideとかTutorialとか、そういうドキュメントも書かないとな〜。