svmkit | RubyGems.org | your community gem host
- SVMKitの0.3系では、回帰手法の実装を目標としていたが、代表的な手法を実装して、だいたい終えた(※カーネルSVMによる回帰の実装を見送った。SVMKitではStochastic Gradient Descent, SGDでの実装を基本としているが、その場合、回帰に限らず分類器でもカーネルSVMで旨味がでない。別の最適化手法かカーネル近似を充実させることを検討したほうが良さそうで、ひとまず保留とした)。
- RidgeとLassoを実装できたのが良かった。Ridgeについては、最もベーシックな実装をすれば逆行列計算が必要となるが、SVMKitではSGDを用いて実装してある。
- Lassoについては、正則化パラメータを調整することで、スパースな重みベクトルが得られるのが、改めて(現象として)おもしろいなと思った。
- Factorization Machineによる回帰で、学習率とかのハイパーパラメータの設定によってNaNが出まくることに苦心した。試しに、AdaGradやNesterovモーメンタムなど、最近?の深層学習で使われているものを試してみたら、見事に安定して収束するようになった(のでRidge回帰にも導入した。ロス関数が同じ二乗誤差なため)。
- これまでSVMKitでは、最適化にPegasosアルゴリズムによるmini-batch SGDを用いてきたが、もう少しモダンなSGDに切り替えようと思っている。最適化アルゴリズムが変わるのは(仮に分類精度に影響が出ないとしても)、breaking changeなので、0.4系でやっていこうと思う。