洋食の日記

「だ・である」調ではなく「です・ます」調で書きはじめれば良かったなと後悔してる人のブログです

機械学習

RumaleにHessian Eigenmapsによる次元削減を追加した

はじめに 最近、Rumaleのリリース記事を書くことをすっかり忘れていた。最近リリースしたv0.28.1では、多様体学習の非線形次元削減手法であるHessian Eigenmaps(a.k.a. Hessian Locally Linear Embedding, HLLE)を実装した。HLLEは、各点の十分に小さい近…

Rumale::SVMにClustered SVMによる分類器を追加した

はじめに Clustered Support Vector Machine(CSVM)は、データをクラスタリングし、各クラスターごとに線形SVMを学習することで、非線形な分類器を実現する手法である。また、Rumale::SVMは、Rubyの機械学習ライブラリであるRumaleと同様のインターフェース…

Rumale::SVMにRandom Recursive SVMによる分類器を追加した

はじめに Random Recursive Support Vector Machine(R2SVM)は、ランダム射影による特徴変換を繰り返すことで、線形SVMで非線形な分類器を実現する手法である。また、Rumale::SVMは、Rubyの機械学習ライブラリであるRumaleと同様のインターフェースで、様々…

Rumale::SVMにLocally Linear SVMによる分類器を追加した

はじめに Locally Linear Support Vector Machine(LL-SVM)は、多様体学習の考え方を利用して、線形SVMで非線形分類器を実現する手法である。Rumale::SVMは、Rubyの機械学習ライブラリであるRumaleと同様のインターフェースで、LIBLINEARやLIBSVMで実装され…

LINE社の日本語言語モデルをRubyで試す

はじめに LINE社の日本語言語モデルを手元のmacOSで試したくて、llama.cppのRuby bindingsを作ってる経験を活かして簡単なGPT-NeoXモデルのクライアントを作った。 github.com モデルの準備 LINE社の言語モデルをggml形式に変換する。ggmlをcloneしてきて、…

llama_cpp.rbを使ってRubyでLlama2を利用する

概要 llama.cppのRuby bindingsであるllama_cpp.rbでもLlama2が使えた。 github.com インストール llama_cpp.rbのインストールは、通常のnative extensionsなgemと同様である。 $ gem install llama_cpp もしmacOSを利用しているなら、metalオプションをつけ…

確率分布に従う乱数によるNumo::NArrayを生成するNumo::Randomを作った

はじめに 正規分布や二項分布などの確率分布に従う(疑似)乱数によるNumo::NArrayを生成するNumo::Randomを作った。アイディア自体はずっと前に考えていたが、腱鞘炎と忙しさで、形にできていなかった。 github.com 動機 Numo::NArray自体にも、一様乱数を…

近似最近傍探索ライブラリHnswlibのRuby bindingを作った

はじめに Hnswlibは、C++で書かれたHierarchical Navigable Small World graphsによる近似最近傍探索ライブラリである。近似最近棒探索のベンチマークでも上位に登場する。Ruby bindingがなかったので作成した。 hnswlib | RubyGems.org | your community ge…

インストール時にBLISをビルドしてNumo::Linalgのバックグラウンドライブラリに使用するGemを作成した

はじめに Numo::OpenBLASのBLIS版を作成した。Numo::OpenBLASを作ったのが、だいたい1年前だった。 インストール時にOpenBLASをビルドしてNumo::Linalgのバックグラウンドライブラリに使用するGemを作成した - 洋食の日記 BLISは、最適化BLASの一種で、線形…

Rumaleのリッジ・線形回帰のソルバーでL-BFGS法が自動的に選択されるようにした

はじめに Rubyの機械学習ライブラリであるRumaleで、RidgeとLinearRegressionで、solver: 'auto' とした場合に、Numo::Linalgがロードされていない場合は、L-BFGS法をソルバーとするようにした。Numo::Linalgがロードされている場合は、従来どおり特異値分解…

Rumaleのカーネル法まわりを便利にした

はじめに Rubyの機械学習ライブラリであるRumaleに、前処理としてカーネル行列を計算するクラス、カーネルリッジ回帰による分類器を追加した。また、Nystroemカーネル近似では、サポートするカーネル関数がRBFカーネルだけであったが、多項式カーネルやシグ…

Rumaleに投票によるアンサンブル法を追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、投票(voting)によるアンサンブル法を利用した分類器・回帰分析を追加して、ver. 0.22.4としてリリースした。 https://rubygems.org/gems/rumale/versions/0.22.4 使い方 Rumaleはgemコマンドでインスト…

Rumaleに非負最小二乗法による回帰を追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、非負最小二乗法(Non-nagtive Least Squares, NNLS)による線形回帰を追加して、ver. 0.22.3としてリリースした。 https://rubygems.org/gems/rumale/versions/0.22.3 使い方 Rumaleはgemコマンドでインス…

Rumaleにスタッキングによる分類器と回帰分析を追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、スタッキング(stacking / stacked generalization)を用いた分類器と回帰分析を追加して、ver. 0.22.2としてリリースした。 rumale | RubyGems.org | your community gem host 使い方 Rumaleはgemコマン…

Rumaleと同様のインターフェースでtorch.rbが使えるRumale::Torchを作った

はじめに Rubyには深層学習をあつかうgemがいくつかある。そのなかでtorch.rbは、riceを利用してLibTorchをbinding libraryしたものである。LibTorchは、PyTorchのC++ APIといえるもので、version 1.5からstableなAPIとして提供されており、今後の発展と開発…

