データサイエンスや機械学習分野においては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