洋食の日記

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

データ分析

SVMKitにPipeline機能を追加した

はじめに SVMKitで、一通りベーシックな機械学習アルゴリズムの実装を終えたので、しばらく便利機能の追加を予定している。バージョン0.7.2ではPipelineを実装した。Pipelineを使うことで、正規化して主成分分析してSVMで分類といった連結処理を定義できる。…

Red DatasetsとSVMKitを使ってIrisデータセットでの線形SVMの分類精度を確認する

はじめに Red Datasetsは、IrisやMNISTといった公開されているデータセットを、Rubyで簡単に扱えるようにするプロジェクトである(Pythonでいえば、scikit-learnのsklearn.datasetsや、Kerasのkeras.datasetsに近い)。本記事では、Red DatasetsでIrisデータ…

Numo::Linalgで特異値の数を指定できる特異値分解を実装する

はじめに Numo::Linalgは、Rubyで行列のノルムの計算や固有値分解などの線形代数計算を行うライブラリである。Pythonのnumpy.linalgやscipy.linalgに相当する。Numo::Linalgのバージョン0.1.3から、固有値分解で求める固有値・固有ベクトルの範囲を指定でき…

RubyでLIBSVM形式のファイルを扱うLibSVMLoaderをバージョンアップした

久しぶりにLibSVMLoaderをアップデートした。 $ gem install libsvmloader これまでNMatrixで特徴ベクトルとラベルを表現していたが、これをRubyのArrayに変えた。Arrayにすることで、NMatrixだけでなくNumo::NArrayでも使用できる。 require 'libsvmloader'…

SVMKitにクラスタリングと行列分解を実装した

svmkit | RubyGems.org | your community gem host クラスタリングはK-MeansとDBSCAN、行列分解は主成分分析(Principal Component Analysis, PCA)と非負値行列因子分解(Non-negative Matrix Factorization, NMF)を実装した。K-Meansは、K-Means++による…

SVMKitでの回帰の実装をだいたい終えました

svmkit | RubyGems.org | your community gem host SVMKitの0.3系では、回帰手法の実装を目標としていたが、代表的な手法を実装して、だいたい終えた(※カーネルSVMによる回帰の実装を見送った。SVMKitではStochastic Gradient Descent, SGDでの実装を基本と…

SVMKitで回帰の実装をはじめました

はじめに これまでSVMKitでは、分類とそれに関連する手法の実装を進めていたが、回帰の実装をはじめた。手始めに線形サポートベクター回帰とk-近傍法による回帰を実装した。 svmkit | RubyGems.org | your community gem host これにあわせて、交差検定を回…

SVMKitのSVM系分類器に事後確率を推定するメソッドを追加した

はじめに SVMKitのSupport Vector Machine(SVM)系の分類器であるSVCとKernelSVCに、ロジスティック回帰と同様に事後確率を推定するpredict_probaメソッドを追加した。 svmkit | RubyGems.org | your community gem host これにあわせて、Log-Lossを評価す…

SVMKitのLogistic Regressionの勾配計算に間違いがあったので修正した

はじめに SVMKitのSVMKit::LinearModel::LogisticRegressionの勾配計算に間違いがあったので修正して0.2.8としてリリースした。 svmkit | RubyGems.org | your community gem host 0.2.8では、与えられたパラメータのチェックなどの細かな部分を補うことを予…

SVMKitの二値分類器にOne-vs-the-restを内包した

はじめに SVMKitのSVMKit::LinearModel::SVCなどの二値分類器で、多値のラベルを与えれた場合に、自動的にOne-vs-the-rest法で多値分類器化するように修正を加えた。 svmkit | RubyGems.org | your community gem host これにより、SVMKit::Multiclass::OneV…

SVMKitに決定木とランダム森の分類器を追加した

はじめに SVMKitに決定木(Decision Tree)とランダム森(Random Forest)による分類器を実装し、バージョンを0.2.6とした。 svmkit | RubyGems.org | your community gem host 決定木は、CARTをベースにした二分木によるものを実装した。Scikit-learnになら…

SVMKitに単純ベイズ分類器を追加した

はじめに Ruby 25周年の記念日に何かSVMKitをバージョンアップしたくて準備を進めていた。無事に単純ベイズ(Naive Bayes, NB)分類器を追加した状態でバージョンアップできた。Scikit-learnにならってGaussian、Multinomial、Bernoulliの各種分布のアルゴリ…

SVMKitにFactorization Machineによる分類器を追加した

はじめに SVMKitの開発は、何かしら毎月バージョンアップしようという思いで進めており、無事に2月も0.2.4をリリースすることができた。 svmkit | RubyGems.org | your community gem host SVMKitにFactorization Machine(FM)による分類器を追加した。FMは…

SVMKitで使用する線形代数ライブラリをNumo::NArrayに移行した

SVMKitでは、線形代数ライブラリにNMatrixを使用していたが、パフォーマンスと将来性からNumo::NArrayに移行した。Numo::NArrayのメソッド等は、NMatrixともNumpyとも違うが、specを用意しておいて淡々と作業した。思い切った移行だけど、ユーザーも少ないの…

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

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

Pure RubyなSupport Vector Machineのgemを公開した

はじめに RubyにPythonのscikit-learnに相当するライブラリがない様なので、作ってみることにした。ひとまず、Support Vector Machine(SVM)による多値分類が実装できたので、gemとして公開することにした。今後、他の機械学習アルゴリズムも追加していく。…

Pandasで「ビジネス活用事例で学ぶデータサイエンス入門」を勉強する(第6章)

はじめに マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第6章を勉強した。 ビジネス活用事例で学ぶ データサイ…

Pandasで「ビジネス活用事例で学ぶデータサイエンス入門」を勉強する(第5章)

はじめに マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第5章を勉強した。 ビジネス活用事例で学ぶ データサイ…

Pandasで「ビジネス活用事例で学ぶデータサイエンス入門」を勉強する(第4章)

はじめに マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第4章を勉強した。 ビジネス活用事例で学ぶ データサイ…

Pandasで「ビジネス活用事例で学ぶデータサイエンス入門」を勉強する(第3章)

はじめに マーケティング寄りのデータ分析の知識を補うため、勉強を開始した。「チュートリアル的な事例ベースの教材がないかな〜」と色々と探していたところ、ぴったりの良い本が見つかった。第1章と第2章には、データ分析がどういう仕事か書かれている。…