Ruby
はじめに 簡単なNumo::NArrayを利用した拡張ライブラリを作った。拡張ライブリの作成については、公式のドキュメントが充実しているので、挑戦してみた。 Gems with Extensions - RubyGems Guides ruby/extension.ja.rdoc at trunk · ruby/ruby · GitHub num…
はじめに Kaggleのチュートリアルコンペぐらいなら、Rubyでもイケるんじゃないかと思って、データ分析ライブラリのDaruと機械学習ライブラリのRumaleでTitanicコンペに挑戦してみた。 Titanic: Machine Learning from Disaster | Kaggle DaruはPythonでいう…
はじめに Rumaleに改名する際に以下のページをまずみた。Googleで「gem rename」で上位に来たので。 stackoverflow.com ざっと読んで、旧名のGemのリポジトリとかREADMEとかに説明をつけて、新しいの出せば良いんだな〜と思った。FactoryBot(旧FactoryGirl…
はじめに SVMKitに、ハイパーパラメータの探索手法として定番のGrid Searchを実装した。Scikit-learnのGrid Searchと同様に、交差検定をベースにした探索を行う。与えられたハイパーパラメータの値のすべての組み合わせで、交差検定を行い、テストでのスコア…
はじめに Ruby 1.9以前のHashでキーワード引数を再現してたような感じで、Ruby 2.0以降のキーワード引数でも、引数の名前とその値の一覧をHashで得たいときがある。 コード def foo(a: 'yes', b: 'no') keywd_args = method(__callee__).parameters.map { |_…
はじめに SVMKitで、一通りベーシックな機械学習アルゴリズムの実装を終えたので、しばらく便利機能の追加を予定している。バージョン0.7.2ではPipelineを実装した。Pipelineを使うことで、正規化して主成分分析してSVMで分類といった連結処理を定義できる。…
はじめに Red Datasetsは、IrisやMNISTといった公開されているデータセットを、Rubyで簡単に扱えるようにするプロジェクトである(Pythonでいえば、scikit-learnのsklearn.datasetsや、Kerasのkeras.datasetsに近い)。本記事では、Red DatasetsでIrisデータ…
はじめに Numo::Linalgは、Rubyで行列のノルムの計算や固有値分解などの線形代数計算を行うライブラリである。Pythonのnumpy.linalgやscipy.linalgに相当する。Numo::Linalgのバージョン0.1.3から、固有値分解で求める固有値・固有ベクトルの範囲を指定でき…
久しぶりにLibSVMLoaderをアップデートした。 $ gem install libsvmloader これまでNMatrixで特徴ベクトルとラベルを表現していたが、これをRubyのArrayに変えた。Arrayにすることで、NMatrixだけでなくNumo::NArrayでも使用できる。 require 'libsvmloader'…
svmkit | RubyGems.org | your community gem host クラスタリングはK-MeansとDBSCAN、行列分解は主成分分析(Principal Component Analysis, PCA)と非負値行列因子分解(Non-negative Matrix Factorization, NMF)を実装した。K-Meansは、K-Means++による…
svmkit | RubyGems.org | your community gem host SVMKitの0.3系では、回帰手法の実装を目標としていたが、代表的な手法を実装して、だいたい終えた(※カーネルSVMによる回帰の実装を見送った。SVMKitではStochastic Gradient Descent, SGDでの実装を基本と…
はじめに これまでSVMKitでは、分類とそれに関連する手法の実装を進めていたが、回帰の実装をはじめた。手始めに線形サポートベクター回帰とk-近傍法による回帰を実装した。 svmkit | RubyGems.org | your community gem host これにあわせて、交差検定を回…
はじめに Rubyで動く近似最近傍探索(Approximate Nearest Neighbor search, ANN)ライブラリが欲しくなって作成した。 hanny | RubyGems.org | your community gem host FLANNのRubyバインディングがあり検討したが、FLANN自体の開発が止まっているので、勉…
はじめに SVMKitのSupport Vector Machine(SVM)系の分類器であるSVCとKernelSVCに、ロジスティック回帰と同様に事後確率を推定するpredict_probaメソッドを追加した。 svmkit | RubyGems.org | your community gem host これにあわせて、Log-Lossを評価す…
はじめに SVMKitのSVMKit::LinearModel::LogisticRegressionの勾配計算に間違いがあったので修正して0.2.8としてリリースした。 svmkit | RubyGems.org | your community gem host 0.2.8では、与えられたパラメータのチェックなどの細かな部分を補うことを予…
はじめに SVMKitに決定木(Decision Tree)とランダム森(Random Forest)による分類器を実装し、バージョンを0.2.6とした。 svmkit | RubyGems.org | your community gem host 決定木は、CARTをベースにした二分木によるものを実装した。Scikit-learnになら…
はじめに Ruby 25周年の記念日に何かSVMKitをバージョンアップしたくて準備を進めていた。無事に単純ベイズ(Naive Bayes, NB)分類器を追加した状態でバージョンアップできた。Scikit-learnにならってGaussian、Multinomial、Bernoulliの各種分布のアルゴリ…
はじめに SVMKitの開発は、何かしら毎月バージョンアップしようという思いで進めており、無事に2月も0.2.4をリリースすることができた。 svmkit | RubyGems.org | your community gem host SVMKitにFactorization Machine(FM)による分類器を追加した。FMは…
はじめに SVMKitで「LIBSVM相当のことができるように」と思い、K分割交差検証(K-fold cross validation)を追加した。一度、cross validationするためのデータを分割するクラスを追加した段階で「これでminimum viable productかな」と思って、0.2.2として…
はじめに Numo::Linalgは、numpy.linalgに相当するもので、QR分解や特異値分解を行うメソッドを提供する。これら線形代数の機能は、いわゆるBLAS/LAPACK系のバックエンドライブラリの関数を呼び出すことで実現している。このバックエンドライブラリは、まだ…
SVMKitでは、線形代数ライブラリにNMatrixを使用していたが、パフォーマンスと将来性からNumo::NArrayに移行した。Numo::NArrayのメソッド等は、NMatrixともNumpyとも違うが、specを用意しておいて淡々と作業した。思い切った移行だけど、ユーザーも少ないの…
はじめに rubocopするのを忘れがちで、vimで(自動で)できてくれると嬉しいので、syntasticを入れることにした。使ってるvimのバージョンは8.0.1200なので、nativeなpackage管理を使ってインストールすることにした。 インストール パッケージを入れるため…
はじめに Pure Rubyな機械学習ライブラリSVMKitにカーネルSVMを追加しました。カーネルSVMは、Pure Rubyでは速度的にツラいものがあるかな?と思っていたが、機械学習ライブラリとしては実装されているべきものなので追加した。※それ以前にLogistic Regressi…
はじめに RubyにPythonのscikit-learnに相当するライブラリがない様なので、作ってみることにした。ひとまず、Support Vector Machine(SVM)による多値分類が実装できたので、gemとして公開することにした。今後、他の機械学習アルゴリズムも追加していく。…
はじめに RubyのLIBSVMバインドであるrb-libsvmと、libsvm形式のデータセットを読み書きするlibsvmloaderで、カーネル非線形SVMで分類する例です。カーネル非線形と明記するのは、libsvmの姉妹品であるliblinearが線形SVMなため。 準備 まずLIBSVMそのものを…
タイトルのとおりです。LibSVMLoader(ver. 0.1.0)は、ゼロベクトルが含まれているとコケることがわかりました。修正してアップしておきました。申し訳ありません。 libsvmloader | RubyGems.org | your community gem host specまわりの修正を除いた本体の…
RandSVDを作ったので、特異値分解(固有値分解)をベースにした機械学習アルゴリズムを実装していこうと思っている。 まずは、主成分分析によるMNISTデータセットの可視化を行った。 ※特異値分解と主成分分析の関係は、そのまま「主成分分析 特異値分解」で…
※Truncated SVD (Singular Value Decomposition) って和訳ありますか?勝手に打ち切り特異値分解としました。 はじめに 機械学習アルゴリズムで特異値分解(もしくは固有値分解)をするときは、だいたい、大きい(もしくは小さい)方からk個だけ特異値/特異…
はじめに LIBSVM形式のデータセットファイルを読み込み、データとラベルをNMatrixで返すライブラリが欲しかったので、作成してgemパッケージを公開した。 libsvmloader | RubyGems.org | your community gem host Pythonのsvmlight-loaderにお世話になってい…
はじめに Liblinearは、線形SVMの実装として有名なライブラリ/ツールである。 これをRubyから叩くライブラリとして、Liblinear-Rubyがある。 Rubyの配列で表現された、特徴ベクトルとラベルをわたすだけで、線形SVMの訓練・テストが行える。 これで線形SVMに…