An easy-to-use but powerful and fast machine learning library for Java

View project onGitHub


Recent News

11th July, 2015: 0.8.0 released

The core functionality for building trees has been broken out of the former TreeBuilder into more generic components that can be used to build other kinds of trees apart from decision trees. Unit tests have also been added for these components. Additionally, tree build time appears to have improved by about 15%, and memory usage is decreased. Mahout / Hadoop are also no longer dependencies, making the jar lighter weight.

2nd March, 2015: 0.6.0 released

Major API redesign and refactor.

Ask questions and contribute

Come say "Hi!" on our Discussion Forum, or improve QuickML and submit a pull request through GitHub. Want to help? Take a look at our open issues and see if there is anything you can tackle, fork our code, then submit a pull request.

Coverity Scan Build Status


Read the current release's JavaDocs here (courtesy of JitPack.io).

Documentation of QuickML is currently lagging significantly behind functionality, but the API is fairly well defined and should be mostly self-explanatory using the examples below as a starting point, just start poking around the source code, particularly the unit tests. You can also improve this site by editing this file.

Please also note that the QuickML API remains subject to change, and will continue to do so until 1.0 (although we will only make such changes if we're convinced they're necessary to make the API as good as it can be).

How to use


Add the following repository to your Maven pom.xml file:

Add the following dependency to your Maven pom.xml file:
  <version>Find latest release here</version>

Build a simple predictive model

Here we train a random forest on the well-known Fisher Iris dataset, which is included with QuickML for your convenience. We then generate a prediction for a particular set of input attributes:

import quickml.data.*;
import quickml.supervised.classifier.randomForest.*;
// ...
List<ClassifierInstance> irisDataset = PredictiveAccuracyTests.loadIrisDataset();
final RandomDecisionForest randomForest =new RandomDecisionForestBuilder<>(new DecisionTreeBuilder<>()
.scorerFactory(new GRPenalizedGiniImpurityScorerFactory(1.0))
.attributeIgnoringStrategy(new IgnoreAttributesWithConstantProbability(0.2)))
System.out.println("Prediction: " + randomForest.getProbability(attributes, "Iris-virginica"));


QuickML was initially created by Ian Clarke. Since early 2014, it has been co-architected by Ian and Alex Hawk, and has benefited from significant contributions from Chris Reeves and Michael Kelly of OneSpot.