Lurn - Ruby用データサイエンス、機械学習をおこなうなら
データサイエンスや機械学習分野においてはPythonしかないといった雰囲気があります。確かにPythonにはデータサイエンス向けのライブラリが多数揃っており、はじめる敷居は低いでしょう。 しかしそんな中にあってもRubyでデータサイエンスをやりたいという方は多いはずです。そこで使ってみたいのがLurnです。
Lurnの使い方
基本的な使い方です。こちらはテキスト分類をおこなっている例です。 programming is fun
という文字がコンピュータかスポーツのどちらに分類されるのかを判定しています。
require 'lurn'
documents = [
'ruby is a great programming language',
'the giants recently won the world series',
'java is a compiled programming language',
'the jets are a football team'
]
labels = ['computers','sports','computers','sports']
vectorizer = Lurn::Text::BernoulliVectorizer.new
vectorizer.fit(documents)
vectors = vectorizer.transform(documents)
model = Lurn::NaiveBayes::BernoulliNaiveBayes.new
model.fit(vectors, labels)
new_vectors = vectorizer.transform(['programming is fun'])
probabilities = model.predict_probabilities(new_vectors.first)
# => [0.9715681919147049, 0.028431808085295614]
model.max_class(new_vectors.first)
日本語の場合、一旦分かち書きをおこなわなければなりません(この手の技術によくありがちですね)。名詞、形容詞だけ取り出して試すとちゃんと判定されます。
require 'lurn'
documents = [
'Ruby すごい プログラミング 言語',
'ジャイアンツ ワールドシリーズ 優勝',
'Java コンパイル プログラミング 言語',
'JETS フットボール チーム'
]
labels = ['コンピュータ','スポーツ','コンピュータ','スポーツ']
vectorizer = Lurn::Text::BernoulliVectorizer.new
vectorizer.fit(documents)
vectors = vectorizer.transform(documents)
model = Lurn::NaiveBayes::BernoulliNaiveBayes.new
model.fit(vectors, labels)
new_vectors = vectorizer.transform(['プログラミング 楽しい'])
probabilities = model.predict_probabilities(new_vectors.first)
# => [0.6923076923076918, 0.3076923076923079]
model.max_class(new_vectors.first)
# => "コンピュータ"
デモとしてはテキスト分類ですが、APIはscikit-learnに合わせて設計されています。scikit-learnは分類や回帰、クラスタリングができるライブラリなので、同様の操作をRubyで行いたい時に使えるでしょう。
LurnはRuby製のオープンソース・ソフトウェア(MIT License)です。
dansbits/lurn: A ruby gem for elegant data science and machine learning