Scala is a powerful language that has functional programming capabilities. As it runs in the Java Virtual Machine, it is very easy to use MOA objects inside Scala.
Let’s see an example, using the Scala Interactive Interpreter. First we need to start it, telling where the MOA library is:
scala -cp moa.jar Welcome to Scala version 2.9.2. Type in expressions to have them evaluated. Type :help for more information.
Let’s run a very simple experiment: using a decision tree (Hoeffding Tree) with data generated from an artificial stream generator (RandomRBFGenerator).
We should start importing the classes that we need, and defining the stream and the learner.
scala> import moa.classifiers.trees.HoeffdingTree import moa.classifiers.trees.HoeffdingTree scala> import moa.streams.generators.RandomRBFGenerator import moa.streams.generators.RandomRBFGenerator scala> val learner = new HoeffdingTree(); learner: moa.classifiers.trees.HoeffdingTree = Model type: moa.classifiers.trees.HoeffdingTree model training instances = 0 model serialized size (bytes) = -1 tree size (nodes) = 0 tree size (leaves) = 0 active learning leaves = 0 tree depth = 0 active leaf byte size estimate = 0 inactive leaf byte size estimate = 0 byte size estimate overhead = 0 Model description: Model has not been trained. scala> val stream = new RandomRBFGenerator(); stream: moa.streams.generators.RandomRBFGenerator =
Now, we need to initialize the stream and the classifier:
scala> stream.prepareForUse() scala> learner.setModelContext(stream.getHeader()) scala> learner.prepareForUse()
Now, let’s load an instance from the stream, and use it to train the decision tree:
scala> import weka.core.Instance import weka.core.Instance scala> val instance = stream.nextInstance() instance: weka.core.Instance = 0.210372,1.009586,0.0919,0.272071, 0.450117,0.226098,0.212286,0.37267,0.583146,0.297007,class2 scala> learner.trainOnInstance(instance)
And finally, let’s use it to do a prediction.
scala> learner.getVotesForInstance(instance) res9: Array[Double] = Array(0.0, 0.0) scala> learner.correctlyClassifies(instance) res7: Boolean = false
As shown in this example, it is very easy to use the Scala interpreter to run MOA interactively.