洋食の日記

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

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

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

帯状庖疹は痛いし長引く

帯状庖疹になった。これを書いてる時点で、発症から2週間ちょっとだが、ブツブツはあるし痒みと寝起きとかに若干の痛みがある。背中と腰にブツブツができた当初は「あせもができたかな?」と思ったが、すぐにロキソニンを飲まないと眠れないほどの痛みが起き…

ひどい腱鞘炎になると一年たってもなおらない

4月になった。手に痛みを感じて湿布貼ったりし始めたのが去年の4月頃なので、腱鞘炎になってだいたい1年がたった。個人的には、痛みを和らげる塗り薬よりも、サポーターでガチガチに固めるのとストレッチが効果があった。もちろん、休むのが大事で、土日にバ…

ひどい腱鞘炎になると半年たってもなおらない

はじめに 今後のため記録として残す。タイトルのとおりで、手が全て腱鞘炎という、ひどい腱鞘炎になって半年以上が経ったが、完治する気配がない。今でも寝起きや仕事終わりでは、人差し指や小指は曲げると激痛が走る。原因は手指の使いすぎなので、今の仕事…

近似最近傍探索ライブラリ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の一種で、線形…

RBSでメソッドをオーバーロードするときは三点リーダーを書く

はじめに タイトルのとおり。RBSによる型注釈が提供されているメソッドをmonkey patchして、その型注釈をpatch.rbsに書きたい時がある。Rubyのノリで書くと、重複定義エラーになる。 ディレクトリ構成 以降の文章は、次のようなディレクトリ構成で、 |- lib …

ひどい腱鞘炎になったので型注釈を書いている

はじめに タイトルのとおり。色々あって仕事でのタイプ量が急増したために、4月末頃からヒドい腱鞘炎に悩まされている。手首から先の曲がる箇所は全て曲げると痛い。朝起きてしばらくは、指が痛みで曲げられないほどで、仕事では、サポーターで手首から先を…

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ライブラリがあったりする…

Rubyな形態素解析器Suikaのトライをdarts-clone.rbにした

はじめに Rubyな形態素解析器Suikaの単語検索のためのトライを、先日リリースしたdarts-clone.rbに変更してバージョンを上げた。 suika | RubyGems.org | your community gem host 使い方 変更は内部的なものなので、Suikaの使い方自体は変わらない。 gem in…

ダブル配列ライブラリDarts-cloneのRuby bindingを作成した

はじめに Susumu Yataさんが作られたDarts-cloneは、Darts(Double-ARray Trie System)というライブリのクローンで、共通接頭辞検索を実現するデータ構造のダブル配列(Double Array)の実装である。Darts-cloneは、DartsとAPI互換性があり、検索の機能や速…

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

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

近似最近傍探索ライブラリAnnoyのRuby bindingを作成した

はじめに Annoy (Approximate Nearest Neighbors Oh Yeah) は、C++で書かれた近似最近傍探索ライブラリである。近似最近傍探索とは、その名のとおり、クエリに対して厳密ではなく近似的に近傍にあるものを探索する。高速に探索できるので、大規模データの画…

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…

Windows10でRubyな開発環境を得るためにやったこと

はじめに Windowsでの動作確認のため、その昔Windows 7をWindows 8にし、そしてWindows 10にした、古いラップトップをひっぱりだして、Rubyの環境構築を行った。Windowsでの開発に関して、知識がゼロだったので、10回はインストールとアンインストールを繰り…

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

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

Suikaの未知語処理のバグを修正した

はじめに Pure Rubyな形態素解析器Suikaを作成したが、未知語処理がバグだらけで、リリースして1週間で4回もバージョンアップしてしまった。現在 ver. 0.1.4 だが、もう安定して動くはず。 suika | RubyGems.org | your community gem host 未知語処理の勘違…

SuikaというPure Rubyな形態素解析器を作成した

はじめに Pure Rubyな形態素解析器Suikaを作成した。開発中でバッリバリにα版だが、思い切ってリリースすることにした。 suika | RubyGems.org | your community gem host 最も有名な形態素解析器であるMeCabもそうだが、形態素解析器は食べ物の名前がつくこ…

画像をNumo::NArrayで扱えるMagroにフィルタを追加した

はじめに Rubyの画像処理ライブラリMagroに、フィルタをかけるメソッドを追加し、version 0.3.0としてリリースした。 magro | RubyGems.org | your community gem host 使い方 Magroは画像ファイルの読み書きにlibpngとlibjpegを必要とする。Magroをインスト…

画像をNumo::NArrayで扱えるMagroに画像のサイズ変更を追加した

はじめに Magroという画像をNumo::NArrayで扱える(読み書きできる)Gemを作っていたが、いろいろと時間がとれず更新が滞っていた。 yoshoku.hatenablog.com せっかくの連休なので、Bilinear補完によるサイズ変更を追加した。基本的なとこから実装するならば…

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

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