はじめに

今現在、機械学習・Scalaの勉強がてらに機械学習 はじめようで解説されているものをScalaで実装するということを行なっています。元の記事ではアルゴリズムをPythonで実装しており、線形代数のようなものを扱うためのライブラリであるnumpyやグラフ描画用のmatplotlibを利用しています。

私はScalaで実装するのですが、PythonにnumpyやmatplotlibがあるようにScalaにも同じようなものが存在していて、numpyはbreeze、matplotlibはbreeze-vizといったライブラリと置き換えることができます(たぶん)

breezeとは

breezeとはScalaNLPというscalaで自然言語処理・機械学習などを扱うためのプロジェクトで開発されている機械学習・数的計算用のライブラリです。ScalaNLP自体はbreeze以外にもEpicやPuckというようなものが提供されています。Epicはよくわからないですが、PuckはBerkeley NLP Groupで開発されているBerkeleyParserをGPU上で動作させるために実装したものみたいです。 breeze-vizはbreezeを構成するモジュールの一つでグラフ描画用のライブラリになっています。

今回やったこと

breezeが用意しているQuickStartのうちのbreeze-vizの部分を試したというものです。

環境

  • MacOSX
    • 10.9.5
  • Scala
    • 2.11.2
  • sbt
    • 0.13.6

ソースコード自体はQuickStartとまったく一緒ですが、一応乗っけておきます。関数の使い方などどこかmatplotlibを彷彿とさせます(公式にはmatlab likeと書いているのでmatlabもこんな感じなんですかね)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import breeze.linalg._
import breeze.plot._

object Main extends App {
  val f = Figure()
  val p = f.subplot(0)
  val x = linspace(0.0, 1.0)

  p += plot(x ,x :^ 2.0)
  p += plot(x ,x :^ 3.0, '.')

  p.xlabel = "x axis"
  p.ylabel = "y axis"

  f.saveas("lines.png")
}

ここで私が何に詰まったかというと、sbtでbreezeを導入したにも関わらず、breeze.plotが存在しないという事態でした。breeze-viz自体はbreezeとは別のリポジトリで開発されていますが、最近、大本のbreezeのリポジトリに移動したという記述があったため、breezeのみでやったのですが動かなかったということです。

解決方法としては単純でbuild.sbtのlibraryDependenciesにbreeze-vizを記述してsbtを動かすだけです。簡単ですね。

まとめ

breezeもbreeze-vizもメジャーリリースされていないということもあって、いざ使ってみるとちょいちょいバグと遭遇します。ですが、使ってみるとpythonでnumpyやmatplotlibを使う感覚と使えるので興味のある方は使ってみるといいんじゃないでしょうか。