はじめに 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をマイナー(タイニー?)バージョンアップした。RandSVD(というよりも乱択アルゴリズムの特異値分解)では、ランダム行列との積により行列を小さくする処理を含んでいる。なので、乱数のシードを固定できるようにしたほうが親切だと考えた。 ※ NMat…
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に…
はてなブログProにすれば勝手に広告が消えると思ってたら、設定が必要だった。だいたい3ステップぐらい必要だった。広告を消したのは「広告って読み込み重いから鬱陶しいよね」という軽い気持ちから。 設定から、詳細設定タブを選択する。 広告を非表示で、…
はじめに Rubyで線形代数・機械学習アルゴリズムの実装を行う場合、SciRubyのNMatrixが最適だろう。 このNMatrixで、 RやPythonのNumpyと同様に、後ろで叩いているBLAS/LAPACKを、OpenBLASやIntel MKLに変えることで、高速化することを考えた。 しかし、Mac…
はじめに マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第6章を勉強した。 ビジネス活用事例で学ぶ データサイ…
はじめに マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第5章を勉強した。 ビジネス活用事例で学ぶ データサイ…
はじめに マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第4章を勉強した。 ビジネス活用事例で学ぶ データサイ…
はじめに マーケティング寄りのデータ分析の知識を補うため、勉強を開始した。「チュートリアル的な事例ベースの教材がないかな〜」と色々と探していたところ、ぴったりの良い本が見つかった。第1章と第2章には、データ分析がどういう仕事か書かれている。…
mrknさんが開発しているPyCallを使うと、RubyからPythonオブジェクトを操作できる。 Rubyから、Pythonの機械学習・統計分析のツールを利用することを目的としており、 ネット上にもnumpyやscikit-learnを実行する例があがっている。 Rubyist Magazine - PyCa…
2017/8/13追記: LSHForestはパフォーマンスがよろしくないため、0.19からDEPRECATEDとなった。0.21から削除されるようなので、使用しないほうが良い。 scikit-learnでは、ver. 0.16から近似最近傍探索手法のLSHForestが実装されている。LSHForestは、ハッシ…
近似最近傍探索とは近似的に近いものを検索してくる技術で、普通に距離を計算して並べて近くにあるものを探すより速い。代表的なライブラリにFLANN(Fast Library for Approximate Nearest Neighbors)があり、これのPythonバインディングがpyflannになる。F…
scikit-learnで学習した分類器を保存する場合、joblib.dumpを使用するが、これだと、大量のnpyファイルが作られる。この場合、joblib.dumpのcompressを使うとよい。まず、例えば以下のような、train.pyがあるとする。 #!/usr/bin/env python # -*- coding: u…
Apache2からNginxへの移行を進めていて、UserDir的なことをしようと思ったら、mod_userdirを有効にする感じではなかった。Debian GNU/Linuxであれば、/etc/nginx/sites-available/defaultを編集するだけでよい。PHPも動くようにしたいので、ついでにそれも設…
Nginxの設定ファイルの接しやすさに感動して、Apache2からNginxに完全移行することにした。 WebツールやデモシステムをPHPで作っていたので、とりあえず、PHPが動くようにする。 作業自体は大したことなくて、PHPのFastCGI実装のPHP-FPM(FastCGI Process Ma…
Kerasで作った画像認識プログラムを、Webサービスの形にしてみようと思い色々ためした。 画像認識処理をAPIの形で立ち上げ、フロントから叩くことにした。 複雑で大規模な構造のAPIにはならないので、フレームワークにはFlaskを選択した。 はじめ、Apache2+m…
Debian GNU/LinuxにApache2を入れてWebサーバーを構築している。Nginxを試してみたいので、共存させることを試みた。 まずは、インストールする。ここで、先にApache2を止めておかないと、Nginxのインストールがコケる。 $ sudo systemctl stop apache2.serv…
Debianのパッケージとは別で、独自にビルドしたPythonを、/usr/localに置いている。 この状態で、uwsgiをpipでインストールしようとしたら、ビルドで失敗した。 $ sudo /usr/local/bin/pip install uwsgi ... *** uWSGI linking *** ... /tmp/ccDFvj9Y.ltran…