Rumaleに回帰分析のための計量学習手法MLKRを追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、回帰分析のための計量学習手法である Metric Leaning for Kernel Regression (MLKR) を追加し、ver. 0.22.1 としてリリースした。 rumale | RubyGems.org | your community gem host 使い方 Rumaleはgemコ…

Rumaleのロジスティック回帰の最適化手法にL-BFGSを追加した

はじめに Rumaleのロジスティック回帰のsolverにL-BFGSを追加し、これをデフォルトとして、ver. 0.22.0 としてリリースした。Rumaleのロジスティック回帰では、最適化に確率的勾配降下法(Stochastic Gradient Descent, SGD)を用いていた。データによって、…

非線形最適化手法L-BFGS-BのGemを作成した

はじめに 非線形最適化手法の一つであるL-BFGS-Bは、scipy.optimize.minimizeのデフォルト手法として採用されているなど、最適化手法ではde facto standardの様な存在である。Rではoptim関数がサポートしていたり、Juliaではbindingライブラリがあったりする…

Rumale::SVMに線形One-Class SVMを追加した

はじめに LIBLINEARがバージョンアップして、線形One-Class SVM(Linear one-class support vector machine, LOCSVM)が追加された。これに合わせて、Numo::LiblinearとRumale::SVMをアップデートして、LOCSVMに対応した。LOCSVMは、データの分布を推定する…

Numo::OpenBLASでOpenBLASのダウンロードとビルドのタイミングを変えた

はじめに Numo::OpenBLASで、インストール時のOpenBLASのダウンロードとビルドを、native extensionの作成時に行うようにして、version 0.2.0 としてリリースした。 numo-openblas | RubyGems.org | your community gem host 使い方 使い方に変更はない。Gem…

Rumaleからdeprecatedにしてた分類器などを削除した

はじめに RumaleからFactorization MachineやNadamなど、deprecatedにしていたものを削除して version 0.20.0 としてリリースした。本 version で分類器などの追加はない。シンプルに削除だけでバージョンを切った。 rumale | RubyGems.org | your community…

インストール時にOpenBLASをビルドしてNumo::Linalgのバックグラウンドライブラリに使用するGemを作成した

はじめに Numo::OpenBLASという、タイトルのとおりのものを作成した。 numo-openblas | RubyGems.org | your community gem host 使い方 Gemコマンドでインストールできる。このとき、OpenBLASをダウンロードしてビルドする。 $ gem install numo-openblas …

Rumaleにカーネル判別分析を追加した

はじめに Rumaleにカーネル判別分析を追加して、これを version 0.18.4 としてリリースした。カーネル判別分析は、version 0.18.0 で追加したフィッシャー判別分析 (Fisher Discriminant Analysis, FDA) を、カーネル法により非線形化したものである。 rumal…

RumaleにNeighbourhood Component Analysisを追加した

はじめに Rumaleに計量学習のNeighbourhood Component Analysis (NCA) とフィッシャー判別分析 (Fisher Discriminant Analysis, FDA) を追加した。これを version 0.18.0 としてリリースした。 rumale | RubyGems.org | your community gem host 使い方 Ruma…

Rumaleの線形モデルの実装を修正した

はじめに 気がつくと全然ブログを書いていなかった。ver. 0.14で多層パーセプトロンを追加して細かい修正とかを重ねて、今はver. 0.17.0になった。ver. 0.17.0での大きな変更は、Rumale::LinearModel以下を刷新したことにある。 rumale | RubyGems.org | you…

Rumaleに多層パーセプトロンなニューラルネットワークを追加した

はじめに Rumaleに多層パーセプトロンによる分類・回帰を追加した。活性化関数にはReLUを、正則化にはDropout、最適化にはAdamというスタンダードな構成にした。あわせて、入力のバリデーションをNumo::NArrayだけでなくRuby Arrayも受け付けるように修正し…

LIBSVMとLIBLINEARをRumaleなインターフェースで使えるRumale::SVMを作った

はじめに LIBSVMとLIBLINEARに実装されているサポートベクターマシン(Support Vector Machine, SVM)のアルゴリズムを、Rumaleのインターフェースで利用するためのGem、Rumale::SVMを作成した。 rumale-svm | RubyGems.org | your community gem host Rumal…

RumaleにFastICAによる独立成分分析を追加した

はじめに RumaleにFastICAによる独立成分分析(Independent Component Analysis, ICA)を追加した。ICAは、与えられたデータを、統計的に独立な元データが混合されてできたものと考え、元データを再構成したもの(独立な成分)を求める手法である。信号処理…

Rumaleのガウス混合モデルで共分散の種類を選べるようにした

はじめに Rumaleのガウス混合モデル(Gaussian Mixture Model, GMM)によるクラスタリングでは、各クラスタの共分散行列には、対角要素のみの対角行列を使用していた。 yoshoku.hatenablog.com これは、逆行列や行列式の計算に特別なアルゴリズムを使用しな…

Rumaleにカーネルリッジ回帰を追加した

はじめに Rumaleのversion 0.13系では、固有値分解や逆行列計算といった、Numo::Linalgにある線形代数のテクニックを利用する機械学習アルゴリズムの実装を進めている。version 0.13.3では、カーネルリッジ回帰とカーネル主成分分析を追加した。 rumale | Ru…