洋食の日記

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

NMatrix

機械学習ライブラリSVMKitにカーネルSVMを追加した

はじめに Pure Rubyな機械学習ライブラリSVMKitにカーネルSVMを追加しました。カーネルSVMは、Pure Rubyでは速度的にツラいものがあるかな?と思っていたが、機械学習ライブラリとしては実装されているべきものなので追加した。※それ以前にLogistic Regressi…

LibSVMLoaderのゼロベクトルが読み込めないバグを修正した

タイトルのとおりです。LibSVMLoader(ver. 0.1.0)は、ゼロベクトルが含まれているとコケることがわかりました。修正してアップしておきました。申し訳ありません。 libsvmloader | RubyGems.org | your community gem host specまわりの修正を除いた本体の…

RandSVDを使った主成分分析によるMNISTデータセットの可視化

RandSVDを作ったので、特異値分解(固有値分解)をベースにした機械学習アルゴリズムを実装していこうと思っている。 まずは、主成分分析によるMNISTデータセットの可視化を行った。 ※特異値分解と主成分分析の関係は、そのまま「主成分分析 特異値分解」で…

乱択アルゴリズムな打ち切り特異値分解のgemを公開した

※Truncated SVD (Singular Value Decomposition) って和訳ありますか?勝手に打ち切り特異値分解としました。 はじめに 機械学習アルゴリズムで特異値分解(もしくは固有値分解)をするときは、だいたい、大きい(もしくは小さい)方からk個だけ特異値/特異…

LIBSVM/SVMLight形式のデータの読み込み/書き込みをするgemを公開した

はじめに LIBSVM形式のデータセットファイルを読み込み、データとラベルをNMatrixで返すライブラリが欲しかったので、作成してgemパッケージを公開した。 libsvmloader | RubyGems.org | your community gem host Pythonのsvmlight-loaderにお世話になってい…

Liblinear-Rubyによる線形SVMを試すついでにカーネル近似も試した

はじめに Liblinearは、線形SVMの実装として有名なライブラリ/ツールである。 これをRubyから叩くライブラリとして、Liblinear-Rubyがある。 Rubyの配列で表現された、特徴ベクトルとラベルをわたすだけで、線形SVMの訓練・テストが行える。 これで線形SVMに…

MacではRubyのNMatrixでOpenBLASを使わなくてもLAPACKで十分に速かった

はじめに Rubyで線形代数・機械学習アルゴリズムの実装を行う場合、SciRubyのNMatrixが最適だろう。 このNMatrixで、 RやPythonのNumpyと同様に、後ろで叩いているBLAS/LAPACKを、OpenBLASやIntel MKLに変えることで、高速化することを考えた。 しかし、Mac…