String pmmlSource = // ... path to your PMML file KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( ResourceFactory.newClassPathResource( pmmlSource ) .setResourceType( ResourceType.PMML ) ); ks.newKieBuilder( kfs ).buildAll().getResults(); KieSession kSession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ) .newKieSession();
Let’s imagine that you have a predictive model called “MockColdPredictor”. It is used to predict the probability of catching a cold given the environmental conditions. It has one input called “temperature” and one output “coldProbability”. The most basic way to invoke the model is to insert the input value(s) using a generated entry-point:
ksession.getEntryPoint( "in_Temperature" ) // "in_" + input name (capitalized) .insert( 32.0 ); // the actual value ksession.fireAllRules();
The result will be generated and can be extracted, e.g., using a drools query:
QueryResults qrs = kSession.getQueryResults( "ColdProbability", // the name of the output (capitalized) "MockColdPredictor", // the name of the model Variable.v ); // the Variable to retrieve the result Double probability = (Double) qrs.iterator().next().get( "$result" );
In the future posts, we’ll discuss in detail how PMML defines models, input and output fields. Based on this, we’ll see how to integrate models and which options are available.
At the moment, these model types are supported:
- Clustering
- Simple Regression
- Naive Bayes
- Neural Networks
- Scorecards
- Decision Trees
- Support Vector Machines
— Davide
Acknowledgments :
Thanks to the University of Bologna (Bologna, Italy), the KMR2 Project and Arizona State University (Scottsdale, AZ) which, over time, have supported this project.
Publications (more to follow) :
– D. Sottara, P. Mello, C. Sartori, and E. Fry. 2011. Enhancing a Production Rule Engine with Predictive Models using PMML. In Proceedings of the 2011 workshop on Predictive markup language modeling (PMML ’11). ACM, New York, NY, USA, 39-47. DOI=10.1145/2023598.2023604 http://doi.acm.org/10.1145/2023598.2023604