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 にあります。