Ruby
はじめに Windowsでの動作確認のため、その昔Windows 7をWindows 8にし、そしてWindows 10にした、古いラップトップをひっぱりだして、Rubyの環境構築を行った。Windowsでの開発に関して、知識がゼロだったので、10回はインストールとアンインストールを繰り…
はじめに Numo::OpenBLASという、タイトルのとおりのものを作成した。 numo-openblas | RubyGems.org | your community gem host 使い方 Gemコマンドでインストールできる。このとき、OpenBLASをダウンロードしてビルドする。 $ gem install numo-openblas …
はじめに Pure Rubyな形態素解析器Suikaを作成したが、未知語処理がバグだらけで、リリースして1週間で4回もバージョンアップしてしまった。現在 ver. 0.1.4 だが、もう安定して動くはず。 suika | RubyGems.org | your community gem host 未知語処理の勘違…
はじめに Pure Rubyな形態素解析器Suikaを作成した。開発中でバッリバリにα版だが、思い切ってリリースすることにした。 suika | RubyGems.org | your community gem host 最も有名な形態素解析器であるMeCabもそうだが、形態素解析器は食べ物の名前がつくこ…
はじめに Rubyの画像処理ライブラリMagroに、フィルタをかけるメソッドを追加し、version 0.3.0としてリリースした。 magro | RubyGems.org | your community gem host 使い方 Magroは画像ファイルの読み書きにlibpngとlibjpegを必要とする。Magroをインスト…
はじめに Magroという画像をNumo::NArrayで扱える(読み書きできる)Gemを作っていたが、いろいろと時間がとれず更新が滞っていた。 yoshoku.hatenablog.com せっかくの連休なので、Bilinear補完によるサイズ変更を追加した。基本的なとこから実装するならば…
はじめに Rumaleにカーネル判別分析を追加して、これを version 0.18.4 としてリリースした。カーネル判別分析は、version 0.18.0 で追加したフィッシャー判別分析 (Fisher Discriminant Analysis, FDA) を、カーネル法により非線形化したものである。 rumal…
はじめに Rumaleに計量学習のNeighbourhood Component Analysis (NCA) とフィッシャー判別分析 (Fisher Discriminant Analysis, FDA) を追加した。これを version 0.18.0 としてリリースした。 rumale | RubyGems.org | your community gem host 使い方 Ruma…
はじめに Rumaleに多層パーセプトロンによる分類・回帰を追加した。活性化関数にはReLUを、正則化にはDropout、最適化にはAdamというスタンダードな構成にした。あわせて、入力のバリデーションをNumo::NArrayだけでなくRuby Arrayも受け付けるように修正し…
はじめに LIBSVMとLIBLINEARに実装されているサポートベクターマシン(Support Vector Machine, SVM)のアルゴリズムを、Rumaleのインターフェースで利用するためのGem、Rumale::SVMを作成した。 rumale-svm | RubyGems.org | your community gem host Rumal…
はじめに RumaleにFastICAによる独立成分分析(Independent Component Analysis, ICA)を追加した。ICAは、与えられたデータを、統計的に独立な元データが混合されてできたものと考え、元データを再構成したもの(独立な成分)を求める手法である。信号処理…
はじめに Rumaleのガウス混合モデル(Gaussian Mixture Model, GMM)によるクラスタリングでは、各クラスタの共分散行列には、対角要素のみの対角行列を使用していた。 yoshoku.hatenablog.com これは、逆行列や行列式の計算に特別なアルゴリズムを使用しな…
はじめに Rumaleのversion 0.13系では、固有値分解や逆行列計算といった、Numo::Linalgにある線形代数のテクニックを利用する機械学習アルゴリズムの実装を進めている。version 0.13.3では、カーネルリッジ回帰とカーネル主成分分析を追加した。 rumale | Ru…
はじめに 機械学習アルゴリズムでは、固有値分解が逆行列計算といった、線形代数のテクニックを利用する場合がある。これらをRubyで使用するには、Numo::Linalgが適している。一方で、Numo::Linalgは、Numo::NArrayと異なり、BLAS/LAPACK系の外部ライブラリ…
はじめに 畳み込み演算は、そのまま実装すると、データが大きくなると重くなる。一方、フーリエ変換により、畳み込み演算は単純な掛け算に変換される。これを応用して、畳み込み演算したい二つの配列をフーリエ変換し、乗算を行った後に、フーリエ逆変換する…
はじめに NumPyが、ver. 1.17から、フーリエ変換にFFTPACKではなくpocketfftを使う様になった。pocketfftはFFTPACKを修正したもので、速度と精度が改善されている。 「NumPy 1.17」リリース | OSDN Magazine ENH: Add pocketfft sources to numpy for testin…
はじめに PythonではOpenCVとScikit-imageという画像処理ライブラリがある。これらライブラリでは、画像データをNumPyのndarrayで表す。 >>> from skimage import io >>> img = io.imread('lena.png') >>> type(img) <class 'numpy.ndarray'> 同じような感じで、画像データをNumo::N</class>…
はじめに Numo::Libsvmと同様に、特徴ベクトルやラベルをNumo::NArray形式で扱えるLIBLINEARのbinding gemを作成した。LIBLINEARは、SVMやロジスティック回帰による線形の分類器や回帰が実装されている。 numo-liblinear | RubyGems.org | your community ge…
はじめに 特徴ベクトルやラベルをNumo::NArray形式で扱えるLIBSVMのbinding gemが欲しかったので、Ruby拡張ライブラリの勉強もかねて作成した。開発に際しては、Numo::FFTWをとても参考にさせて頂いた。gem名は、勝手ながらnumo-libsvmとした。 numo-libsvm …
はじめに Rubyにパイプライン演算子が追加されるかも?というのが、少し前に話題になった。他方、R言語にはmagrittrというパイプラインを実現するパッケージがあり、これが便利だ。 # h(g(f(x))) x %>% f %>% g %>% h データ分析では、カテゴリ変数を整数値…
はじめに Rumaleに多次元尺度構成法(Multidimensional Scaling: MDS)による次元削減を実装した。MDSには様々なアルゴリズムがあるが、Rなどでも実装されている Scaling by MAjorizing a COmplicated Function(SMACOF)による方法を採用した。 rumale | Ru…
はじめに Rumaleに、Power Iteration Clustering(PIC)を追加した。PICは、データ間の類似度をもとにクラスタリングする。類似度に、例えばRBFカーネルを選択すると、非線形なデータ分布構造を捉えたクラスタリングができる。 rumale | RubyGems.org | your…
はじめに Ruby拡張で、Numo::NArrayのデータをC言語の配列のように扱えないかな〜と思っていたら、na_get_pointer_for_read(for_writeもある)という関数が用意されていて簡単にできた。 準備 もろもろ自動で用意されて便利なので、Ruby拡張を含むgemを作る…
はじめに Rumaleにガウス混合モデル(Gaussain Mixture Model, GMM)によるクラスタリングを追加して、ver. 0.12.2としてリリースした。 rumale | RubyGems.org | your community gem host GMMは、データ分布をいくつかの正規分布の重み付き線形和で表現しよ…
はじめに 機械学習アルゴリズムでは、乱数でベクトルを初期化したり、ランダムサンプリングしたりなど、乱数生成をアルゴリズム中に含むものが多い。Rumaleの多くもそんな感じで、クラスのインスタンス変数にRandomクラスによる乱数生成器を持っている。これ…
はじめに Rumaleには、実行速度が遅いという問題があった。これに対して、version 0.11.0 では、one-vs-the-restやbaggingで並列化できる部分を、Parallelにより並列化してみた。 rumale | RubyGems.org | your community gem host scikit-learnと同様に、n_…
はじめに Rumaleに高次元データの可視化として定番の一つになっている t-distributed Stochastic Neighbor Embedding(t-SNE)を実装した。「教師なし学習を増やさないとな〜少ないよな〜」と思っているところに、issueでリクエストを頂いたので実装してver.…
はじめに Rumaleでは決定木系のアルゴリズムの高速化と追加を進めている。ついに人気のGradient Tree Boosting(Gradient Boosting MachineやGradient Boosted Regression Treeなどとも呼ばれる)を実装して、ver. 0.9.2としてリリースした。 rumale | RubyG…
はじめに 新しい時代になったので、Rumaleに新しいアルゴリズムを追加してバージョンを0.9.1に上げてみた。あわせて、バージョン0.9.0で導入した決定木のC拡張もリファクタリングして、少しだけ速くなっている。 rumale | RubyGems.org | your community gem…
はじめに Rumaleの決定木で、どうしても普通にRubyを使っては高速化できない箇所があり、そこをExtensionで実装した。これをバージョン0.9.0としてリリースした。 rumale | RubyGems.org | your community gem host 決定木では、特徴軸ごとに、不純度にもと…