MIA勉強会: ch02 RecommenderIntro

最初のプログラム例、2.2.2 Creating a recommender の RecommenderIntro クラスを動かしてみます。最近はなんでも Scala で書きたいので Scala で書き直します。

まず sbt の設定。project/build.scala

ローカルリポジトリにインストールした mahout を参照できるようにリポジトリを定義。

val localResolver = "Local Maven Repository" at "file:///" + System.getProperty("user.home") + "/.m2/repository/"

次、mahout 関連の依存関係を定義。

val mahoutVersion = "0.6-SNAPSHOT"

val mahoutDependencies = Seq(
  "org.apache.mahout" % "mahout-core" % mahoutVersion intransitive,
  "org.apache.mahout" % "mahout-math" % mahoutVersion,
  "com.google.guava" % "guava" % "r09"
)

mahout-core -> parent -> uncommons-maths -> jfreechart とたどって jfreechart がないよって怒られたので mahout-core を intrasitive (依存関係をたどらない) にして、かわりに必要な依存関係を明示的に定義しています。(実行して NoClassDefFoundError を消していった)

parent の pom.xml でちゃんと exclude 指定されていますが、sbt が対応していないのかもしれません。

プロジェクトを定義。

lazy val root = Project("mia-study", file("."),
  settings = buildSettings ++ Seq(
    version := "0.1",
    resolvers += localResolver,
    libraryDependencies := mahoutDependencies ++ loggingDependencies ++ testDependencies
  )
)

次、プログラム。

src/main/scala/ch02/intro.scala

object RecommenderIntro extends App {

  val model = new FileDataModel(new File("../MIA/src/main/java/mia/recommender/ch02/intro.csv"))
  val similarity = new PearsonCorrelationSimilarity(model)
  val neighborhood = new NearestNUserNeighborhood(2, similarity, model)
  val recommender = new GenericUserBasedRecommender(model, neighborhood, similarity)
  val recommendations = recommender.recommend(1, 1)

  recommendations.asScala.foreach(println _)
}

Java のをそのまま移しました。
FileDataModel に指定しているところにデータファイルがあることを想定しています。これは

git clone https://github.com/tdunning/MiA.git

でクローンしておきます。

さて実行。

% sbt run
09:18:51.235 [run-main] INFO  o.a.m.c.t.i.model.file.FileDataModel - Creating FileDataModel for file ../MIA/src/main/java/mia/recommender/ch02/intro.csv
09:18:51.268 [run-main] INFO  o.a.m.c.t.i.model.file.FileDataModel - Reading file info...
09:18:51.270 [run-main] INFO  o.a.m.c.t.i.model.file.FileDataModel - Read lines: 21
09:18:51.280 [run-main] INFO  o.a.m.c.t.i.model.GenericDataModel - Processed 5 users
09:18:51.289 [run-main] DEBUG o.a.m.c.t.i.r.GenericUserBasedRecommender - Recommending items for user ID '1'
09:18:51.296 [run-main] DEBUG o.a.m.c.t.i.r.GenericUserBasedRecommender - Recommendations are: [RecommendedItem[item:104, value:4.257081]]
RecommendedItem[item:104, value:4.257081]
[success] Total time: 1 s, completed 2011/11/09 9:18:51

よしできた。

今回のソースコードhttps://github.com/akr4/mia-study にあります。