Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel3

...

Info

You can stop the WSO2 ML server after generating the required model, since this process of using the model in a Java client does not require a running ML server.

Building the sample

To build this sample, a Java project should be created as follows.

  1. Create a Maven project.
  2. Include the following compile time dependencies in the pom.xml file of the project.

    Code Block
    languagexml
    <dependency>
    	<groupId>org.wso2.carbon.ml</groupId>
    	<artifactId>org.wso2.carbon.ml.core</artifactId>
    	<version>1.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    	<groupId>org.wso2.carbon.ml</groupId>
    	<artifactId>org.wso2.carbon.ml.commons</artifactId>
    	<version>1.0.1-SNAPSHOT</version>
    </dependency>
    Runtime dependencies 
  3. Include the following runtime dependencies also in the pom.xml file of the project.

    Code Block
    languagexml
    <!--Dependencies required for MLModel deserialization-->
    <dependency>
    	<groupId>org.wso2.orbit.org.apache.spark</groupId>
    	<artifactId>spark-core_2.10</artifactId>
    	<version>1.4.1.wso2v1</version>
    </dependency>
    <dependency>
    	<groupId>org.wso2.orbit.org.apache.spark</groupId>
    	<artifactId>spark-mllib_2.10</artifactId>
    	<version>1.4.1.wso2v1</version>
    </dependency>
    <dependency>
    	<groupId>org.scala-lang</groupId>
    	<artifactId>scala-library</artifactId>
    	<version>2.10.4</version>
    </dependency>
    <dependency>
    	<groupId>org.wso2.orbit.org.scalanlp</groupId>
    	<artifactId>breeze_2.10</artifactId>
    	<version>0.11.1.wso2v1</version>
    </dependency>
    <dependency>
    	<groupId>org.wso2.orbit.github.fommil.netlib</groupId>
    	<artifactId>core</artifactId>
    	<version>1.1.2.wso2v1</version>
    </dependency>
    <!--Dependencies required for predictions-->
    <dependency>
    	<groupId>org.wso2.orbit.sourceforge.f2j</groupId>
    	<artifactId>arpack_combined</artifactId>
    	<version>0.1.wso2v1</version>
    </dependency>
  4. The downloaded model contains a serialized MLModel object. Deserialize the MLModel as follows.

    Code Block
    languagejava
    private MLModel deserializeMLModel() throws IOException, ClassNotFoundException, URISyntaxException {
      // Path to downloaded-ml-model
      String pathToDownloadedModel = “/tmp/downloaded-ml-model”;
      FileInputStream fileInputStream = new FileInputStream(pathToDownloadedModel);
      ObjectInputStream in = new ObjectInputStream(fileInputStream);
      MLModel mlModel = (MLModel) in.readObject();
    
      logger.info("Algorithm Type : " + mlModel.getAlgorithmClass());
      logger.info("Algorithm Name : " + mlModel.getAlgorithmName());
      logger.info("Response Variable : " + mlModel.getResponseVariable());
      logger.info("Features : " + mlModel.getFeatures());
      return mlModel;
    }
  5. Use org.wso2.carbon.ml.core.impl.Predictor to make predictions using the downloaded ML Model. Predictor accepts a list of string arrays as feature values. The feature values should be in the order of the feature index inside the array as shown below.

    Code Block
    languagejava
    MLModelUsageSample modelUsageSample = new MLModelUsageSample();
    // Deserialize
    MLModel mlModel = modelUsageSample.deserializeMLModel();
    // Predict
    String[] featureValueArray1 = new String[] { "6", "148", "72", "35", "0", "33.6", "0.627", "50" };
    String[] featureValueArray2 = new String[] { "0", "101", "80", "40", "0", "26", "0.5", "33" };
    ArrayList<String[]> list = new ArrayList<String[]>();
    list.add(featureValueArray1);
    list.add(featureValueArray2);
    modelUsageSample.predict(list, mlModel);
    public void predict(List<String[]> featureValueLists, MLModel mlModel) throws MLModelHandlerException {
    	Predictor predictor = new Predictor(0, mlModel, featureValueLists);
    	List<?> predictions = predictor.predict();
    	logger.info("Predictions : " + predictions);
    }

...

Code Block
INFO  [MLModelUsageSample] - Algorithm Type : Classification
INFO  [MLModelUsageSample] - Algorithm Name : LOGISTIC_REGRESSION
INFO  [MLModelUsageSample] - Response Variable : Class
INFO  [MLModelUsageSample] - Features : [Feature [name=Age, index=7, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=BMI, index=5, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=DBP, index=2, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=DPF, index=6, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=NumPregnancies, index=0, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=PG2, index=1, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=SI2, index=4, type=NUMERICAL, imputeOption=DISCARD, include=true], Feature [name=TSFT, index=3, type=NUMERICAL, imputeOption=DISCARD, include=true]]
Sep 03, 2015 9:35:20 AM com.github.fommil.netlib.BLAS <clinit>
WARNING: Failed to load implementation from: com.github.fommil.netlib.NativeSystemBLAS
Sep 03, 2015 9:35:20 AM com.github.fommil.netlib.BLAS <clinit>
WARNING: Failed to load implementation from: com.github.fommil.netlib.NativeRefBLAS
INFO  [MLModelUsageSample] - Predictions : [0, 0]
Info

If you package this project as a JAR file, add the following JAR files that are found in the <ML_HOME>/repository/components/plugins/ directory in the classpath when executing it.

  • arpack_combined_0.1.0.wso2v1.jar
  • breeze_2.10_0.11.1.wso2v1.jar
  • commons-logging-1.2.jar
  • core_1.1.2.wso2v1.jar
  • org.scala-lang.scala-library_2.10.4.v20140209-180020-VFINAL-b66a39653b.jar
  • org.wso2.carbon.metrics.manager_1.1.0.jar
  • org.wso2.carbon.ml.commons_1.0.1.SNAPSHOT.jar
  • org.wso2.carbon.ml.core_1.0.1.SNAPSHOT.jar
  • slf4j.api_1.7.5.jar
  • spark-core_2.10_1.4.1.wso2v1.jar
  • spark-mllib_2.10_1.4.1.wso2v1.jar