IGNITE-10727: [ML] InfModel and Model merging
authorAnton Dmitriev <dmitrievanthony@gmail.com>
Fri, 28 Dec 2018 10:48:12 +0000 (13:48 +0300)
committerYury Babak <ybabak@gridgain.com>
Fri, 28 Dec 2018 10:48:13 +0000 (13:48 +0300)
This closes #5723

135 files changed:
examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java [moved from examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java with 83% similarity]
examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java
examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java
examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java
examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java
modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/Model.java with 78% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java
modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java
modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/StackedDatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/StackedModel.java
modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/StackedVectorDatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
modules/ml/src/main/java/org/apache/ignite/ml/inference/Model.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/InfModel.java with 89% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/ModelDescriptor.java
modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/AsyncModelBuilder.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/AsyncInfModelBuilder.java with 73% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilder.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilder.java with 86% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/SingleModelBuilder.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/SingleInfModelBuilder.java with 76% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/SyncModelBuilder.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/SyncInfModelBuilder.java with 76% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/ThreadedModelBuilder.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/ThreadedInfModelBuilder.java with 79% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/IgniteModelParser.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/IgniteFunctionInfModelParser.java with 60% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/ModelParser.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/InfModelParser.java with 85% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowBaseModelParser.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowBaseInfModelParser.java with 92% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowGraphModelParser.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowGraphInfModelParser.java with 93% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowSavedModelModelParser.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowSavedModelInfModelParser.java with 93% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/FileSystemModelReader.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/FileSystemInfModelReader.java with 94% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/InMemoryModelReader.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/InMemoryInfModelReader.java with 91% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/ModelReader.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/InfModelReader.java with 95% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/ModelStorageModelReader.java [moved from modules/ml/src/main/java/org/apache/ignite/ml/inference/reader/ModelStorageInfModelReader.java with 90% similarity]
modules/ml/src/main/java/org/apache/ignite/ml/knn/NNClassificationModel.java
modules/ml/src/main/java/org/apache/ignite/ml/knn/ann/ANNClassificationModel.java
modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
modules/ml/src/main/java/org/apache/ignite/ml/multiclass/MultiClassModel.java
modules/ml/src/main/java/org/apache/ignite/ml/multiclass/OneVsRestTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.java
modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModel.java
modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
modules/ml/src/main/java/org/apache/ignite/ml/pipeline/Pipeline.java
modules/ml/src/main/java/org/apache/ignite/ml/pipeline/PipelineMdl.java
modules/ml/src/main/java/org/apache/ignite/ml/regressions/linear/LinearRegressionModel.java
modules/ml/src/main/java/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModel.java
modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/CrossValidation.java
modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.java
modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/LocalLabelPairCursor.java
modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/BinaryClassificationEvaluator.java
modules/ml/src/main/java/org/apache/ignite/ml/svm/SVMLinearClassificationModel.java
modules/ml/src/main/java/org/apache/ignite/ml/trainers/AdaptableDatasetModel.java
modules/ml/src/main/java/org/apache/ignite/ml/trainers/AdaptableDatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/trainers/DatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/trainers/MultiLabelDatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/trainers/SingleLabelDatasetTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/trainers/TrainerTransformers.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/DecisionTreeConditionalNode.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/DecisionTreeLeafNode.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/DecisionTreeNode.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/boosting/GDBOnTreesLearningStrategy.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/RandomForestTrainer.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/data/TreeNode.java
modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/data/TreeRoot.java
modules/ml/src/test/java/org/apache/ignite/ml/TestUtils.java
modules/ml/src/test/java/org/apache/ignite/ml/clustering/KMeansModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/clustering/KMeansTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/common/ModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/composition/BaggingTest.java
modules/ml/src/test/java/org/apache/ignite/ml/composition/StackingTest.java
modules/ml/src/test/java/org/apache/ignite/ml/composition/boosting/GDBTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceCheckerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/environment/LearningEnvironmentTest.java
modules/ml/src/test/java/org/apache/ignite/ml/inference/InferenceTestSuite.java
modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/IgniteDistributedModelBuilderTest.java [moved from modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilderTest.java with 82% similarity]
modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/ModelBuilderTestUtil.java [moved from modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/InfModelBuilderTestUtil.java with 75% similarity]
modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/SingleModelBuilderTest.java [moved from modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/SingleInfModelBuilderTest.java with 71% similarity]
modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/ThreadedModelBuilderTest.java [moved from modules/ml/src/test/java/org/apache/ignite/ml/inference/builder/ThreadedInfModelBuilderTest.java with 72% similarity]
modules/ml/src/test/java/org/apache/ignite/ml/knn/KNNClassificationTest.java
modules/ml/src/test/java/org/apache/ignite/ml/knn/KNNRegressionTest.java
modules/ml/src/test/java/org/apache/ignite/ml/multiclass/OneVsRestTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTest.java
modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTest.java
modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/gaussian/GaussianNaiveBayesTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/nn/MLPTest.java
modules/ml/src/test/java/org/apache/ignite/ml/nn/MLPTrainerIntegrationTest.java
modules/ml/src/test/java/org/apache/ignite/ml/nn/MLPTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/nn/performance/MLPTrainerMnistIntegrationTest.java
modules/ml/src/test/java/org/apache/ignite/ml/nn/performance/MLPTrainerMnistTest.java
modules/ml/src/test/java/org/apache/ignite/ml/pipeline/PipelineMdlTest.java
modules/ml/src/test/java/org/apache/ignite/ml/pipeline/PipelineTest.java
modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/regressions/logistic/LogisticRegressionModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/regressions/logistic/LogisticRegressionSGDTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/svm/SVMBinaryTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/svm/SVMModelTest.java
modules/ml/src/test/java/org/apache/ignite/ml/tree/performance/DecisionTreeMNISTIntegrationTest.java
modules/ml/src/test/java/org/apache/ignite/ml/tree/performance/DecisionTreeMNISTTest.java
modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestRegressionTrainerTest.java
modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/data/TreeNodeTest.java
modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGModelComposition.java
modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGModelParser.java
modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParserTest.java

index 44c4256..46550f3 100644 (file)
@@ -82,7 +82,7 @@ public class KMeansClusterizationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t\t| %.4f\t\t|\n", prediction, groundTruth);
                 }
@@ -27,12 +27,12 @@ import org.apache.ignite.Ignition;
 import org.apache.ignite.cache.query.QueryCursor;
 import org.apache.ignite.cache.query.ScanQuery;
 import org.apache.ignite.examples.ml.regression.linear.LinearRegressionLSQRTrainerExample;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.IgniteFunctionInfModelParser;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InMemoryInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
+import org.apache.ignite.ml.inference.parser.IgniteModelParser;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.InMemoryModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer;
 import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
@@ -43,7 +43,7 @@ import org.apache.ignite.ml.util.SandboxMLCache;
  * This example is based on {@link LinearRegressionLSQRTrainerExample}, but to perform inference it uses an approach
  * implemented in {@link org.apache.ignite.ml.inference} package.
  */
-public class IgniteFunctionDistributedInferenceExample {
+public class IgniteModelDistributedInferenceExample {
     /** Run example. */
     public static void main(String... args) throws IOException, ExecutionException, InterruptedException {
         System.out.println();
@@ -69,9 +69,9 @@ public class IgniteFunctionDistributedInferenceExample {
             System.out.println(">>> Linear regression model: " + mdl);
 
             System.out.println(">>> Preparing model reader and model parser.");
-            InfModelReader reader = new InMemoryInfModelReader(mdl);
-            InfModelParser<Vector, Double, ?> parser = new IgniteFunctionInfModelParser<>();
-            try (InfModel<Vector, Future<Double>> infMdl = new IgniteDistributedInfModelBuilder(ignite, 4, 4)
+            ModelReader reader = new InMemoryModelReader(mdl);
+            ModelParser<Vector, Double, ?> parser = new IgniteModelParser<>();
+            try (Model<Vector, Future<Double>> infMdl = new IgniteDistributedModelBuilder(ignite, 4, 4)
                 .build(reader, parser)) {
                 System.out.println(">>> Inference model is ready.");
 
@@ -85,7 +85,7 @@ public class IgniteFunctionDistributedInferenceExample {
                         Vector inputs = val.copyOfRange(1, val.size());
                         double groundTruth = val.get(0);
 
-                        double prediction = infMdl.apply(inputs).get();
+                        double prediction = infMdl.predict(inputs).get();
 
                         System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);
                     }
index a32d137..3f1d923 100644 (file)
@@ -26,17 +26,17 @@ import java.io.Serializable;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.IgniteModel;
+import org.apache.ignite.ml.inference.Model;
 import org.apache.ignite.ml.inference.ModelDescriptor;
 import org.apache.ignite.ml.inference.ModelSignature;
-import org.apache.ignite.ml.inference.builder.SingleInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.IgniteFunctionInfModelParser;
-import org.apache.ignite.ml.inference.reader.ModelStorageInfModelReader;
+import org.apache.ignite.ml.inference.builder.SingleModelBuilder;
+import org.apache.ignite.ml.inference.parser.IgniteModelParser;
+import org.apache.ignite.ml.inference.reader.ModelStorageModelReader;
 import org.apache.ignite.ml.inference.storage.descriptor.ModelDescriptorStorage;
 import org.apache.ignite.ml.inference.storage.descriptor.ModelDescriptorStorageFactory;
 import org.apache.ignite.ml.inference.storage.model.ModelStorage;
 import org.apache.ignite.ml.inference.storage.model.ModelStorageFactory;
-import org.apache.ignite.ml.math.functions.IgniteFunction;
 
 /**
  * This example demonstrates how to work with {@link ModelStorage}.
@@ -51,7 +51,7 @@ public class ModelStorageExample {
             ModelDescriptorStorage descStorage = new ModelDescriptorStorageFactory().getModelDescriptorStorage(ignite);
 
             System.out.println("Saving model into model storage...");
-            byte[] mdl = serialize((IgniteFunction<byte[], byte[]>)i -> i);
+            byte[] mdl = serialize((IgniteModel<byte[], byte[]>)i -> i);
             storage.mkdirs("/");
             storage.putFile("/my_model", mdl);
 
@@ -60,8 +60,8 @@ public class ModelStorageExample {
                 "MyModel",
                 "My Cool Model",
                 new ModelSignature("", "", ""),
-                new ModelStorageInfModelReader("/my_model"),
-                new IgniteFunctionInfModelParser<>()
+                new ModelStorageModelReader("/my_model"),
+                new IgniteModelParser<>()
             );
             descStorage.put("my_model", desc);
 
@@ -73,12 +73,12 @@ public class ModelStorageExample {
             desc = descStorage.get("my_model");
 
             System.out.println("Build inference model...");
-            SingleInfModelBuilder mdlBuilder = new SingleInfModelBuilder();
-            try (InfModel<byte[], byte[]> infMdl = mdlBuilder.build(desc.getReader(), desc.getParser())) {
+            SingleModelBuilder mdlBuilder = new SingleModelBuilder();
+            try (Model<byte[], byte[]> infMdl = mdlBuilder.build(desc.getReader(), desc.getParser())) {
 
                 System.out.println("Make inference...");
                 for (int i = 0; i < 10; i++) {
-                    Integer res = deserialize(infMdl.apply(serialize(i)));
+                    Integer res = deserialize(infMdl.predict(serialize(i)));
                     System.out.println(i + " -> " + res);
                 }
             }
index a1e3b21..a81da7f 100644 (file)
@@ -29,12 +29,12 @@ import java.util.concurrent.Future;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelInfModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.util.MnistUtils;
 import org.tensorflow.Tensor;
 
@@ -59,9 +59,9 @@ public class TensorFlowDistributedInferenceExample {
             if (mdlRsrc == null)
                 throw new IllegalArgumentException("Resource not found [resource_path=" + MODEL_PATH + "]");
 
-            InfModelReader reader = new FileSystemInfModelReader(mdlRsrc.getPath());
+            ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-            InfModelParser<double[], Long, ?> parser = new TensorFlowSavedModelInfModelParser<double[], Long>("serve")
+            ModelParser<double[], Long, ?> parser = new TensorFlowSavedModelModelParser<double[], Long>("serve")
 
                 .withInput("Placeholder", doubles -> {
                     float[][][] reshaped = new float[1][28][28];
@@ -82,11 +82,11 @@ public class TensorFlowDistributedInferenceExample {
 
             long t0 = System.currentTimeMillis();
 
-            try (InfModel<double[], Future<Long>> threadedMdl = new IgniteDistributedInfModelBuilder(ignite, 4, 4)
+            try (Model<double[], Future<Long>> threadedMdl = new IgniteDistributedModelBuilder(ignite, 4, 4)
                 .build(reader, parser)) {
                 List<Future<?>> futures = new ArrayList<>(images.size());
                 for (MnistUtils.MnistLabeledImage image : images)
-                    futures.add(threadedMdl.apply(image.getPixels()));
+                    futures.add(threadedMdl.predict(image.getPixels()));
                 for (Future<?> f : futures)
                     f.get();
             }
index d5ccbd7..baa1f00 100644 (file)
@@ -24,12 +24,12 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Random;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.SingleInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelInfModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.SingleModelBuilder;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.util.MnistUtils;
 import org.tensorflow.Tensor;
 
@@ -52,9 +52,9 @@ public class TensorFlowLocalInferenceExample {
         if (mdlRsrc == null)
             throw new IllegalArgumentException("Resource not found [resource_path=" + MODEL_PATH + "]");
 
-        InfModelReader reader = new FileSystemInfModelReader(mdlRsrc.getPath());
+        ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-        InfModelParser<double[], Long, ?> parser = new TensorFlowSavedModelInfModelParser<double[], Long>("serve")
+        ModelParser<double[], Long, ?> parser = new TensorFlowSavedModelModelParser<double[], Long>("serve")
             .withInput("Placeholder", doubles -> {
                 float[][][] reshaped = new float[1][28][28];
                 for (int i = 0; i < doubles.length; i++)
@@ -73,9 +73,9 @@ public class TensorFlowLocalInferenceExample {
 
         long t0 = System.currentTimeMillis();
 
-        try (InfModel<double[], Long> locMdl = new SingleInfModelBuilder().build(reader, parser)) {
+        try (Model<double[], Long> locMdl = new SingleModelBuilder().build(reader, parser)) {
             for (MnistUtils.MnistLabeledImage image : images)
-                locMdl.apply(image.getPixels());
+                locMdl.predict(image.getPixels());
         }
 
         long t1 = System.currentTimeMillis();
index 14051f4..900dcd4 100644 (file)
@@ -27,12 +27,12 @@ import java.util.Random;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.ThreadedInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelInfModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.ThreadedModelBuilder;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.util.MnistUtils;
 import org.tensorflow.Tensor;
 
@@ -56,9 +56,9 @@ public class TensorFlowThreadedInferenceExample {
         if (mdlRsrc == null)
             throw new IllegalArgumentException("Resource not found [resource_path=" + MODEL_PATH + "]");
 
-        InfModelReader reader = new FileSystemInfModelReader(mdlRsrc.getPath());
+        ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-        InfModelParser<double[], Long, ?> parser = new TensorFlowSavedModelInfModelParser<double[], Long>("serve")
+        ModelParser<double[], Long, ?> parser = new TensorFlowSavedModelModelParser<double[], Long>("serve")
 
             .withInput("Placeholder", doubles -> {
                 float[][][] reshaped = new float[1][28][28];
@@ -79,11 +79,11 @@ public class TensorFlowThreadedInferenceExample {
 
         long t0 = System.currentTimeMillis();
 
-        try (InfModel<double[], Future<Long>> threadedMdl = new ThreadedInfModelBuilder(8)
+        try (Model<double[], Future<Long>> threadedMdl = new ThreadedModelBuilder(8)
             .build(reader, parser)) {
             List<Future<?>> futures = new ArrayList<>(images.size());
             for (MnistUtils.MnistLabeledImage image : images)
-                futures.add(threadedMdl.apply(image.getPixels()));
+                futures.add(threadedMdl.predict(image.getPixels()));
             for (Future<?> f : futures)
                 f.get();
         }
index 2e74f60..71546e9 100644 (file)
@@ -97,7 +97,7 @@ public class ANNClassificationExample {
                     double groundTruth = val[0];
 
                     long startPredictionTime = System.currentTimeMillis();
-                    double prediction = knnMdl.apply(new DenseVector(inputs));
+                    double prediction = knnMdl.predict(new DenseVector(inputs));
                     long endPredictionTime = System.currentTimeMillis();
 
                     totalPredictionTime += (endPredictionTime - startPredictionTime);
index 460752b..4a475a0 100644 (file)
@@ -83,7 +83,7 @@ public class KNNClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = knnMdl.apply(inputs);
+                    double prediction = knnMdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, Precision.EPSILON))
index 51cc4ed..8615b6c 100644 (file)
@@ -86,7 +86,7 @@ public class KNNRegressionExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = knnMdl.apply(inputs);
+                    double prediction = knnMdl.predict(inputs);
 
                     mse += Math.pow(prediction - groundTruth, 2.0);
                     mae += Math.abs(prediction - groundTruth);
index 1f81c48..080f45d 100644 (file)
@@ -120,8 +120,8 @@ public class OneVsRestClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
-                    double predictionWithMinMaxScaling = mdlWithScaling.apply(inputs);
+                    double prediction = mdl.predict(inputs);
+                    double predictionWithMinMaxScaling = mdlWithScaling.predict(inputs);
 
                     totalAmount++;
 
index 5af3f69..54c9ce0 100644 (file)
@@ -85,7 +85,7 @@ public class DiscreteNaiveBayesTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (groundTruth != prediction)
index e711d84..74e0bfd 100644 (file)
@@ -84,7 +84,7 @@ public class GaussianNaiveBayesTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, Precision.EPSILON))
index dc67aa1..a6f177a 100644 (file)
@@ -116,7 +116,7 @@ public class MLPTrainerExample {
             // Calculate score.
             for (int i = 0; i < 4; i++) {
                 LabeledPoint pnt = trainingSet.get(i);
-                Matrix predicted = mlp.apply(new DenseMatrix(new double[][] {{pnt.x, pnt.y}}));
+                Matrix predicted = mlp.predict(new DenseMatrix(new double[][] {{pnt.x, pnt.y}}));
 
                 double predictedVal = predicted.get(0, 0);
                 double lbl = pnt.lb;
index e6e2632..1bb4146 100644 (file)
@@ -78,7 +78,7 @@ public class LinearRegressionLSQRTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);
                 }
index c60f8fb..c00a3bb 100644 (file)
@@ -89,7 +89,7 @@ public class LinearRegressionLSQRTrainerWithMinMaxScalerExample {
                     Vector val = observation.getValue();
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(preprocessor.apply(key, val));
+                    double prediction = mdl.predict(preprocessor.apply(key, val));
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);
                 }
index bf235e2..cb764c5 100644 (file)
@@ -87,7 +87,7 @@ public class LinearRegressionSGDTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);
                 }
index 65cf4d1..059f810 100644 (file)
@@ -96,7 +96,7 @@ public class LogisticRegressionSGDTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, Precision.EPSILON))
index 0a681ce..c9a7ae4 100644 (file)
@@ -89,7 +89,7 @@ public class TrainTestDatasetSplitterExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);
                 }
index a32ec08..f057386 100644 (file)
@@ -85,7 +85,7 @@ public class SVMBinaryClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, Precision.EPSILON))
index 4b44c7f..606660f 100644 (file)
@@ -84,7 +84,7 @@ public class DecisionTreeClassificationTrainerExample {
             for (int i = 0; i < 1000; i++) {
                 LabeledPoint pnt = generatePoint(rnd);
 
-                double prediction = mdl.apply(VectorUtils.of(pnt.x, pnt.y));
+                double prediction = mdl.predict(VectorUtils.of(pnt.x, pnt.y));
                 double lbl = pnt.lb;
 
                 if (i %50 == 1)
index 2338522..3e37646 100644 (file)
@@ -81,7 +81,7 @@ public class DecisionTreeRegressionTrainerExample {
 
             // Calculate score.
             for (int x = 0; x < 10; x++) {
-                double predicted = mdl.apply(VectorUtils.of(x));
+                double predicted = mdl.predict(VectorUtils.of(x));
 
                 System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", predicted, Math.sin(x));
             }
index c478407..fd46556 100644 (file)
@@ -71,7 +71,7 @@ public class GDBOnTreesClassificationTrainerExample {
 
             // Calculate score.
             for (int x = -5; x < 5; x++) {
-                double predicted = mdl.apply(VectorUtils.of(x));
+                double predicted = mdl.predict(VectorUtils.of(x));
 
                 System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", predicted, Math.sin(x) < 0 ? 0.0 : 1.0);
             }
index c119c9a..d04415a 100644 (file)
@@ -22,9 +22,9 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.ml.Model;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceCheckerFactory;
+import org.apache.ignite.ml.inference.Model;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
 import org.apache.ignite.ml.trainers.DatasetTrainer;
@@ -73,7 +73,7 @@ public class GDBOnTreesRegressionTrainerExample {
 
             // Calculate score.
             for (int x = -5; x < 5; x++) {
-                double predicted = mdl.apply(VectorUtils.of(x));
+                double predicted = mdl.predict(VectorUtils.of(x));
 
                 System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", predicted, Math.pow(x, 2));
             }
index 3ce833d..fd95033 100644 (file)
@@ -95,7 +95,7 @@ public class RandomForestClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = randomForestMdl.apply(inputs);
+                    double prediction = randomForestMdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, Precision.EPSILON))
index 1754b7c..e1bbc8b 100644 (file)
@@ -104,7 +104,7 @@ public class RandomForestRegressionExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = randomForestMdl.apply(inputs);
+                    double prediction = randomForestMdl.predict(inputs);
 
                     mse += Math.pow(prediction - groundTruth, 2.0);
                     mae += Math.abs(prediction - groundTruth);
index 68f27c4..0ec05c5 100644 (file)
@@ -26,11 +26,11 @@ import java.util.concurrent.Future;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.AsyncInfModelBuilder;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.AsyncModelBuilder;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.xgboost.parser.XGModelParser;
 
 /**
@@ -57,9 +57,9 @@ public class XGBoostModelParserExample {
             if (mdlRsrc == null)
                 throw new IllegalArgumentException("File not found [resource_path=" + TEST_MODEL_RES + "]");
 
-            InfModelReader reader = new FileSystemInfModelReader(mdlRsrc.getPath());
+            ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-            AsyncInfModelBuilder mdlBuilder = new IgniteDistributedInfModelBuilder(ignite, 4, 4);
+            AsyncModelBuilder mdlBuilder = new IgniteDistributedModelBuilder(ignite, 4, 4);
 
             File testData = IgniteUtils.resolveIgnitePath(TEST_DATA_RES);
             if (testData == null)
@@ -69,7 +69,7 @@ public class XGBoostModelParserExample {
             if (testExpRes == null)
                 throw new IllegalArgumentException("File not found [resource_path=" + TEST_ER_RES + "]");
 
-            try (InfModel<HashMap<String, Double>, Future<Double>> mdl = mdlBuilder.build(reader, parser);
+            try (Model<HashMap<String, Double>, Future<Double>> mdl = mdlBuilder.build(reader, parser);
                  Scanner testDataScanner = new Scanner(testData);
                  Scanner testExpResultsScanner = new Scanner(testExpRes)) {
 
@@ -86,7 +86,7 @@ public class XGBoostModelParserExample {
                             testObj.put("f" + keyVal[0], Double.parseDouble(keyVal[1]));
                     }
 
-                    double prediction = mdl.apply(testObj).get();
+                    double prediction = mdl.predict(testObj).get();
 
                     double expPrediction = Double.parseDouble(testExpResultsStr);
 
index 83b3578..47ea72b 100644 (file)
@@ -18,7 +18,7 @@
 package org.apache.ignite.ml;
 
 /**
- * Interface for exportable models({@link Model}).
+ * Interface for exportable models({@link IgniteModel}).
  *
  * @see Exporter
  */
 
 package org.apache.ignite.ml;
 
+import java.io.Serializable;
 import java.util.function.BiFunction;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.inference.Model;
 
 /** Basic interface for all models. */
-public interface Model<T, V> extends InfModel<T, V>, IgniteFunction<T, V> {
+public interface IgniteModel<T, V> extends Model<T, V>, Serializable {
     /**
      * Combines this model with other model via specified combiner
      *
@@ -30,8 +30,8 @@ public interface Model<T, V> extends InfModel<T, V>, IgniteFunction<T, V> {
      * @param combiner Combiner.
      * @return Combination of models.
      */
-    public default <X, W> Model<T, X> combine(Model<T, W> other, BiFunction<V, W, X> combiner) {
-        return v -> combiner.apply(apply(v), other.apply(v));
+    public default <X, W> IgniteModel<T, X> combine(IgniteModel<T, W> other, BiFunction<V, W, X> combiner) {
+        return v -> combiner.apply(predict(v), other.predict(v));
     }
 
     /**
@@ -41,8 +41,8 @@ public interface Model<T, V> extends InfModel<T, V>, IgniteFunction<T, V> {
      * @param <V1> Type of input of function applied before this model.
      * @return Composition model of the form {@code x -> after(mdl(x))}.
      */
-    public default <V1> Model<T, V1> andThen(IgniteFunction<V, V1> after) {
-        return t -> after.apply(apply(t));
+    public default <V1> IgniteModel<T, V1> andThen(IgniteModel<V, V1> after) {
+        return t -> after.predict(predict(t));
     }
 
     /**
index 9930f23..c5308bd 100644 (file)
 
 package org.apache.ignite.ml.clustering.kmeans;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 
 /**
  * Base interface for clusterers.
  */
-public interface Clusterer<P, M extends Model> {
+public interface Clusterer<P, M extends IgniteModel> {
     /**
      * Cluster given points set into k clusters.
      *
index 43e1899..42b0823 100644 (file)
 
 package org.apache.ignite.ml.clustering.kmeans;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 
 /** Base interface for all clusterization models. */
-public interface ClusterizationModel<P, V> extends Model<P, V> {
+public interface ClusterizationModel<P, V> extends IgniteModel<P, V> {
     /** Gets the clusters count. */
     public int getAmountOfClusters();
 
index e07f4f0..33d43c8 100644 (file)
@@ -68,7 +68,7 @@ public class KMeansModel implements ClusterizationModel<Vector, Integer>, Export
      *
      * @param vec Vector.
      */
-    public Integer apply(Vector vec) {
+    public Integer predict(Vector vec) {
         int res = -1;
         double minDist = Double.POSITIVE_INFINITY;
 
index 5ef1de5..4a73782 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition;
 import java.util.Collections;
 import java.util.Map;
 import java.util.stream.Collectors;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
 import org.apache.ignite.ml.util.ModelTrace;
@@ -28,7 +28,7 @@ import org.apache.ignite.ml.util.ModelTrace;
 /**
  * Model trained on a features subspace with mapping from original features space to subspace.
  */
-public class ModelOnFeaturesSubspace implements Model<Vector, Double> {
+public class ModelOnFeaturesSubspace implements IgniteModel<Vector, Double> {
     /**
      * Features mapping to subspace.
      */
@@ -36,7 +36,7 @@ public class ModelOnFeaturesSubspace implements Model<Vector, Double> {
     /**
      * Trained model of features subspace.
      */
-    private final Model<Vector, Double> mdl;
+    private final IgniteModel<Vector, Double> mdl;
 
     /**
      * Constructs new instance of ModelOnFeaturesSubspace.
@@ -44,7 +44,7 @@ public class ModelOnFeaturesSubspace implements Model<Vector, Double> {
      * @param featuresMapping Features mapping to subspace.
      * @param mdl Learned model.
      */
-    ModelOnFeaturesSubspace(Map<Integer, Integer> featuresMapping, Model<Vector, Double> mdl) {
+    ModelOnFeaturesSubspace(Map<Integer, Integer> featuresMapping, IgniteModel<Vector, Double> mdl) {
         this.featuresMapping = Collections.unmodifiableMap(featuresMapping);
         this.mdl = mdl;
     }
@@ -55,10 +55,10 @@ public class ModelOnFeaturesSubspace implements Model<Vector, Double> {
      * @param features Features vector.
      * @return Estimation.
      */
-    @Override public Double apply(Vector features) {
+    @Override public Double predict(Vector features) {
         double[] newFeatures = new double[featuresMapping.size()];
         featuresMapping.forEach((localId, featureVectorId) -> newFeatures[localId] = features.get(featureVectorId));
-        return mdl.apply(VectorUtils.of(newFeatures));
+        return mdl.predict(VectorUtils.of(newFeatures));
     }
 
     /**
@@ -71,7 +71,7 @@ public class ModelOnFeaturesSubspace implements Model<Vector, Double> {
     /**
      * Returns model.
      */
-    public Model<Vector, Double> getMdl() {
+    public IgniteModel<Vector, Double> getMdl() {
         return mdl;
     }
 
index 36ee626..a7894c1 100644 (file)
@@ -21,7 +21,7 @@ import java.util.Collections;
 import java.util.List;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.util.ModelTrace;
@@ -29,7 +29,7 @@ import org.apache.ignite.ml.util.ModelTrace;
 /**
  * Model consisting of several models and prediction aggregation strategy.
  */
-public class ModelsComposition implements Model<Vector, Double>, Exportable<ModelsCompositionFormat> {
+public class ModelsComposition implements IgniteModel<Vector, Double>, Exportable<ModelsCompositionFormat> {
     /**
      * Predictions aggregator.
      */
@@ -37,7 +37,7 @@ public class ModelsComposition implements Model<Vector, Double>, Exportable<Mode
     /**
      * Models.
      */
-    private final List<Model<Vector, Double>> models;
+    private final List<IgniteModel<Vector, Double>> models;
 
     /**
      * Constructs a new instance of composition of models.
@@ -45,7 +45,7 @@ public class ModelsComposition implements Model<Vector, Double>, Exportable<Mode
      * @param models Basic models.
      * @param predictionsAggregator Predictions aggregator.
      */
-    public ModelsComposition(List<? extends Model<Vector, Double>> models, PredictionsAggregator predictionsAggregator) {
+    public ModelsComposition(List<? extends IgniteModel<Vector, Double>> models, PredictionsAggregator predictionsAggregator) {
         this.predictionsAggregator = predictionsAggregator;
         this.models = Collections.unmodifiableList(models);
     }
@@ -56,11 +56,11 @@ public class ModelsComposition implements Model<Vector, Double>, Exportable<Mode
      * @param features Features vector.
      * @return Estimation.
      */
-    @Override public Double apply(Vector features) {
+    @Override public Double predict(Vector features) {
         double[] predictions = new double[models.size()];
 
         for (int i = 0; i < models.size(); i++)
-            predictions[i] = models.get(i).apply(features);
+            predictions[i] = models.get(i).predict(features);
 
         return predictionsAggregator.apply(predictions);
     }
@@ -75,7 +75,7 @@ public class ModelsComposition implements Model<Vector, Double>, Exportable<Mode
     /**
      * Returns containing models.
      */
-    public List<Model<Vector, Double>> getModels() {
+    public List<IgniteModel<Vector, Double>> getModels() {
         return models;
     }
 
index 68af0a9..ba71afa 100644 (file)
@@ -19,7 +19,7 @@ package org.apache.ignite.ml.composition;
 
 import java.io.Serializable;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
@@ -33,7 +33,7 @@ public class ModelsCompositionFormat implements Serializable {
     private static final long serialVersionUID = 9115341364082681837L;
 
     /** Models. */
-    private List<Model<Vector, Double>> models;
+    private List<IgniteModel<Vector, Double>> models;
 
     /** Predictions aggregator. */
     private PredictionsAggregator predictionsAggregator;
@@ -44,13 +44,13 @@ public class ModelsCompositionFormat implements Serializable {
      * @param models Models.
      * @param predictionsAggregator Predictions aggregator.
      */
-    public ModelsCompositionFormat(List<Model<Vector, Double>> models,PredictionsAggregator predictionsAggregator) {
+    public ModelsCompositionFormat(List<IgniteModel<Vector, Double>> models,PredictionsAggregator predictionsAggregator) {
         this.models = models;
         this.predictionsAggregator = predictionsAggregator;
     }
 
     /** */
-    public List<Model<Vector, Double>> models() {
+    public List<IgniteModel<Vector, Double>> models() {
         return models;
     }
 
index 0b87748..7e42d12 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition.boosting;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.boosting.convergence.ConvergenceChecker;
 import org.apache.ignite.ml.composition.boosting.convergence.ConvergenceCheckerFactory;
@@ -58,7 +58,7 @@ public class GDBLearningStrategy {
     protected IgniteFunction<Double, Double> externalLbToInternalMapping;
 
     /** Base model trainer builder. */
-    protected IgniteSupplier<DatasetTrainer<? extends Model<Vector, Double>, Double>> baseMdlTrainerBuilder;
+    protected IgniteSupplier<DatasetTrainer<? extends IgniteModel<Vector, Double>, Double>> baseMdlTrainerBuilder;
 
     /** Mean label value. */
     protected double meanLbVal;
@@ -84,7 +84,7 @@ public class GDBLearningStrategy {
      * @param lbExtractor Label extractor.
      * @return list of learned models.
      */
-    public <K, V> List<Model<Vector, Double>> learnModels(DatasetBuilder<K, V> datasetBuilder,
+    public <K, V> List<IgniteModel<Vector, Double>> learnModels(DatasetBuilder<K, V> datasetBuilder,
         IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Double> lbExtractor) {
 
         return update(null, datasetBuilder, featureExtractor, lbExtractor);
@@ -102,18 +102,18 @@ public class GDBLearningStrategy {
      * @param <V> Type of a value in {@code upstream} data.
      * @return Updated models list.
      */
-    public <K,V> List<Model<Vector, Double>> update(GDBTrainer.GDBModel mdlToUpdate,
+    public <K,V> List<IgniteModel<Vector, Double>> update(GDBTrainer.GDBModel mdlToUpdate,
         DatasetBuilder<K, V> datasetBuilder, IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         if (trainerEnvironment == null)
             throw new IllegalStateException("Learning environment builder is not set.");
 
-        List<Model<Vector, Double>> models = initLearningState(mdlToUpdate);
+        List<IgniteModel<Vector, Double>> models = initLearningState(mdlToUpdate);
 
         ConvergenceChecker<K, V> convCheck = checkConvergenceStgyFactory.create(sampleSize,
             externalLbToInternalMapping, loss, datasetBuilder, featureExtractor, lbExtractor);
 
-        DatasetTrainer<? extends Model<Vector, Double>, Double> trainer = baseMdlTrainerBuilder.get();
+        DatasetTrainer<? extends IgniteModel<Vector, Double>, Double> trainer = baseMdlTrainerBuilder.get();
         for (int i = 0; i < cntOfIterations; i++) {
             double[] weights = Arrays.copyOf(compositionWeights, models.size());
 
@@ -124,7 +124,7 @@ public class GDBLearningStrategy {
 
             IgniteBiFunction<K, V, Double> lbExtractorWrap = (k, v) -> {
                 Double realAnswer = externalLbToInternalMapping.apply(lbExtractor.apply(k, v));
-                Double mdlAnswer = currComposition.apply(featureExtractor.apply(k, v));
+                Double mdlAnswer = currComposition.predict(featureExtractor.apply(k, v));
                 return -loss.gradient(sampleSize, realAnswer, mdlAnswer);
             };
 
@@ -143,8 +143,8 @@ public class GDBLearningStrategy {
      * @param mdlToUpdate Model to update.
      * @return list of already learned models.
      */
-    @NotNull protected List<Model<Vector, Double>> initLearningState(GDBTrainer.GDBModel mdlToUpdate) {
-        List<Model<Vector, Double>> models = new ArrayList<>();
+    @NotNull protected List<IgniteModel<Vector, Double>> initLearningState(GDBTrainer.GDBModel mdlToUpdate) {
+        List<IgniteModel<Vector, Double>> models = new ArrayList<>();
         if(mdlToUpdate != null) {
             models.addAll(mdlToUpdate.getModels());
             WeightedPredictionsAggregator aggregator = (WeightedPredictionsAggregator) mdlToUpdate.getPredictionsAggregator();
@@ -207,7 +207,7 @@ public class GDBLearningStrategy {
      * @param buildBaseMdlTrainer Build base model trainer.
      */
     public GDBLearningStrategy withBaseModelTrainerBuilder(
-        IgniteSupplier<DatasetTrainer<? extends Model<Vector, Double>, Double>> buildBaseMdlTrainer) {
+        IgniteSupplier<DatasetTrainer<? extends IgniteModel<Vector, Double>, Double>> buildBaseMdlTrainer) {
         this.baseMdlTrainerBuilder = buildBaseMdlTrainer;
         return this;
     }
index 03772ec..35502ab 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition.boosting;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.boosting.convergence.ConvergenceCheckerFactory;
 import org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceCheckerFactory;
@@ -124,7 +124,7 @@ public abstract class GDBTrainer extends DatasetTrainer<ModelsComposition, Doubl
             .withDefaultGradStepSize(gradientStep)
             .withCheckConvergenceStgyFactory(checkConvergenceStgyFactory);
 
-        List<Model<Vector, Double>> models;
+        List<IgniteModel<Vector, Double>> models;
         if (mdl != null)
             models = stgy.update((GDBModel)mdl, datasetBuilder, featureExtractor, lbExtractor);
         else
@@ -165,7 +165,7 @@ public abstract class GDBTrainer extends DatasetTrainer<ModelsComposition, Doubl
      * Returns regressor model trainer for one step of GDB.
      */
     @NotNull
-    protected abstract DatasetTrainer<? extends Model<Vector, Double>, Double> buildBaseModelTrainer();
+    protected abstract DatasetTrainer<? extends IgniteModel<Vector, Double>, Double> buildBaseModelTrainer();
 
     /**
      * Maps external representation of label to internal.
@@ -263,7 +263,7 @@ public abstract class GDBTrainer extends DatasetTrainer<ModelsComposition, Doubl
          * @param predictionsAggregator Predictions aggregator.
          * @param internalToExternalLblMapping Internal to external lbl mapping.
          */
-        public GDBModel(List<? extends Model<Vector, Double>> models,
+        public GDBModel(List<? extends IgniteModel<Vector, Double>> models,
             WeightedPredictionsAggregator predictionsAggregator,
             IgniteFunction<Double, Double> internalToExternalLblMapping) {
 
@@ -272,8 +272,8 @@ public abstract class GDBTrainer extends DatasetTrainer<ModelsComposition, Doubl
         }
 
         /** {@inheritDoc} */
-        @Override public Double apply(Vector features) {
-            return internalToExternalLblMapping.apply(super.apply(features));
+        @Override public Double predict(Vector features) {
+            return internalToExternalLblMapping.apply(super.predict(features));
         }
     }
 }
index e383e39..f7da9a1 100644 (file)
@@ -140,7 +140,7 @@ public abstract class ConvergenceChecker<K, V> implements Serializable {
      */
     public double computeError(Vector features, Double answer, ModelsComposition currMdl) {
         Double realAnswer = externalLbToInternalMapping.apply(answer);
-        Double mdlAnswer = currMdl.apply(features);
+        Double mdlAnswer = currMdl.predict(features);
         return -loss.gradient(sampleSize, realAnswer, mdlAnswer);
     }
 }
index c4c082f..a117f43 100644 (file)
@@ -18,7 +18,7 @@
 package org.apache.ignite.ml.composition.stacking;
 
 import java.util.ArrayList;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
 import org.apache.ignite.ml.math.functions.IgniteBinaryOperator;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
@@ -33,7 +33,7 @@ import org.apache.ignite.ml.trainers.DatasetTrainer;
  * @param <AM> Type of aggregator model.
  * @param <L> Type of labels.
  */
-public class SimpleStackedDatasetTrainer<I, O, AM extends Model<I, O>, L> extends StackedDatasetTrainer<I, I, O, AM, L> {
+public class SimpleStackedDatasetTrainer<I, O, AM extends IgniteModel<I, O>, L> extends StackedDatasetTrainer<I, I, O, AM, L> {
     /**
      * Construct instance of this class.
      *
@@ -75,7 +75,7 @@ public class SimpleStackedDatasetTrainer<I, O, AM extends Model<I, O>, L> extend
 
     //TODO: IGNITE-10441 -- Look for options to avoid boilerplate overrides.
     /** {@inheritDoc} */
-    @Override public <M1 extends Model<I, I>> SimpleStackedDatasetTrainer<I, O, AM, L> addTrainer(
+    @Override public <M1 extends IgniteModel<I, I>> SimpleStackedDatasetTrainer<I, O, AM, L> addTrainer(
         DatasetTrainer<M1, L> trainer) {
         return (SimpleStackedDatasetTrainer<I, O, AM, L>)super.addTrainer(trainer);
     }
index bb870cf..e58107d 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition.stacking;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
 import org.apache.ignite.ml.environment.parallelism.Promise;
@@ -53,7 +53,7 @@ import org.apache.ignite.ml.trainers.DatasetTrainer;
  * @param <O> Type of aggregator output.
  * @param <L> Type of labels.
  */
-public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
+public class StackedDatasetTrainer<IS, IA, O, AM extends IgniteModel<IA, O>, L>
     extends DatasetTrainer<StackedModel<IS, IA, O, AM>, L> {
     /** Operator that merges inputs for aggregating model. */
     private IgniteBinaryOperator<IA> aggregatingInputMerger;
@@ -62,7 +62,7 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
     private IgniteFunction<IS, IA> submodelInput2AggregatingInputConverter;
 
     /** Trainers of submodels with converters from and to {@link Vector}. */
-    private List<DatasetTrainer<Model<IS, IA>, L>> submodelsTrainers;
+    private List<DatasetTrainer<IgniteModel<IS, IA>, L>> submodelsTrainers;
 
     /** Aggregating trainer. */
     private DatasetTrainer<AM, L> aggregatorTrainer;
@@ -86,7 +86,7 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
     public StackedDatasetTrainer(DatasetTrainer<AM, L> aggregatorTrainer,
         IgniteBinaryOperator<IA> aggregatingInputMerger,
         IgniteFunction<IS, IA> submodelInput2AggregatingInputConverter,
-        List<DatasetTrainer<Model<IS, IA>, L>> submodelsTrainers,
+        List<DatasetTrainer<IgniteModel<IS, IA>, L>> submodelsTrainers,
         IgniteFunction<Vector, IS> vector2SubmodelInputConverter,
         IgniteFunction<IA, Vector> submodelOutput2VectorConverter) {
         this.aggregatorTrainer = aggregatorTrainer;
@@ -215,32 +215,32 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
      * @return This object.
      */
     @SuppressWarnings({"unchecked"})
-    public <M1 extends Model<IS, IA>> StackedDatasetTrainer<IS, IA, O, AM, L> addTrainer(
+    public <M1 extends IgniteModel<IS, IA>> StackedDatasetTrainer<IS, IA, O, AM, L> addTrainer(
         DatasetTrainer<M1, L> trainer) {
         // Unsafely coerce DatasetTrainer<M1, L> to DatasetTrainer<Model<IS, IA>, L>, but we fully control
         // usages of this unsafely coerced object, on the other hand this makes work with
         // submodelTrainers easier.
-        submodelsTrainers.add(new DatasetTrainer<Model<IS, IA>, L>() {
+        submodelsTrainers.add(new DatasetTrainer<IgniteModel<IS, IA>, L>() {
             /** {@inheritDoc} */
-            @Override public <K, V> Model<IS, IA> fit(DatasetBuilder<K, V> datasetBuilder,
+            @Override public <K, V> IgniteModel<IS, IA> fit(DatasetBuilder<K, V> datasetBuilder,
                 IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor) {
                 return trainer.fit(datasetBuilder, featureExtractor, lbExtractor);
             }
 
             /** {@inheritDoc} */
-            @Override public <K, V> Model<IS, IA> update(Model<IS, IA> mdl, DatasetBuilder<K, V> datasetBuilder,
+            @Override public <K, V> IgniteModel<IS, IA> update(IgniteModel<IS, IA> mdl, DatasetBuilder<K, V> datasetBuilder,
                 IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor) {
-                DatasetTrainer<Model<IS, IA>, L> trainer1 = (DatasetTrainer<Model<IS, IA>, L>)trainer;
+                DatasetTrainer<IgniteModel<IS, IA>, L> trainer1 = (DatasetTrainer<IgniteModel<IS, IA>, L>)trainer;
                 return trainer1.update(mdl, datasetBuilder, featureExtractor, lbExtractor);
             }
 
             /** {@inheritDoc} */
-            @Override protected boolean checkState(Model<IS, IA> mdl) {
+            @Override protected boolean checkState(IgniteModel<IS, IA> mdl) {
                 return true;
             }
 
             /** {@inheritDoc} */
-            @Override protected <K, V> Model<IS, IA> updateModel(Model<IS, IA> mdl, DatasetBuilder<K, V> datasetBuilder,
+            @Override protected <K, V> IgniteModel<IS, IA> updateModel(IgniteModel<IS, IA> mdl, DatasetBuilder<K, V> datasetBuilder,
                 IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor) {
                 return null;
             }
@@ -263,11 +263,11 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
         IgniteBiFunction<K, V, L> lbExtractor) {
         return runOnSubmodels(
             ensemble -> {
-                List<IgniteSupplier<Model<IS, IA>>> res = new ArrayList<>();
+                List<IgniteSupplier<IgniteModel<IS, IA>>> res = new ArrayList<>();
                 for (int i = 0; i < ensemble.size(); i++) {
                     final int j = i;
                     res.add(() -> {
-                        DatasetTrainer<Model<IS, IA>, L> trainer = ensemble.get(j);
+                        DatasetTrainer<IgniteModel<IS, IA>, L> trainer = ensemble.get(j);
                         return mdl == null ?
                             trainer.fit(datasetBuilder, featureExtractor, lbExtractor) :
                             trainer.update(mdl.submodels().get(j), datasetBuilder, featureExtractor, lbExtractor);
@@ -306,7 +306,7 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
      * @return {@link StackedModel}.
      */
     private <K, V> StackedModel<IS, IA, O, AM> runOnSubmodels(
-        IgniteFunction<List<DatasetTrainer<Model<IS, IA>, L>>, List<IgniteSupplier<Model<IS, IA>>>> taskSupplier,
+        IgniteFunction<List<DatasetTrainer<IgniteModel<IS, IA>, L>>, List<IgniteSupplier<IgniteModel<IS, IA>>>> taskSupplier,
         IgniteBiFunction<DatasetTrainer<AM, L>, IgniteBiFunction<K, V, Vector>, AM> aggregatorProcessor,
         IgniteBiFunction<K, V, Vector> featureExtractor) {
 
@@ -322,9 +322,9 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
         if (aggregatingInputMerger == null)
             throw new IllegalStateException("Binary operator used to convert outputs of submodels is not specified");
 
-        List<IgniteSupplier<Model<IS, IA>>> mdlSuppliers = taskSupplier.apply(submodelsTrainers);
+        List<IgniteSupplier<IgniteModel<IS, IA>>> mdlSuppliers = taskSupplier.apply(submodelsTrainers);
 
-        List<Model<IS, IA>> subMdls = environment.parallelismStrategy().submit(mdlSuppliers).stream()
+        List<IgniteModel<IS, IA>> subMdls = environment.parallelismStrategy().submit(mdlSuppliers).stream()
             .map(Promise::unsafeGet)
             .collect(Collectors.toList());
 
@@ -342,7 +342,7 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
             aggregatingInputMerger,
             submodelInput2AggregatingInputConverter);
 
-        for (Model<IS, IA> subMdl : subMdls)
+        for (IgniteModel<IS, IA> subMdl : subMdls)
             res.addSubmodel(subMdl);
 
         return res;
@@ -359,7 +359,7 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
      * @return Feature extractor which will be used for aggregator trainer from original feature extractor.
      */
     private static <IS, IA, K, V> IgniteBiFunction<K, V, Vector> getFeatureExtractorForAggregator(
-        IgniteBiFunction<K, V, Vector> featureExtractor, List<Model<IS, IA>> subMdls,
+        IgniteBiFunction<K, V, Vector> featureExtractor, List<IgniteModel<IS, IA>> subMdls,
         IgniteFunction<IS, IA> submodelInput2AggregatingInputConverter,
         IgniteFunction<IA, Vector> submodelOutput2VectorConverter,
         IgniteFunction<Vector, IS> vector2SubmodelInputConverter) {
@@ -389,11 +389,11 @@ public class StackedDatasetTrainer<IS, IA, O, AM extends Model<IA, O>, L>
      * @return Result of application of {@code submodelOutput2VectorConverter . mdl . vector2SubmodelInputConverter}
      * where dot denotes functions composition.
      */
-    private static <IS, IA> Vector applyToVector(Model<IS, IA> mdl,
+    private static <IS, IA> Vector applyToVector(IgniteModel<IS, IA> mdl,
         IgniteFunction<IA, Vector> submodelOutput2VectorConverter,
         IgniteFunction<Vector, IS> vector2SubmodelInputConverter,
         Vector v) {
-        return vector2SubmodelInputConverter.andThen(mdl).andThen(submodelOutput2VectorConverter).apply(v);
+        return vector2SubmodelInputConverter.andThen(mdl::predict).andThen(submodelOutput2VectorConverter).apply(v);
     }
 
     /** {@inheritDoc} */
index cb64d01..a9be8f8 100644 (file)
@@ -19,7 +19,7 @@ package org.apache.ignite.ml.composition.stacking;
 
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteBinaryOperator;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
 
@@ -40,15 +40,15 @@ import org.apache.ignite.ml.math.functions.IgniteFunction;
  * @param <O> Type of aggregator model output.
  * @param <AM> Type of aggregator model.
  */
-public class StackedModel<IS, IA, O, AM extends Model<IA, O>> implements Model<IS, O> {
+public class StackedModel<IS, IA, O, AM extends IgniteModel<IA, O>> implements IgniteModel<IS, O> {
     /** Submodels layer. */
-    private Model<IS, IA> subModelsLayer;
+    private IgniteModel<IS, IA> subModelsLayer;
 
     /** Aggregator model. */
     private final AM aggregatorMdl;
 
     /** Models constituting submodels layer. */
-    private List<Model<IS, IA>> submodels;
+    private List<IgniteModel<IS, IA>> submodels;
 
     /** Binary operator merging submodels outputs. */
     private final IgniteBinaryOperator<IA> aggregatingInputMerger;
@@ -75,7 +75,7 @@ public class StackedModel<IS, IA, O, AM extends Model<IA, O>> implements Model<I
      *
      * @return Submodels constituting first layer of this model.
      */
-    List<Model<IS, IA>> submodels() {
+    List<IgniteModel<IS, IA>> submodels() {
         return submodels;
     }
 
@@ -93,14 +93,14 @@ public class StackedModel<IS, IA, O, AM extends Model<IA, O>> implements Model<I
      *
      * @param subMdl Submodel to add.
      */
-    void addSubmodel(Model<IS, IA> subMdl) {
+    void addSubmodel(IgniteModel<IS, IA> subMdl) {
         submodels.add(subMdl);
         subModelsLayer = subModelsLayer != null ? subModelsLayer.combine(subMdl, aggregatingInputMerger)
             : subMdl;
     }
 
     /** {@inheritDoc} */
-    @Override public O apply(IS is) {
-        return subModelsLayer.andThen(aggregatorMdl).apply(is);
+    @Override public O predict(IS is) {
+        return subModelsLayer.andThen(aggregatorMdl).predict(is);
     }
 }
index 16eaec2..7230e3c 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.composition.stacking;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
 import org.apache.ignite.ml.math.functions.IgniteBinaryOperator;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
@@ -35,7 +35,7 @@ import org.apache.ignite.ml.trainers.DatasetTrainer;
  * @param <L> Type of labels.
  * @param <AM> Type of aggregator model.
  */
-public class StackedVectorDatasetTrainer<O, AM extends Model<Vector, O>, L>
+public class StackedVectorDatasetTrainer<O, AM extends IgniteModel<Vector, O>, L>
     extends SimpleStackedDatasetTrainer<Vector, O, AM, L> {
     /**
      * Constructs instance of this class.
@@ -58,7 +58,7 @@ public class StackedVectorDatasetTrainer<O, AM extends Model<Vector, O>, L>
     }
 
     /** {@inheritDoc} */
-    @Override public <M1 extends Model<Vector, Vector>> StackedVectorDatasetTrainer<O, AM, L> addTrainer(
+    @Override public <M1 extends IgniteModel<Vector, Vector>> StackedVectorDatasetTrainer<O, AM, L> addTrainer(
         DatasetTrainer<M1, L> trainer) {
         return (StackedVectorDatasetTrainer<O, AM, L>)super.addTrainer(trainer);
     }
@@ -127,7 +127,7 @@ public class StackedVectorDatasetTrainer<O, AM extends Model<Vector, O>, L>
      * @param <M1> Type of submodel trainer model.
      * @return This object.
      */
-    public <M1 extends Model<Vector, Double>> StackedVectorDatasetTrainer<O, AM, L> addTrainerWithDoubleOutput(
+    public <M1 extends IgniteModel<Vector, Double>> StackedVectorDatasetTrainer<O, AM, L> addTrainerWithDoubleOutput(
         DatasetTrainer<M1, L> trainer) {
         return addTrainer(AdaptableDatasetTrainer.of(trainer).afterTrainedModel(VectorUtils::num2Vec));
     }
@@ -140,7 +140,7 @@ public class StackedVectorDatasetTrainer<O, AM extends Model<Vector, O>, L>
      * @param <M1> Type of submodel trainer model.
      * @return This object.
      */
-    public <M1 extends Model<Matrix, Matrix>> StackedVectorDatasetTrainer<O, AM, L> addMatrix2MatrixTrainer(
+    public <M1 extends IgniteModel<Matrix, Matrix>> StackedVectorDatasetTrainer<O, AM, L> addMatrix2MatrixTrainer(
         DatasetTrainer<M1, L> trainer) {
         AdaptableDatasetTrainer<Vector, Vector, Matrix, Matrix, M1, L> adapted = AdaptableDatasetTrainer.of(trainer)
             .beforeTrainedModel((Vector v) -> new DenseMatrix(v.asArray(), 1))
index c124e06..940d8cf 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.environment.logging;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.Tracer;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
@@ -57,7 +57,7 @@ public class ConsoleLogger implements MLLogger {
     }
 
     /** {@inheritDoc} */
-    @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, Model<K, V> mdl) {
+    @Override public <K, V> IgniteModel<K, V> log(VerboseLevel verboseLevel, IgniteModel<K, V> mdl) {
         print(verboseLevel, mdl.toString(true));
         return mdl;
     }
index 90aed14..a644d0c 100644 (file)
@@ -18,7 +18,7 @@
 package org.apache.ignite.ml.environment.logging;
 
 import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.Tracer;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
@@ -54,7 +54,7 @@ public class CustomMLLogger implements MLLogger {
     }
 
     /** {@inheritDoc} */
-    @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, Model<K, V> mdl) {
+    @Override public <K, V> IgniteModel<K, V> log(VerboseLevel verboseLevel, IgniteModel<K, V> mdl) {
         log(verboseLevel, mdl.toString(true));
         return mdl;
     }
index b2b4739..3c12ba0 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.environment.logging;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
@@ -51,7 +51,7 @@ public interface MLLogger {
      * @param verboseLevel Verbose level.
      * @param mdl Model.
      */
-    public <K, V> Model<K,V> log(VerboseLevel verboseLevel, Model<K, V> mdl);
+    public <K, V> IgniteModel<K,V> log(VerboseLevel verboseLevel, IgniteModel<K, V> mdl);
 
     /**
      * Log line with formatting.
index 729604f..7e73d62 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.environment.logging;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
@@ -40,7 +40,7 @@ public class NoOpLogger implements MLLogger {
     }
 
     /** {@inheritDoc} */
-    @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, Model<K, V> mdl) {
+    @Override public <K, V> IgniteModel<K, V> log(VerboseLevel verboseLevel, IgniteModel<K, V> mdl) {
         return mdl;
     }
 
 
 package org.apache.ignite.ml.inference;
 
-import java.util.function.Function;
-
 /**
  * Inference model that can be used to make predictions.
  *
  * @param <I> Type of model input.
  * @param <O> Type of model output.
  */
-public interface InfModel<I, O> extends Function<I, O>, AutoCloseable {
+public interface Model<I, O> extends AutoCloseable {
     /**
      * Make a prediction for the specified input arguments.
      *
      * @param input Input arguments.
      * @return Prediction result.
      */
-    public O apply(I input);
+    public O predict(I input);
 
     /** {@inheritDoc} */
     public void close();
index 8c8980c..7034cf9 100644 (file)
 package org.apache.ignite.ml.inference;
 
 import java.io.Serializable;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 
 /**
- * Model descriptor that encapsulates information about model, {@link InfModelReader} and {@link InfModelParser} which
+ * Model descriptor that encapsulates information about model, {@link ModelReader} and {@link ModelParser} which
  * is required to build the model.
  */
 public class ModelDescriptor implements Serializable {
@@ -36,10 +36,10 @@ public class ModelDescriptor implements Serializable {
     private final ModelSignature signature;
 
     /** Model reader. */
-    private final InfModelReader reader;
+    private final ModelReader reader;
 
     /** Model parser. */
-    private final InfModelParser<byte[], byte[], ?> parser;
+    private final ModelParser<byte[], byte[], ?> parser;
 
     /**
      * Constructs a new instance of model descriptor.
@@ -50,8 +50,8 @@ public class ModelDescriptor implements Serializable {
      * @param reader Model reader.
      * @param parser Model parser.
      */
-    public ModelDescriptor(String name, String desc, ModelSignature signature, InfModelReader reader,
-        InfModelParser<byte[], byte[], ?> parser) {
+    public ModelDescriptor(String name, String desc, ModelSignature signature, ModelReader reader,
+        ModelParser<byte[], byte[], ?> parser) {
         this.name = name;
         this.desc = desc;
         this.signature = signature;
@@ -75,12 +75,12 @@ public class ModelDescriptor implements Serializable {
     }
 
     /** */
-    public InfModelReader getReader() {
+    public ModelReader getReader() {
         return reader;
     }
 
     /** */
-    public InfModelParser<byte[], byte[], ?> getParser() {
+    public ModelParser<byte[], byte[], ?> getParser() {
         return parser;
     }
 
@@ -19,16 +19,16 @@ package org.apache.ignite.ml.inference.builder;
 
 import java.io.Serializable;
 import java.util.concurrent.Future;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 
 /**
- * Builder of asynchronous inference model. Uses specified model reader (see {@link InfModelReader}) and mode parser
- * (see {@link InfModelParser}) to build a model.
+ * Builder of asynchronous inference model. Uses specified model reader (see {@link ModelReader}) and mode parser
+ * (see {@link ModelParser}) to build a model.
  */
 @FunctionalInterface
-public interface AsyncInfModelBuilder {
+public interface AsyncModelBuilder {
     /**
      * Builds asynchronous inference model using specified model reader and model parser.
      *
@@ -38,6 +38,6 @@ public interface AsyncInfModelBuilder {
      * @param <O> Type of model output.
      * @return Inference model.
      */
-    public <I extends Serializable, O extends Serializable> InfModel<I, Future<O>> build(InfModelReader reader,
-        InfModelParser<I, O, ?> parser);
+    public <I extends Serializable, O extends Serializable> Model<I, Future<O>> build(ModelReader reader,
+        ModelParser<I, O, ?> parser);
 }
@@ -30,28 +30,28 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteQueue;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.configuration.CollectionConfiguration;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.services.Service;
 import org.apache.ignite.services.ServiceContext;
 
 /**
  * Builder that allows to start Apache Ignite services for distributed inference and get a facade that allows to work
- * with this distributed inference infrastructure as with a single inference model (see {@link InfModel}).
+ * with this distributed inference infrastructure as with a single inference model (see {@link Model}).
  *
  * The common workflow is based on a request/response queues and multiple workers represented by Apache Ignite services.
- * When the {@link #build(InfModelReader, InfModelParser)} method is called Apache Ignite starts the specified number of
+ * When the {@link #build(ModelReader, ModelParser)} method is called Apache Ignite starts the specified number of
  * service instances and request/response queues. Each service instance reads request queue, processes inbound requests
- * and writes responses to response queue. The facade returned by the {@link #build(InfModelReader, InfModelParser)}
- * method operates with request/response queues. When the {@link InfModel#apply(Object)} method is called the argument
+ * and writes responses to response queue. The facade returned by the {@link #build(ModelReader, ModelParser)}
+ * method operates with request/response queues. When the {@link Model#predict(Object)} method is called the argument
  * is sent as a request to the request queue. When the response is appeared in the response queue the {@link Future}
  * correspondent to the previously sent request is completed and the processing finishes.
  *
- * Be aware that {@link InfModel#close()} method must be called to clear allocated resources, stop services and remove
+ * Be aware that {@link Model#close()} method must be called to clear allocated resources, stop services and remove
  * queues.
  */
-public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
+public class IgniteDistributedModelBuilder implements AsyncModelBuilder {
     /** Template of the inference service name. */
     private static final String INFERENCE_SERVICE_NAME_PATTERN = "inference_service_%s";
 
@@ -83,7 +83,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
      * @param instances Number of service instances maintaining to make distributed inference.
      * @param maxPerNode Max per node number of instances.
      */
-    public IgniteDistributedInfModelBuilder(Ignite ignite, int instances, int maxPerNode) {
+    public IgniteDistributedModelBuilder(Ignite ignite, int instances, int maxPerNode) {
         this.ignite = ignite;
         this.instances = instances;
         this.maxPerNode = maxPerNode;
@@ -92,35 +92,35 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
     /**
      * Starts the specified in constructor number of service instances and request/response queues. Each service
      * instance reads request queue, processes inbound requests and writes responses to response queue. The returned
-     * facade is represented by the {@link InfModel} operates with request/response queues, but hides these details
-     * behind {@link InfModel#apply(Object)} method of {@link InfModel}.
+     * facade is represented by the {@link Model} operates with request/response queues, but hides these details
+     * behind {@link Model#predict(Object)} method of {@link Model}.
      *
-     * Be aware that {@link InfModel#close()} method must be called to clear allocated resources, stop services and
+     * Be aware that {@link Model#close()} method must be called to clear allocated resources, stop services and
      * remove queues.
      *
      * @param reader Inference model reader.
      * @param parser Inference model parser.
      * @param <I> Type of model input.
      * @param <O> Type of model output.
-     * @return Facade represented by {@link InfModel}.
+     * @return Facade represented by {@link Model}.
      */
-    @Override public <I extends Serializable, O extends Serializable> InfModel<I, Future<O>> build(
-        InfModelReader reader, InfModelParser<I, O, ?> parser) {
+    @Override public <I extends Serializable, O extends Serializable> Model<I, Future<O>> build(
+        ModelReader reader, ModelParser<I, O, ?> parser) {
         return new DistributedInfModel<>(ignite, UUID.randomUUID().toString(), reader, parser, instances, maxPerNode);
     }
 
     /**
      * Facade that operates with request/response queues to make distributed inference, but hides these details
-     * behind {@link InfModel#apply(Object)} method of {@link InfModel}.
+     * behind {@link Model#predict(Object)} method of {@link Model}.
      *
-     * Be aware that {@link InfModel#close()} method must be called to clear allocated resources, stop services and
+     * Be aware that {@link Model#close()} method must be called to clear allocated resources, stop services and
      * remove queues.
      *
      * @param <I> Type of model input.
      * @param <O> Type of model output.
      */
     private static class DistributedInfModel<I extends Serializable, O extends Serializable>
-        implements InfModel<I, Future<O>> {
+        implements Model<I, Future<O>> {
         /** Ignite instance. */
         private final Ignite ignite;
 
@@ -155,7 +155,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
          * @param instances Number of service instances maintaining to make distributed inference.
          * @param maxPerNode Max per node number of instances.
          */
-        DistributedInfModel(Ignite ignite, String suffix, InfModelReader reader, InfModelParser<I, O, ?> parser,
+        DistributedInfModel(Ignite ignite, String suffix, ModelReader reader, ModelParser<I, O, ?> parser,
             int instances, int maxPerNode) {
             this.ignite = ignite;
             this.suffix = suffix;
@@ -172,7 +172,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
         }
 
         /** {@inheritDoc} */
-        @Override public Future<O> apply(I input) {
+        @Override public Future<O> predict(I input) {
             if (!running.get())
                 throw new IllegalStateException("Inference model is not running");
 
@@ -198,7 +198,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
          * @param instances Number of service instances maintaining to make distributed inference.
          * @param maxPerNode Max per node number of instances.
          */
-        private void startService(InfModelReader reader, InfModelParser<I, O, ?> parser, int instances, int maxPerNode) {
+        private void startService(ModelReader reader, ModelParser<I, O, ?> parser, int instances, int maxPerNode) {
             ignite.services().deployMultiple(
                 String.format(INFERENCE_SERVICE_NAME_PATTERN, suffix),
                 new IgniteDistributedInfModelService<>(reader, parser, suffix),
@@ -279,8 +279,8 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
 
     /**
      * Apache Ignite service that makes inference reading requests from the request queue and writing responses to the
-     * response queue. This service is assumed to be deployed in {@link #build(InfModelReader, InfModelParser)} method
-     * and cancelled in {@link InfModel#close()} method of the inference model.
+     * response queue. This service is assumed to be deployed in {@link #build(ModelReader, ModelParser)} method
+     * and cancelled in {@link Model#close()} method of the inference model.
      *
      * @param <I> Type of model input.
      * @param <O> Type of model output.
@@ -291,10 +291,10 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
         private static final long serialVersionUID = -3596084917874395597L;
 
         /** Inference model reader. */
-        private final InfModelReader reader;
+        private final ModelReader reader;
 
         /** Inference model parser. */
-        private final InfModelParser<I, O, ?> parser;
+        private final ModelParser<I, O, ?> parser;
 
         /** Suffix that with correspondent templates formats service and queue names. */
         private final String suffix;
@@ -306,7 +306,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
         private transient IgniteQueue<O> resQueue;
 
         /** Inference model, is created in {@link #init(ServiceContext)} method. */
-        private transient InfModel<I, O> mdl;
+        private transient Model<I, O> mdl;
 
         /**
          * Constructs a new instance of Ignite distributed inference model service.
@@ -315,7 +315,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
          * @param parser Inference model parser.
          * @param suffix Suffix that with correspondent templates formats service and queue names.
          */
-        IgniteDistributedInfModelService(InfModelReader reader, InfModelParser<I, O, ?> parser, String suffix) {
+        IgniteDistributedInfModelService(ModelReader reader, ModelParser<I, O, ?> parser, String suffix) {
             this.reader = reader;
             this.parser = parser;
             this.suffix = suffix;
@@ -347,7 +347,7 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
                     continue;
                 }
 
-                O res = mdl.apply(req);
+                O res = mdl.predict(req);
 
                 try {
                     resQueue.put(res);
 package org.apache.ignite.ml.inference.builder;
 
 import java.io.Serializable;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 
 /**
  * Implementation of synchronous inference model builder that builds a model processed locally in a single thread.
  */
-public class SingleInfModelBuilder implements SyncInfModelBuilder {
+public class SingleModelBuilder implements SyncModelBuilder {
     /** {@inheritDoc} */
-    @Override public <I extends Serializable, O extends Serializable, M extends InfModel<I, O>> M build(InfModelReader reader,
-        InfModelParser<I, O, M> parser) {
+    @Override public <I extends Serializable, O extends Serializable, M extends Model<I, O>> M build(ModelReader reader,
+        ModelParser<I, O, M> parser) {
         return parser.parse(reader.read());
     }
 }
 package org.apache.ignite.ml.inference.builder;
 
 import java.io.Serializable;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 
 /**
- * Builder of synchronous inference model. Uses specified model reader (see {@link InfModelReader}) and mode parser (see
- * {@link InfModelParser}) to build a model.
+ * Builder of synchronous inference model. Uses specified model reader (see {@link ModelReader}) and mode parser (see
+ * {@link ModelParser}) to build a model.
  */
 @FunctionalInterface
-public interface SyncInfModelBuilder {
+public interface SyncModelBuilder {
     /**
      * Builds synchronous inference model using specified model reader and model parser.
      *
@@ -37,6 +37,6 @@ public interface SyncInfModelBuilder {
      * @param <O> Type of model output.
      * @return Inference model.
      */
-    public <I extends Serializable, O extends Serializable, M extends InfModel<I, O>> M build(InfModelReader reader,
-        InfModelParser<I, O, M> parser);
+    public <I extends Serializable, O extends Serializable, M extends Model<I, O>> M build(ModelReader reader,
+        ModelParser<I, O, M> parser);
 }
@@ -21,15 +21,15 @@ import java.io.Serializable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 
 /**
  * Implementation of asynchronous inference model builder that builds model processed locally utilizing specified number
  * of threads.
  */
-public class ThreadedInfModelBuilder implements AsyncInfModelBuilder {
+public class ThreadedModelBuilder implements AsyncModelBuilder {
     /** Number of threads to be utilized for model inference. */
     private final int threads;
 
@@ -38,13 +38,13 @@ public class ThreadedInfModelBuilder implements AsyncInfModelBuilder {
      *
      * @param threads Number of threads to be utilized for model inference.
      */
-    public ThreadedInfModelBuilder(int threads) {
+    public ThreadedModelBuilder(int threads) {
         this.threads = threads;
     }
 
     /** {@inheritDoc} */
-    @Override public <I extends Serializable, O extends Serializable> InfModel<I, Future<O>> build(
-        InfModelReader reader, InfModelParser<I, O, ?> parser) {
+    @Override public <I extends Serializable, O extends Serializable> Model<I, Future<O>> build(
+        ModelReader reader, ModelParser<I, O, ?> parser) {
         return new ThreadedInfModel<>(parser.parse(reader.read()), threads);
     }
 
@@ -55,9 +55,9 @@ public class ThreadedInfModelBuilder implements AsyncInfModelBuilder {
      * @param <O> Type of model output.
      */
     private static class ThreadedInfModel<I extends Serializable, O extends Serializable>
-        implements InfModel<I, Future<O>> {
+        implements Model<I, Future<O>> {
         /** Inference model. */
-        private final InfModel<I, O> mdl;
+        private final Model<I, O> mdl;
 
         /** Thread pool. */
         private final ExecutorService threadPool;
@@ -68,14 +68,14 @@ public class ThreadedInfModelBuilder implements AsyncInfModelBuilder {
          * @param mdl Inference model.
          * @param threads Thread pool.
          */
-        ThreadedInfModel(InfModel<I, O> mdl, int threads) {
+        ThreadedInfModel(Model<I, O> mdl, int threads) {
             this.mdl = mdl;
             this.threadPool = Executors.newFixedThreadPool(threads);
         }
 
         /** {@inheritDoc} */
-        @Override public Future<O> apply(I input) {
-            return threadPool.submit(() -> mdl.apply(input));
+        @Override public Future<O> predict(I input) {
+            return threadPool.submit(() -> mdl.predict(input));
         }
 
         /** {@inheritDoc} */
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.inference.parser;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
 
 /**
@@ -29,48 +29,21 @@ import org.apache.ignite.ml.math.functions.IgniteFunction;
  * @param <I> Type of model input.
  * @param <O> Type of model output.
  */
-public class IgniteFunctionInfModelParser<I, O> implements InfModelParser<I, O, InfModel<I, O>> {
+public class IgniteModelParser<I, O> implements ModelParser<I, O, IgniteModel<I, O>> {
     /** */
     private static final long serialVersionUID = -4624683614990816434L;
 
     /** {@inheritDoc} */
-    @Override public InfModel<I, O> parse(byte[] mdl) {
+    @Override public IgniteModel<I, O> parse(byte[] mdl) {
         try (ByteArrayInputStream bais = new ByteArrayInputStream(mdl);
              ObjectInputStream ois = new ObjectInputStream(bais)) {
             @SuppressWarnings("unchecked")
-            IgniteFunction<I, O> function = (IgniteFunction<I, O>)ois.readObject();
+            IgniteModel<I, O> res = (IgniteModel<I, O>)ois.readObject();
 
-            return new IgniteFunctionInfoModel(function);
+            return res;
         }
         catch (IOException | ClassNotFoundException e) {
             throw new RuntimeException(e);
         }
     }
-
-    /**
-     * Inference model that wraps {@link IgniteFunction}.
-     */
-    private class IgniteFunctionInfoModel implements InfModel<I, O> {
-        /** Ignite function. */
-        private final IgniteFunction<I, O> function;
-
-        /**
-         * Constructs a new instance of Ignite function.
-         *
-         * @param function Ignite function.
-         */
-        IgniteFunctionInfoModel(IgniteFunction<I, O> function) {
-            this.function = function;
-        }
-
-        /** {@inheritDoc} */
-        @Override public O apply(I input) {
-            return function.apply(input);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void close() {
-            // Do nothing.
-        }
-    }
 }
 package org.apache.ignite.ml.inference.parser;
 
 import java.io.Serializable;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.Model;
 
 /**
- * Model parser that accepts a serialized model represented by byte array, parses it and returns {@link InfModel}.
+ * Model parser that accepts a serialized model represented by byte array, parses it and returns {@link Model}.
  *
  * @param <I> Type of model input.
  * @param <O> Type of model output.
  */
 @FunctionalInterface
-public interface InfModelParser<I, O, M extends InfModel<I, O>> extends Serializable {
+public interface ModelParser<I, O, M extends Model<I, O>> extends Serializable {
     /**
-     * Accepts serialized model represented by byte array, parses it and returns {@link InfModel}.
+     * Accepts serialized model represented by byte array, parses it and returns {@link Model}.
      *
      * @param mdl Serialized model represented by byte array.
      * @return Inference model.
@@ -22,7 +22,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.Model;
 import org.tensorflow.Session;
 import org.tensorflow.Tensor;
 
@@ -33,7 +33,7 @@ import org.tensorflow.Tensor;
  * @param <I> Type of model input.
  * @param <O> Type of model output.
  */
-public abstract class TensorFlowBaseInfModelParser<I, O> implements InfModelParser<I, O, InfModel<I, O>> {
+public abstract class TensorFlowBaseModelParser<I, O> implements ModelParser<I, O, Model<I, O>> {
     /** */
     private static final long serialVersionUID = 5574259553625871456L;
 
@@ -47,7 +47,7 @@ public abstract class TensorFlowBaseInfModelParser<I, O> implements InfModelPars
     private OutputTransformer<O> outputTransformer;
 
     /** {@inheritDoc} */
-    @Override public InfModel<I, O> parse(byte[] mdl) {
+    @Override public Model<I, O> parse(byte[] mdl) {
         return new TensorFlowInfModel(parseModel(mdl));
     }
 
@@ -67,7 +67,7 @@ public abstract class TensorFlowBaseInfModelParser<I, O> implements InfModelPars
      * @param transformer Transformer that allows to transform input into tensor.
      * @return This instance.
      */
-    public TensorFlowBaseInfModelParser<I, O> withInput(String name, InputTransformer<I> transformer) {
+    public TensorFlowBaseModelParser<I, O> withInput(String name, InputTransformer<I> transformer) {
         if (inputs.containsKey(name))
             throw new IllegalArgumentException("Inputs already contains specified name [name=" + name + "]");
 
@@ -84,7 +84,7 @@ public abstract class TensorFlowBaseInfModelParser<I, O> implements InfModelPars
      * @param transformer Transformer that allow to transform tensors into output.
      * @return This instance.
      */
-    public TensorFlowBaseInfModelParser<I, O> withOutput(List<String> names, OutputTransformer<O> transformer) {
+    public TensorFlowBaseModelParser<I, O> withOutput(List<String> names, OutputTransformer<O> transformer) {
         if (outputNames != null || outputTransformer != null)
             throw new IllegalArgumentException("Outputs already specified");
 
@@ -129,7 +129,7 @@ public abstract class TensorFlowBaseInfModelParser<I, O> implements InfModelPars
     /**
      * TensorFlow inference model based on pre-loaded graph and created session.
      */
-    private class TensorFlowInfModel implements InfModel<I, O> {
+    private class TensorFlowInfModel implements Model<I, O> {
         /** TensorFlow session. */
         private final Session ses;
 
@@ -143,7 +143,7 @@ public abstract class TensorFlowBaseInfModelParser<I, O> implements InfModelPars
         }
 
         /** {@inheritDoc} */
-        @Override public O apply(I input) {
+        @Override public O predict(I input) {
             Session.Runner runner = ses.runner();
 
             runner = feedAll(runner, input);
@@ -26,7 +26,7 @@ import org.tensorflow.Session;
  * @param <I> Type of model input.
  * @param <O> Type of model output.
  */
-public class TensorFlowGraphInfModelParser<I, O> extends TensorFlowBaseInfModelParser<I, O> {
+public class TensorFlowGraphModelParser<I, O> extends TensorFlowBaseModelParser<I, O> {
     /** */
     private static final long serialVersionUID = -1872566748640565856L;
 
@@ -31,7 +31,7 @@ import org.tensorflow.Session;
  * @param <I> Type of model input.
  * @param <O> Type of model output.
  */
-public class TensorFlowSavedModelInfModelParser<I, O> extends TensorFlowBaseInfModelParser<I, O> {
+public class TensorFlowSavedModelModelParser<I, O> extends TensorFlowBaseModelParser<I, O> {
     /** */
     private static final long serialVersionUID = 5638083440240281879L;
 
@@ -46,7 +46,7 @@ public class TensorFlowSavedModelInfModelParser<I, O> extends TensorFlowBaseInfM
      *
      * @param tags Model tags.
      */
-    public TensorFlowSavedModelInfModelParser(String... tags) {
+    public TensorFlowSavedModelModelParser(String... tags) {
         this.tags = tags;
     }
 
@@ -26,7 +26,7 @@ import org.apache.ignite.ml.inference.util.DirectorySerializer;
 /**
  * Model reader that reads directory or file and serializes it using {@link DirectorySerializer}.
  */
-public class FileSystemInfModelReader implements InfModelReader {
+public class FileSystemModelReader implements ModelReader {
     /** */
     private static final long serialVersionUID = 7370932792669930039L;
 
@@ -38,7 +38,7 @@ public class FileSystemInfModelReader implements InfModelReader {
      *
      * @param path Path to the directory.
      */
-    public FileSystemInfModelReader(String path) {
+    public FileSystemModelReader(String path) {
         this.path = path;
     }
 
@@ -25,7 +25,7 @@ import java.io.Serializable;
 /**
  * Model reader that reads predefined array of bytes.
  */
-public class InMemoryInfModelReader implements InfModelReader {
+public class InMemoryModelReader implements ModelReader {
     /** */
     private static final long serialVersionUID = -5518861989758691500L;
 
@@ -37,7 +37,7 @@ public class InMemoryInfModelReader implements InfModelReader {
      *
      * @param data Data.
      */
-    public InMemoryInfModelReader(byte[] data) {
+    public InMemoryModelReader(byte[] data) {
         this.data = data;
     }
 
@@ -47,7 +47,7 @@ public class InMemoryInfModelReader implements InfModelReader {
      * @param obj Data object.
      * @param <T> Type of data object.
      */
-    public <T extends Serializable> InMemoryInfModelReader(T obj) {
+    public <T extends Serializable> InMemoryModelReader(T obj) {
         try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
              ObjectOutputStream oos = new ObjectOutputStream(baos)) {
             oos.writeObject(obj);
@@ -23,7 +23,7 @@ import java.io.Serializable;
  * Model reader that reads model from external or internal storage and returns it in serialized form as byte array.
  */
 @FunctionalInterface
-public interface InfModelReader extends Serializable {
+public interface ModelReader extends Serializable {
     /**
      * Rads model and returns it in serialized form as byte array.
      *
@@ -26,7 +26,7 @@ import org.apache.ignite.ml.math.functions.IgniteSupplier;
 /**
  * Model reader that reads directory or file from model storage and serializes it using {@link DirectorySerializer}.
  */
-public class ModelStorageInfModelReader implements InfModelReader {
+public class ModelStorageModelReader implements ModelReader {
     /** */
     private static final long serialVersionUID = -5878564742783562872L;
 
@@ -41,7 +41,7 @@ public class ModelStorageInfModelReader implements InfModelReader {
      *
      * @param path Path to the directory or file.
      */
-    public ModelStorageInfModelReader(String path, IgniteSupplier<ModelStorage> mdlStorageSupplier) {
+    public ModelStorageModelReader(String path, IgniteSupplier<ModelStorage> mdlStorageSupplier) {
         this.path = path;
         this.mdlStorageSupplier = mdlStorageSupplier;
     }
@@ -51,7 +51,7 @@ public class ModelStorageInfModelReader implements InfModelReader {
      *
      * @param path Path to the directory or file.
      */
-    public ModelStorageInfModelReader(String path) {
+    public ModelStorageModelReader(String path) {
         this(path, () -> new ModelStorageFactory().getModelStorage(Ignition.ignite()));
     }
 
index d435f91..ba0d885 100644 (file)
@@ -26,7 +26,7 @@ import java.util.Set;
 import java.util.TreeMap;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.knn.classification.KNNModelFormat;
 import org.apache.ignite.ml.knn.classification.NNStrategy;
 import org.apache.ignite.ml.math.distances.DistanceMeasure;
@@ -41,7 +41,7 @@ import org.jetbrains.annotations.NotNull;
  * Common methods and fields for all kNN and aNN models
  * to predict label based on neighbours' labels.
  */
-public abstract class NNClassificationModel implements Model<Vector, Double>, Exportable<KNNModelFormat> {
+public abstract class NNClassificationModel implements IgniteModel<Vector, Double>, Exportable<KNNModelFormat> {
     /** Amount of nearest neighbors. */
     protected int k = 5;
 
index 6ef3990..4e42ab8 100644 (file)
@@ -69,7 +69,7 @@ public class ANNClassificationModel extends NNClassificationModel  {
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector v) {
+    @Override public Double predict(Vector v) {
             List<LabeledVector> neighbors = findKNearestNeighbors(v);
             return classify(neighbors, v, stgy);
     }
index 3de73bd..f313e8a 100644 (file)
@@ -58,7 +58,7 @@ public class KNNClassificationModel extends NNClassificationModel implements Exp
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector v) {
+    @Override public Double predict(Vector v) {
         if (!datasets.isEmpty()) {
             List<LabeledVector> neighbors = findKNearestNeighbors(v);
 
index f854177..84d86d6 100644 (file)
@@ -50,7 +50,7 @@ public class KNNRegressionModel extends KNNClassificationModel {
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector v) {
+    @Override public Double predict(Vector v) {
         List<LabeledVector> neighbors = findKNearestNeighbors(v);
 
         return predictYBasedOn(neighbors, v);
index 8520aa9..fa73bcb 100644 (file)
@@ -25,11 +25,11 @@ import java.util.Optional;
 import java.util.TreeMap;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /** Base class for multi-classification model for set of classifiers. */
-public class MultiClassModel<M extends Model<Vector, Double>> implements Model<Vector, Double>, Exportable<MultiClassModel>, Serializable {
+public class MultiClassModel<M extends IgniteModel<Vector, Double>> implements IgniteModel<Vector, Double>, Exportable<MultiClassModel>, Serializable {
     /** */
     private static final long serialVersionUID = -114986533359917L;
 
@@ -60,10 +60,10 @@ public class MultiClassModel<M extends Model<Vector, Double>> implements Model<V
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector input) {
+    @Override public Double predict(Vector input) {
         TreeMap<Double, Double> maxMargins = new TreeMap<>();
 
-        models.forEach((k, v) -> maxMargins.put(v.apply(input), k));
+        models.forEach((k, v) -> maxMargins.put(v.predict(input), k));
 
         // returns value the most closest to 1
         return maxMargins.lastEntry().getValue();
index 0ddad53..4eca27f 100644 (file)
@@ -25,7 +25,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.dataset.Dataset;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.dataset.PartitionDataBuilder;
@@ -42,7 +42,7 @@ import org.apache.ignite.ml.trainers.SingleLabelDatasetTrainer;
  * NOTE: The current implementation suffers from unbalanced training over the dataset due to unweighted approach
  * during the process of reassign labels from all range of labels to 0,1.
  */
-public class OneVsRestTrainer<M extends Model<Vector, Double>>
+public class OneVsRestTrainer<M extends IgniteModel<Vector, Double>>
     extends SingleLabelDatasetTrainer<MultiClassModel<M>> {
     /** The common binary classifier with all hyper-parameters to spread them for all separate trainings . */
     private SingleLabelDatasetTrainer<M> classifier;
index 7ab2957..3935232 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.naivebayes.discrete;
 import java.io.Serializable;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
@@ -28,7 +28,7 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
  * {@code p(C_k,y) =x_1*p_k1^x *...*x_i*p_ki^x_i}. Where {@code x_i} is a discrete feature, {@code p_ki} is a prior
  * probability probability of class {@code p(x|C_k)}. Returns the number of the most possible class.
  */
-public class DiscreteNaiveBayesModel implements Model<Vector, Double>, Exportable<DiscreteNaiveBayesModel>, Serializable {
+public class DiscreteNaiveBayesModel implements IgniteModel<Vector, Double>, Exportable<DiscreteNaiveBayesModel>, Serializable {
     /** */
     private static final long serialVersionUID = -127386523291350345L;
     /**
@@ -74,7 +74,7 @@ public class DiscreteNaiveBayesModel implements Model<Vector, Double>, Exportabl
      * @param vector features vector.
      * @return a label with max probability.
      */
-    @Override public Double apply(Vector vector) {
+    @Override public Double predict(Vector vector) {
         double maxProbapilityPower = -Double.MAX_VALUE;
         int maxLabelIndex = -1;
 
index 66c97b3..92617d7 100644 (file)
@@ -20,14 +20,14 @@ package org.apache.ignite.ml.naivebayes.gaussian;
 import java.io.Serializable;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Simple naive Bayes model which predicts result value {@code y} belongs to a class {@code C_k, k in [0..K]} as {@code
  * p(C_k,y) = p(C_k)*p(y_1,C_k) *...*p(y_n,C_k) / p(y)}. Return the number of the most possible class.
  */
-public class GaussianNaiveBayesModel implements Model<Vector, Double>, Exportable<GaussianNaiveBayesModel>, Serializable {
+public class GaussianNaiveBayesModel implements IgniteModel<Vector, Double>, Exportable<GaussianNaiveBayesModel>, Serializable {
     /** */
     private static final long serialVersionUID = -127386523291350345L;
     /** Means of features for all classes. kth row contains means for labels[k] class. */
@@ -63,7 +63,7 @@ public class GaussianNaiveBayesModel implements Model<Vector, Double>, Exportabl
     }
 
     /** Returns a number of class to which the input belongs. */
-    @Override public Double apply(Vector vector) {
+    @Override public Double predict(Vector vector) {
         int k = classProbabilities.length;
 
         double maxProbability = .0;
index b469603..df807b0 100644 (file)
@@ -23,7 +23,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.Tracer;
 import org.apache.ignite.ml.math.functions.IgniteDifferentiableDoubleToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
@@ -43,7 +43,7 @@ import static org.apache.ignite.ml.math.util.MatrixUtil.elementWiseTimes;
 /**
  * Class encapsulating logic of multilayer perceptron.
  */
-public class MultilayerPerceptron implements Model<Matrix, Matrix>, SmoothParametrized<MultilayerPerceptron>,
+public class MultilayerPerceptron implements IgniteModel<Matrix, Matrix>, SmoothParametrized<MultilayerPerceptron>,
     Serializable {
     /**
      * This MLP architecture.
@@ -176,7 +176,7 @@ public class MultilayerPerceptron implements Model<Matrix, Matrix>, SmoothParame
      * @param val Matrix containing objects.
      * @return Matrix with predicted vectors.
      */
-    @Override public Matrix apply(Matrix val) {
+    @Override public Matrix predict(Matrix val) {
         MLPState state = new MLPState(null);
         forwardPass(val.transpose(), state, false);
         return state.activatorsOutput.get(state.activatorsOutput.size() - 1).transpose();
index 5eb8722..c1cf037 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.optimization;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
@@ -26,7 +26,7 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
 /**
  * Interface for models which are smooth functions of their parameters.
  */
-public interface SmoothParametrized<M extends Parametrized<M>> extends Parametrized<M>, Model<Matrix, Matrix> {
+public interface SmoothParametrized<M extends Parametrized<M>> extends Parametrized<M>, IgniteModel<Matrix, Matrix> {
     /**
      * Compose function in the following way: feed output of this model as input to second argument to loss function.
      * After that we have a function g of three arguments: input, ground truth, parameters.
index 1aeac6b..e6e4227 100644 (file)
@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Map;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.dataset.impl.cache.CacheBasedDatasetBuilder;
 import org.apache.ignite.ml.dataset.impl.local.LocalDatasetBuilder;
@@ -151,7 +151,7 @@ public class Pipeline<K, V, R> {
             );
         });
 
-        Model<Vector, Double> internalMdl = finalStage
+        IgniteModel<Vector, Double> internalMdl = finalStage
             .fit(
                 datasetBuilder,
                 finalFeatureExtractor,
index edd70eb..ccd1fb1 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.pipeline;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
@@ -27,9 +27,9 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
  * @param <K> Type of a key in {@code upstream} data.
  * @param <V> Type of a value in {@code upstream} data.
  */
-public class PipelineMdl<K, V> implements Model<Vector, Double> {
+public class PipelineMdl<K, V> implements IgniteModel<Vector, Double> {
     /** Internal model produced by {@link Pipeline}. */
-    private Model<Vector, Double> internalMdl;
+    private IgniteModel<Vector, Double> internalMdl;
 
     /** Feature extractor. */
     private IgniteBiFunction<K, V, Vector> featureExtractor;
@@ -38,8 +38,8 @@ public class PipelineMdl<K, V> implements Model<Vector, Double> {
     private IgniteBiFunction<K, V, Double> lbExtractor;
 
     /** */
-    @Override public Double apply(Vector vector) {
-        return internalMdl.apply(vector);
+    @Override public Double predict(Vector vector) {
+        return internalMdl.predict(vector);
     }
 
     /** */
@@ -53,12 +53,12 @@ public class PipelineMdl<K, V> implements Model<Vector, Double> {
     }
 
     /** */
-    public Model<Vector, Double> getInternalMdl() {
+    public IgniteModel<Vector, Double> getInternalMdl() {
         return internalMdl;
     }
 
     /** */
-    public PipelineMdl<K, V> withInternalMdl(Model<Vector, Double> internalMdl) {
+    public PipelineMdl<K, V> withInternalMdl(IgniteModel<Vector, Double> internalMdl) {
         this.internalMdl = internalMdl;
         return this;
     }
index 4d9d28e..b298524 100644 (file)
@@ -21,14 +21,14 @@ import java.io.Serializable;
 import java.util.Objects;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Simple linear regression model which predicts result value Y as a linear combination of input variables:
  * Y = weights * X + intercept.
  */
-public class LinearRegressionModel implements Model<Vector, Double>, Exportable<LinearRegressionModel>, Serializable {
+public class LinearRegressionModel implements IgniteModel<Vector, Double>, Exportable<LinearRegressionModel>, Serializable {
     /** */
     private static final long serialVersionUID = -105984600091550226L;
 
@@ -55,7 +55,7 @@ public class LinearRegressionModel implements Model<Vector, Double>, Exportable<
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector input) {
+    @Override public Double predict(Vector input) {
         return input.dot(weights) + intercept;
     }
 
index 5cc44f8..f041fbf 100644 (file)
@@ -21,13 +21,13 @@ import java.io.Serializable;
 import java.util.Objects;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Logistic regression (logit model) is a generalized linear model used for binomial regression.
  */
-public class LogisticRegressionModel implements Model<Vector, Double>, Exportable<LogisticRegressionModel>, Serializable {
+public class LogisticRegressionModel implements IgniteModel<Vector, Double>, Exportable<LogisticRegressionModel>, Serializable {
     /** */
     private static final long serialVersionUID = -133984600091550776L;
 
@@ -130,7 +130,7 @@ public class LogisticRegressionModel implements Model<Vector, Double>, Exportabl
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector input) {
+    @Override public Double predict(Vector input) {
 
         final double res = sigmoid(input.dot(weights) + intercept);
 
index ef4f30f..07dd57e 100644 (file)
@@ -28,7 +28,7 @@ import java.util.function.Function;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.dataset.impl.cache.CacheBasedDatasetBuilder;
 import org.apache.ignite.ml.dataset.impl.local.LocalDatasetBuilder;
@@ -59,7 +59,7 @@ import org.apache.ignite.ml.trainers.DatasetTrainer;
  * @param <K> Type of a key in {@code upstream} data.
  * @param <V> Type of a value in {@code upstream} data.
  */
-public class CrossValidation<M extends Model<Vector, L>, L, K, V> {
+public class CrossValidation<M extends IgniteModel<Vector, L>, L, K, V> {
     /**
      * Computes cross-validated metrics.
      *
index 06be96b..9dccd59 100644 (file)
@@ -23,7 +23,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.query.QueryCursor;
 import org.apache.ignite.cache.query.ScanQuery;
 import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.selection.scoring.LabelPair;
@@ -47,7 +47,7 @@ public class CacheBasedLabelPairCursor<L, K, V> implements LabelPairCursor<L> {
     private final IgniteBiFunction<K, V, L> lbExtractor;
 
     /** Model for inference. */
-    private final Model<Vector, L> mdl;
+    private final IgniteModel<Vector, L> mdl;
 
     /**
      * Constructs a new instance of cache based truth with prediction cursor.
@@ -60,7 +60,7 @@ public class CacheBasedLabelPairCursor<L, K, V> implements LabelPairCursor<L> {
      */
     public CacheBasedLabelPairCursor(IgniteCache<K, V> upstreamCache, IgniteBiPredicate<K, V> filter,
                                      IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor,
-                                     Model<Vector, L> mdl) {
+                                     IgniteModel<Vector, L> mdl) {
         this.cursor = query(upstreamCache, filter);
         this.featureExtractor = featureExtractor;
         this.lbExtractor = lbExtractor;
@@ -77,7 +77,7 @@ public class CacheBasedLabelPairCursor<L, K, V> implements LabelPairCursor<L> {
      */
     public CacheBasedLabelPairCursor(IgniteCache<K, V> upstreamCache,
         IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor,
-        Model<Vector, L> mdl) {
+        IgniteModel<Vector, L> mdl) {
         this.cursor = query(upstreamCache);
         this.featureExtractor = featureExtractor;
         this.lbExtractor = lbExtractor;
@@ -150,7 +150,7 @@ public class CacheBasedLabelPairCursor<L, K, V> implements LabelPairCursor<L> {
             Vector features = featureExtractor.apply(entry.getKey(), entry.getValue());
             L lb = lbExtractor.apply(entry.getKey(), entry.getValue());
 
-            return new LabelPair<>(lb, mdl.apply(features));
+            return new LabelPair<>(lb, mdl.predict(features));
         }
     }
 }
index d8c2240..9679ae5 100644 (file)
@@ -21,7 +21,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.selection.scoring.LabelPair;
@@ -48,7 +48,7 @@ public class LocalLabelPairCursor<L, K, V, T> implements LabelPairCursor<L> {
     private final IgniteBiFunction<K, V, L> lbExtractor;
 
     /** Model for inference. */
-    private final Model<Vector, L> mdl;
+    private final IgniteModel<Vector, L> mdl;
 
     /**
      * Constructs a new instance of local truth with prediction cursor.
@@ -61,7 +61,7 @@ public class LocalLabelPairCursor<L, K, V, T> implements LabelPairCursor<L> {
      */
     public LocalLabelPairCursor(Map<K, V> upstreamMap, IgniteBiPredicate<K, V> filter,
                                 IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor,
-                                Model<Vector, L> mdl) {
+                                IgniteModel<Vector, L> mdl) {
         this.upstreamMap = upstreamMap;
         this.filter = filter;
         this.featureExtractor = featureExtractor;
@@ -125,7 +125,7 @@ public class LocalLabelPairCursor<L, K, V, T> implements LabelPairCursor<L> {
 
             nextEntry = null;
 
-            return new LabelPair<>(lb, mdl.apply(features));
+            return new LabelPair<>(lb, mdl.predict(features));
         }
 
         /**
index 5cbe10f..7b9698f 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.selection.scoring.evaluator;
 import java.util.Map;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.selection.scoring.cursor.CacheBasedLabelPairCursor;
@@ -47,7 +47,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <L, K, V> double evaluate(IgniteCache<K, V> dataCache,
-        Model<Vector, L> mdl,
+        IgniteModel<Vector, L> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, L> lbExtractor,
         Metric<L> metric) {
@@ -67,7 +67,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <L, K, V> double evaluate(Map<K, V> dataCache,
-        Model<Vector, L> mdl,
+        IgniteModel<Vector, L> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, L> lbExtractor,
         Metric<L> metric) {
@@ -89,7 +89,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <L, K, V> double evaluate(IgniteCache<K, V> dataCache, IgniteBiPredicate<K, V> filter,
-        Model<Vector, L> mdl,
+        IgniteModel<Vector, L> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, L> lbExtractor,
         Metric<L> metric) {
@@ -111,7 +111,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <L, K, V> double evaluate(Map<K, V> dataCache, IgniteBiPredicate<K, V> filter,
-        Model<Vector, L> mdl,
+        IgniteModel<Vector, L> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, L> lbExtractor,
         Metric<L> metric) {
@@ -130,7 +130,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <K, V> BinaryClassificationMetricValues evaluate(IgniteCache<K, V> dataCache,
-        Model<Vector, Double> mdl,
+        IgniteModel<Vector, Double> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         return calcMetricValues(dataCache, null, mdl, featureExtractor, lbExtractor);
@@ -148,7 +148,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <K, V> BinaryClassificationMetricValues evaluate(Map<K, V> dataCache,
-        Model<Vector, Double> mdl,
+        IgniteModel<Vector, Double> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         return calcMetricValues(dataCache, null, mdl, featureExtractor, lbExtractor);
@@ -168,7 +168,7 @@ public class BinaryClassificationEvaluator {
      */
     public static <K, V> BinaryClassificationMetricValues evaluate(IgniteCache<K, V> dataCache,
         IgniteBiPredicate<K, V> filter,
-        Model<Vector, Double> mdl,
+        IgniteModel<Vector, Double> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         return calcMetricValues(dataCache, filter, mdl, featureExtractor, lbExtractor);
@@ -187,7 +187,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     public static <K, V> BinaryClassificationMetricValues evaluate(Map<K, V> dataCache, IgniteBiPredicate<K, V> filter,
-        Model<Vector, Double> mdl,
+        IgniteModel<Vector, Double> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         return calcMetricValues(dataCache, filter, mdl, featureExtractor, lbExtractor);
@@ -207,7 +207,7 @@ public class BinaryClassificationEvaluator {
      */
     private static <K, V> BinaryClassificationMetricValues calcMetricValues(IgniteCache<K, V> dataCache,
         IgniteBiPredicate<K, V> filter,
-        Model<Vector, Double> mdl,
+        IgniteModel<Vector, Double> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         BinaryClassificationMetricValues metricValues;
@@ -243,7 +243,7 @@ public class BinaryClassificationEvaluator {
      */
     private static <K, V> BinaryClassificationMetricValues calcMetricValues(Map<K, V> dataCache,
         IgniteBiPredicate<K, V> filter,
-        Model<Vector, Double> mdl,
+        IgniteModel<Vector, Double> mdl,
         IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         BinaryClassificationMetricValues metricValues;
@@ -280,7 +280,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     private static <L, K, V> double calculateMetric(IgniteCache<K, V> dataCache, IgniteBiPredicate<K, V> filter,
-        Model<Vector, L> mdl, IgniteBiFunction<K, V, Vector> featureExtractor,
+        IgniteModel<Vector, L> mdl, IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, L> lbExtractor, Metric<L> metric) {
         double metricRes;
 
@@ -315,7 +315,7 @@ public class BinaryClassificationEvaluator {
      * @return Computed metric.
      */
     private static <L, K, V> double calculateMetric(Map<K, V> dataCache, IgniteBiPredicate<K, V> filter,
-        Model<Vector, L> mdl, IgniteBiFunction<K, V, Vector> featureExtractor,
+        IgniteModel<Vector, L> mdl, IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, L> lbExtractor, Metric<L> metric) {
         double metricRes;
 
index 579fdb2..4ee822b 100644 (file)
@@ -21,13 +21,13 @@ import java.io.Serializable;
 import java.util.Objects;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Base class for SVM linear classification model.
  */
-public class SVMLinearClassificationModel implements Model<Vector, Double>, Exportable<SVMLinearClassificationModel>, Serializable {
+public class SVMLinearClassificationModel implements IgniteModel<Vector, Double>, Exportable<SVMLinearClassificationModel>, Serializable {
     /** */
     private static final long serialVersionUID = -996984622291440226L;
 
@@ -94,7 +94,7 @@ public class SVMLinearClassificationModel implements Model<Vector, Double>, Expo
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector input) {
+    @Override public Double predict(Vector input) {
         final double res = input.dot(weights) + intercept;
         if (isKeepingRawLabels)
             return res;
index 0e80325..1a251fa 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.trainers;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
 
 /**
@@ -29,7 +29,7 @@ import org.apache.ignite.ml.math.functions.IgniteFunction;
  * @param <OW> Type of output of inner model.
  * @param <M> Type of inner model.
  */
-public class AdaptableDatasetModel<I, O, IW, OW, M extends Model<IW, OW>> implements Model<I, O> {
+public class AdaptableDatasetModel<I, O, IW, OW, M extends IgniteModel<IW, OW>> implements IgniteModel<I, O> {
     /** Function applied before inner model. */
     private final IgniteFunction<I, IW> before;
 
@@ -55,13 +55,13 @@ public class AdaptableDatasetModel<I, O, IW, OW, M extends Model<IW, OW>> implem
     /**
      * Result of this model application is a result of composition {@code before `andThen` inner mdl `andThen` after}.
      */
-    @Override public O apply(I i) {
-        return before.andThen(mdl).andThen(after).apply(i);
+    @Override public O predict(I i) {
+        return before.andThen(mdl::predict).andThen(after).apply(i);
     }
 
     /** {@inheritDoc} */
-    @Override public <O1> AdaptableDatasetModel<I, O1, IW, OW, M> andThen(IgniteFunction<O, O1> after) {
-        return new AdaptableDatasetModel<>(before, mdl, i -> after.apply(this.after.apply(i)));
+    @Override public <O1> AdaptableDatasetModel<I, O1, IW, OW, M> andThen(IgniteModel<O, O1> after) {
+        return new AdaptableDatasetModel<>(before, mdl, i -> after.predict(this.after.apply(i)));
     }
 
     /**
@@ -92,7 +92,7 @@ public class AdaptableDatasetModel<I, O, IW, OW, M extends Model<IW, OW>> implem
      * @param <M1> Type of inner model.
      * @return New instance of this class with changed inner model.
      */
-    public <M1 extends Model<IW, OW>> AdaptableDatasetModel<I, O, IW, OW, M1> withInnerModel(M1 mdl) {
+    public <M1 extends IgniteModel<IW, OW>> AdaptableDatasetModel<I, O, IW, OW, M1> withInnerModel(M1 mdl) {
         return new AdaptableDatasetModel<>(before, mdl, after);
     }
 }
index 7e2e810..4205286 100644 (file)
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.ml.trainers;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
@@ -35,7 +35,7 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
  * @param <M> Type of model produced by wrapped model.
  * @param <L> Type of labels.
  */
-public class AdaptableDatasetTrainer<I, O, IW, OW, M extends Model<IW, OW>, L>
+public class AdaptableDatasetTrainer<I, O, IW, OW, M extends IgniteModel<IW, OW>, L>
     extends DatasetTrainer<AdaptableDatasetModel<I, O, IW, OW, M>, L> {
     /** Wrapped trainer. */
     private final DatasetTrainer<M, L> wrapped;
@@ -56,7 +56,7 @@ public class AdaptableDatasetTrainer<I, O, IW, OW, M extends Model<IW, OW>, L>
      * @param <L> Type of labels.
      * @return Instance of this class.
      */
-    public static <I, O, M extends Model<I, O>, L> AdaptableDatasetTrainer<I, O, I, O, M, L> of(DatasetTrainer<M, L> wrapped) {
+    public static <I, O, M extends IgniteModel<I, O>, L> AdaptableDatasetTrainer<I, O, I, O, M, L> of(DatasetTrainer<M, L> wrapped) {
         return new AdaptableDatasetTrainer<>(IgniteFunction.identity(), wrapped, IgniteFunction.identity());
     }
 
index 3f715dc..88c4bcd 100644 (file)
@@ -21,7 +21,7 @@ import java.util.Map;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.dataset.impl.cache.CacheBasedDatasetBuilder;
 import org.apache.ignite.ml.dataset.impl.local.LocalDatasetBuilder;
@@ -39,7 +39,7 @@ import org.jetbrains.annotations.NotNull;
  * @param <M> Type of a produced model.
  * @param <L> Type of a label.
  */
-public abstract class DatasetTrainer<M extends Model, L> {
+public abstract class DatasetTrainer<M extends IgniteModel, L> {
     /** Learning environment builder. */
     protected LearningEnvironmentBuilder envBuilder = LearningEnvironmentBuilder.defaultBuilder();
 
index 5ae7de8..815bdd0 100644 (file)
 
 package org.apache.ignite.ml.trainers;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 
 /**
  * Interface for trainers that trains on dataset with multiple label per object.
  *
  * @param <M> Type of a produced model.
  */
-public abstract class MultiLabelDatasetTrainer<M extends Model> extends DatasetTrainer<M, double[]> {
+public abstract class MultiLabelDatasetTrainer<M extends IgniteModel> extends DatasetTrainer<M, double[]> {
 }
index 38dda93..c4a1fa4 100644 (file)
 
 package org.apache.ignite.ml.trainers;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 
 /**
  * Interface for trainers that trains on dataset with singe label per object.
  *
  * @param <M> Type of a produced model.
  */
-public abstract class SingleLabelDatasetTrainer<M extends Model> extends DatasetTrainer<M, Double> {
+public abstract class SingleLabelDatasetTrainer<M extends IgniteModel> extends DatasetTrainer<M, Double> {
 }
index 80a57e0..43c1600 100644 (file)
@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Random;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
@@ -52,7 +52,7 @@ public class TrainerTransformers {
      * @param <L> Type of labels.
      * @return Bagged trainer.
      */
-    public static <M extends Model<Vector, Double>, L> DatasetTrainer<ModelsComposition, L> makeBagged(
+    public static <M extends IgniteModel<Vector, Double>, L> DatasetTrainer<ModelsComposition, L> makeBagged(
         DatasetTrainer<M, L> trainer,
         int ensembleSize,
         double subsampleRatio,
@@ -71,7 +71,7 @@ public class TrainerTransformers {
      * @param <L> Type of labels.
      * @return Bagged trainer.
      */
-    public static <M extends Model<Vector, Double>, L> DatasetTrainer<ModelsComposition, L> makeBagged(
+    public static <M extends IgniteModel<Vector, Double>, L> DatasetTrainer<ModelsComposition, L> makeBagged(
         DatasetTrainer<M, L> trainer,
         int ensembleSize,
         double subsampleRatio,
@@ -142,7 +142,7 @@ public class TrainerTransformers {
      * @param <M> Type of model.
      * @return Composition of models trained on bagged dataset.
      */
-    private static <K, V, M extends Model<Vector, Double>> ModelsComposition runOnEnsemble(
+    private static <K, V, M extends IgniteModel<Vector, Double>> ModelsComposition runOnEnsemble(
         IgniteTriFunction<DatasetBuilder<K, V>, Integer, IgniteBiFunction<K, V, Vector>, IgniteSupplier<M>> trainingTaskGenerator,
         DatasetBuilder<K, V> datasetBuilder,
         int ensembleSize,
@@ -257,7 +257,7 @@ public class TrainerTransformers {
      * @param <Y> Output space.
      * @param <M> Model.
      */
-    private static class ModelWithMapping<X, Y, M extends Model<X, Y>> implements Model<X, Y> {
+    private static class ModelWithMapping<X, Y, M extends IgniteModel<X, Y>> implements IgniteModel<X, Y> {
         /** Model. */
         private final M model;
 
@@ -295,8 +295,8 @@ public class TrainerTransformers {
         }
 
         /** {@inheritDoc} */
-        @Override public Y apply(X x) {
-            return model.apply(mapping.apply(x));
+        @Override public Y predict(X x) {
+            return model.predict(mapping.apply(x));
         }
 
         /**
index ef4d115..7eff06c 100644 (file)
@@ -60,17 +60,17 @@ public class DecisionTreeConditionalNode implements DecisionTreeNode {
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector features) {
+    @Override public Double predict(Vector features) {
         double val = features.get(col);
 
         if (Double.isNaN(val)) {
             if (missingNode == null)
                 throw new IllegalArgumentException("Feature must not be null or missing node should be specified");
 
-            return missingNode.apply(features);
+            return missingNode.predict(features);
         }
 
-        return val > threshold ? thenNode.apply(features) : elseNode.apply(features);
+        return val > threshold ? thenNode.predict(features) : elseNode.predict(features);
     }
 
     /** */
index 97cc3ee..43f0f05 100644 (file)
@@ -39,7 +39,7 @@ public class DecisionTreeLeafNode implements DecisionTreeNode {
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector doubles) {
+    @Override public Double predict(Vector doubles) {
         return val;
     }
 
index bd065f0..80036ba 100644 (file)
 
 package org.apache.ignite.ml.tree;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Base interface for decision tree nodes.
  */
-public interface DecisionTreeNode extends Model<Vector, Double> {
+public interface DecisionTreeNode extends IgniteModel<Vector, Double> {
 }
index 71e840c..bc771eb 100644 (file)
@@ -19,7 +19,7 @@ package org.apache.ignite.ml.tree.boosting;
 
 import java.util.Arrays;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.boosting.GDBLearningStrategy;
 import org.apache.ignite.ml.composition.boosting.GDBTrainer;
@@ -56,15 +56,15 @@ public class GDBOnTreesLearningStrategy  extends GDBLearningStrategy {
     }
 
     /** {@inheritDoc} */
-    @Override public <K, V> List<Model<Vector, Double>> update(GDBTrainer.GDBModel mdlToUpdate,
+    @Override public <K, V> List<IgniteModel<Vector, Double>> update(GDBTrainer.GDBModel mdlToUpdate,
         DatasetBuilder<K, V> datasetBuilder, IgniteBiFunction<K, V, Vector> featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
 
-        DatasetTrainer<? extends Model<Vector, Double>, Double> trainer = baseMdlTrainerBuilder.get();
+        DatasetTrainer<? extends IgniteModel<Vector, Double>, Double> trainer = baseMdlTrainerBuilder.get();
         assert trainer instanceof DecisionTree;
         DecisionTree decisionTreeTrainer = (DecisionTree) trainer;
 
-        List<Model<Vector, Double>> models = initLearningState(mdlToUpdate);
+        List<IgniteModel<Vector, Double>> models = initLearningState(mdlToUpdate);
 
         ConvergenceChecker<K,V> convCheck = checkConvergenceStgyFactory.create(sampleSize,
             externalLbToInternalMapping, loss, datasetBuilder, featureExtractor, lbExtractor);
@@ -87,7 +87,7 @@ public class GDBOnTreesLearningStrategy  extends GDBLearningStrategy {
                         part.setCopiedOriginalLabels(Arrays.copyOf(part.getLabels(), part.getLabels().length));
 
                     for(int j = 0; j < part.getLabels().length; j++) {
-                        double mdlAnswer = currComposition.apply(VectorUtils.of(part.getFeatures()[j]));
+                        double mdlAnswer = currComposition.predict(VectorUtils.of(part.getFeatures()[j]));
                         double originalLbVal = externalLbToInternalMapping.apply(part.getCopiedOriginalLabels()[j]);
                         part.getLabels()[j] = -loss.gradient(sampleSize, originalLbVal, mdlAnswer);
                     }
index 3ee90cb..d9b8e30 100644 (file)
@@ -30,7 +30,7 @@ import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.dataset.Dataset;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
@@ -248,7 +248,7 @@ public abstract class RandomForestTrainer<L, S extends ImpurityComputer<Bootstra
     @Override protected <K, V> ModelsComposition updateModel(ModelsComposition mdl, DatasetBuilder<K, V> datasetBuilder,
         IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Double> lbExtractor) {
 
-        ArrayList<Model<Vector, Double>> oldModels = new ArrayList<>(mdl.getModels());
+        ArrayList<IgniteModel<Vector, Double>> oldModels = new ArrayList<>(mdl.getModels());
         ModelsComposition newModels = fit(datasetBuilder, featureExtractor, lbExtractor);
         oldModels.addAll(newModels.getModels());
 
index 528e31d..8c11bdb 100644 (file)
@@ -20,13 +20,13 @@ package org.apache.ignite.ml.tree.randomforest.data;
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Decision tree node class.
  */
-public class TreeNode implements Model<Vector, Double>, Serializable {
+public class TreeNode implements IgniteModel<Vector, Double>, Serializable {
     /** Serial version uid. */
     private static final long serialVersionUID = -8546263332508653661L;
 
@@ -83,16 +83,16 @@ public class TreeNode implements Model<Vector, Double>, Serializable {
     }
 
     /** {@inheritDoc} */
-    public Double apply(Vector features) {
+    public Double predict(Vector features) {
         assert type != Type.UNKNOWN;
 
         if (type == Type.LEAF)
             return val;
         else {
             if (features.get(featureId) <= val)
-                return left.apply(features);
+                return left.predict(features);
             else
-                return right.apply(features);
+                return right.predict(features);
         }
     }
 
index e47868d..e9fcb74 100644 (file)
@@ -20,13 +20,13 @@ package org.apache.ignite.ml.tree.randomforest.data;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Tree root class.
  */
-public class TreeRoot implements Model<Vector, Double> {
+public class TreeRoot implements IgniteModel<Vector, Double> {
     /** Serial version uid. */
     private static final long serialVersionUID = 531797299171329057L;
 
@@ -48,8 +48,8 @@ public class TreeRoot implements Model<Vector, Double> {
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(Vector vector) {
-        return node.apply(vector);
+    @Override public Double predict(Vector vector) {
+        return node.predict(vector);
     }
 
     /** */
index b85a5c3..fc3bf5c 100644 (file)
@@ -405,7 +405,7 @@ public class TestUtils {
      * @param <V> Type of output.
      * @return Model which returns given constant.
      */
-    public static <T, V> Model<T, V> constantModel(V v) {
+    public static <T, V> IgniteModel<T, V> constantModel(V v) {
         return t -> v;
     }
 
@@ -419,7 +419,7 @@ public class TestUtils {
      * @param <L> Type of dataset labels.
      * @return Trainer which independently of dataset outputs given model.
      */
-    public static <I, O, M extends Model<I, O>, L> DatasetTrainer<M, L> constantTrainer(M ml) {
+    public static <I, O, M extends IgniteModel<I, O>, L> DatasetTrainer<M, L> constantTrainer(M ml) {
         return new DatasetTrainer<M, L>() {
             /** {@inheritDoc} */
             @Override public <K, V> M fit(DatasetBuilder<K, V> datasetBuilder,
index f71b7b3..cc652e8 100644 (file)
@@ -48,10 +48,10 @@ public class KMeansModelTest {
 
         Assert.assertTrue(mdl.toString().contains("KMeansModel"));
 
-        Assert.assertEquals(mdl.apply(new DenseVector(new double[]{1.1, 1.1})), 0.0, PRECISION);
-        Assert.assertEquals(mdl.apply(new DenseVector(new double[]{-1.1, 1.1})), 1.0, PRECISION);
-        Assert.assertEquals(mdl.apply(new DenseVector(new double[]{1.1, -1.1})), 2.0, PRECISION);
-        Assert.assertEquals(mdl.apply(new DenseVector(new double[]{-1.1, -1.1})), 3.0, PRECISION);
+        Assert.assertEquals(mdl.predict(new DenseVector(new double[]{1.1, 1.1})), 0.0, PRECISION);
+        Assert.assertEquals(mdl.predict(new DenseVector(new double[]{-1.1, 1.1})), 1.0, PRECISION);
+        Assert.assertEquals(mdl.predict(new DenseVector(new double[]{1.1, -1.1})), 2.0, PRECISION);
+        Assert.assertEquals(mdl.predict(new DenseVector(new double[]{-1.1, -1.1})), 3.0, PRECISION);
 
         Assert.assertEquals(mdl.distanceMeasure(), distanceMeasure);
         Assert.assertEquals(mdl.getAmountOfClusters(), 4);
index 205f0ff..e33ad08 100644 (file)
@@ -66,9 +66,9 @@ public class KMeansTrainerTest extends TrainerTest {
         );
 
         Vector firstVector = new DenseVector(new double[] {2.0, 2.0});
-        assertEquals(knnMdl.apply(firstVector), 0.0, PRECISION);
+        assertEquals(knnMdl.predict(firstVector), 0.0, PRECISION);
         Vector secondVector = new DenseVector(new double[] {-2.0, -2.0});
-        assertEquals(knnMdl.apply(secondVector), 0.0, PRECISION);
+        assertEquals(knnMdl.predict(secondVector), 0.0, PRECISION);
         assertEquals(trainer.getMaxIterations(), 1);
         assertEquals(trainer.getEpsilon(), PRECISION, PRECISION);
     }
@@ -97,10 +97,10 @@ public class KMeansTrainerTest extends TrainerTest {
 
         Vector firstVector = new DenseVector(new double[] {2.0, 2.0});
         Vector secondVector = new DenseVector(new double[] {-2.0, -2.0});
-        assertEquals(originalMdl.apply(firstVector), updatedMdlOnSameDataset.apply(firstVector), PRECISION);
-        assertEquals(originalMdl.apply(secondVector), updatedMdlOnSameDataset.apply(secondVector), PRECISION);
-        assertEquals(originalMdl.apply(firstVector), updatedMdlOnEmptyDataset.apply(firstVector), PRECISION);
-        assertEquals(originalMdl.apply(secondVector), updatedMdlOnEmptyDataset.apply(secondVector), PRECISION);
+        assertEquals(originalMdl.predict(firstVector), updatedMdlOnSameDataset.predict(firstVector), PRECISION);
+        assertEquals(originalMdl.predict(secondVector), updatedMdlOnSameDataset.predict(secondVector), PRECISION);
+        assertEquals(originalMdl.predict(firstVector), updatedMdlOnEmptyDataset.predict(firstVector), PRECISION);
+        assertEquals(originalMdl.predict(secondVector), updatedMdlOnEmptyDataset.predict(secondVector), PRECISION);
     }
 
     /** */
index cfc081b..66be960 100644 (file)
 
 package org.apache.ignite.ml.common;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.junit.Test;
 
 import static org.junit.Assert.assertNotNull;
 
 /**
- * Tests for {@link Model} functionality.
+ * Tests for {@link IgniteModel} functionality.
  */
 public class ModelTest {
     /** */
     @Test
     public void testCombine() {
-        Model<Object, Object> mdl = new TestModel<>().combine(new TestModel<>(), (x, y) -> x);
+        IgniteModel<Object, Object> mdl = new TestModel<>().combine(new TestModel<>(), (x, y) -> x);
 
         assertNotNull(mdl.toString(true));
         assertNotNull(mdl.toString(false));
     }
 
     /** */
-    private static class TestModel<T, V> implements Model<T, V> {
+    private static class TestModel<T, V> implements IgniteModel<T, V> {
         /** {@inheritDoc} */
-        @Override public V apply(T t) {
+        @Override public V predict(T t) {
             return null;
         }
     }
index 405c70b..dd4b11e 100644 (file)
@@ -19,7 +19,7 @@ package org.apache.ignite.ml.composition;
 
 import java.util.Arrays;
 import java.util.Map;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.TestUtils;
 import org.apache.ignite.ml.common.TrainerTest;
 import org.apache.ignite.ml.composition.predictionsaggregator.MeanValuePredictionsAggregator;
@@ -95,8 +95,8 @@ public class BaggingTest extends TrainerTest {
             (k, v) -> v[0]
         );
 
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 10)), PRECISION);
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(10, 100)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 10)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(10, 100)), PRECISION);
     }
 
     /**
@@ -120,7 +120,7 @@ public class BaggingTest extends TrainerTest {
             new MeanValuePredictionsAggregator())
             .fit(cacheMock, parts, null, null);
 
-        Double res = mdl.apply(null);
+        Double res = mdl.predict(null);
 
         TestUtils.assertEquals(twoLinearlySeparableClasses.length * subsampleRatio, res, twoLinearlySeparableClasses.length / 10);
     }
@@ -145,7 +145,7 @@ public class BaggingTest extends TrainerTest {
     /**
      * Trainer used to count entries in context or in data.
      */
-    protected static class CountTrainer extends DatasetTrainer<Model<Vector, Double>, Double> {
+    protected static class CountTrainer extends DatasetTrainer<IgniteModel<Vector, Double>, Double> {
         /**
          * Function specifying which entries to count.
          */
@@ -161,7 +161,7 @@ public class BaggingTest extends TrainerTest {
         }
 
         /** {@inheritDoc} */
-        @Override public <K, V> Model<Vector, Double> fit(
+        @Override public <K, V> IgniteModel<Vector, Double> fit(
             DatasetBuilder<K, V> datasetBuilder,
             IgniteBiFunction<K, V, Vector> featureExtractor,
             IgniteBiFunction<K, V, Double> lbExtractor) {
@@ -177,13 +177,13 @@ public class BaggingTest extends TrainerTest {
         }
 
         /** {@inheritDoc} */
-        @Override protected boolean checkState(Model<Vector, Double> mdl) {
+        @Override protected boolean checkState(IgniteModel<Vector, Double> mdl) {
             return true;
         }
 
         /** {@inheritDoc} */
-        @Override protected <K, V> Model<Vector, Double> updateModel(
-            Model<Vector, Double> mdl,
+        @Override protected <K, V> IgniteModel<Vector, Double> updateModel(
+            IgniteModel<Vector, Double> mdl,
             DatasetBuilder<K, V> datasetBuilder,
             IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Double> lbExtractor) {
             return fit(datasetBuilder, featureExtractor, lbExtractor);
index 3336470..5cb2fe1 100644 (file)
@@ -18,7 +18,7 @@
 package org.apache.ignite.ml.composition;
 
 import java.util.Arrays;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.TestUtils;
 import org.apache.ignite.ml.common.TrainerTest;
 import org.apache.ignite.ml.composition.stacking.StackedDatasetTrainer;
@@ -107,10 +107,10 @@ public class StackingTest extends TrainerTest {
                 (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
                 (k, v) -> v[v.length - 1]);
 
-        assertEquals(0.0 * factor, mdl.apply(VectorUtils.of(0.0, 0.0)), 0.3);
-        assertEquals(1.0 * factor, mdl.apply(VectorUtils.of(0.0, 1.0)), 0.3);
-        assertEquals(1.0 * factor, mdl.apply(VectorUtils.of(1.0, 0.0)), 0.3);
-        assertEquals(0.0 * factor, mdl.apply(VectorUtils.of(1.0, 1.0)), 0.3);
+        assertEquals(0.0 * factor, mdl.predict(VectorUtils.of(0.0, 0.0)), 0.3);
+        assertEquals(1.0 * factor, mdl.predict(VectorUtils.of(0.0, 1.0)), 0.3);
+        assertEquals(1.0 * factor, mdl.predict(VectorUtils.of(1.0, 0.0)), 0.3);
+        assertEquals(0.0 * factor, mdl.predict(VectorUtils.of(1.0, 1.0)), 0.3);
     }
 
     /**
@@ -152,10 +152,10 @@ public class StackingTest extends TrainerTest {
                 (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
                 (k, v) -> v[v.length - 1]);
 
-        assertEquals(0.0 * factor, mdl.apply(VectorUtils.of(0.0, 0.0)), 0.3);
-        assertEquals(1.0 * factor, mdl.apply(VectorUtils.of(0.0, 1.0)), 0.3);
-        assertEquals(1.0 * factor, mdl.apply(VectorUtils.of(1.0, 0.0)), 0.3);
-        assertEquals(0.0 * factor, mdl.apply(VectorUtils.of(1.0, 1.0)), 0.3);
+        assertEquals(0.0 * factor, mdl.predict(VectorUtils.of(0.0, 0.0)), 0.3);
+        assertEquals(1.0 * factor, mdl.predict(VectorUtils.of(0.0, 1.0)), 0.3);
+        assertEquals(1.0 * factor, mdl.predict(VectorUtils.of(1.0, 0.0)), 0.3);
+        assertEquals(0.0 * factor, mdl.predict(VectorUtils.of(1.0, 1.0)), 0.3);
     }
 
     /**
@@ -164,7 +164,7 @@ public class StackingTest extends TrainerTest {
      */
     @Test
     public void testINoWaysOfPropagation() {
-        StackedDatasetTrainer<Void, Void, Void, Model<Void, Void>, Void> trainer =
+        StackedDatasetTrainer<Void, Void, Void, IgniteModel<Void, Void>, Void> trainer =
             new StackedDatasetTrainer<>();
         thrown.expect(IllegalStateException.class);
         trainer.fit(null, null, null);
index 4958b4b..f6fd0c4 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition.boosting;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.BiFunction;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.common.TrainerTest;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceCheckerFactory;
@@ -60,7 +60,7 @@ public class GDBTrainerTest extends TrainerTest {
         GDBTrainer trainer = new GDBRegressionOnTreesTrainer(1.0, 2000, 3, 0.0)
             .withUsingIdx(true);
 
-        Model<Vector, Double> mdl = trainer.fit(
+        IgniteModel<Vector, Double> mdl = trainer.fit(
             learningSample, 1,
             (k, v) -> VectorUtils.of(v[0]),
             (k, v) -> v[1]
@@ -70,7 +70,7 @@ public class GDBTrainerTest extends TrainerTest {
         for (int j = 0; j < size; j++) {
             double x = xs[j];
             double y = ys[j];
-            double p = mdl.apply(VectorUtils.of(x));
+            double p = mdl.predict(VectorUtils.of(x));
             mse += Math.pow(y - p, 2);
         }
         mse /= size;
@@ -117,7 +117,7 @@ public class GDBTrainerTest extends TrainerTest {
 
     /** */
     private void testClassifier(BiFunction<GDBTrainer, Map<Integer, double[]>,
-        Model<Vector, Double>> fitter) {
+        IgniteModel<Vector, Double>> fitter) {
         int sampleSize = 100;
         double[] xs = new double[sampleSize];
         double[] ys = new double[sampleSize];
@@ -135,13 +135,13 @@ public class GDBTrainerTest extends TrainerTest {
             .withUsingIdx(true)
             .withCheckConvergenceStgyFactory(new MeanAbsValueConvergenceCheckerFactory(0.3));
 
-        Model<Vector, Double> mdl = fitter.apply(trainer, learningSample);
+        IgniteModel<Vector, Double> mdl = fitter.apply(trainer, learningSample);
 
         int errorsCnt = 0;
         for (int j = 0; j < sampleSize; j++) {
             double x = xs[j];
             double y = ys[j];
-            double p = mdl.apply(VectorUtils.of(x));
+            double p = mdl.predict(VectorUtils.of(x));
             if (p != y)
                 errorsCnt++;
         }
@@ -201,9 +201,9 @@ public class GDBTrainerTest extends TrainerTest {
         dataset.forEach((k,v) -> {
             Vector features = fExtr.apply(k, v);
 
-            Double originalAnswer = originalMdl.apply(features);
-            Double updatedMdlAnswer1 = updatedOnSameDataset.apply(features);
-            Double updatedMdlAnswer2 = updatedOnEmptyDataset.apply(features);
+            Double originalAnswer = originalMdl.predict(features);
+            Double updatedMdlAnswer1 = updatedOnSameDataset.predict(features);
+            Double updatedMdlAnswer2 = updatedOnEmptyDataset.predict(features);
 
             assertEquals(originalAnswer, updatedMdlAnswer1, 0.01);
             assertEquals(originalAnswer, updatedMdlAnswer2, 0.01);
index 50fdf8b..abc24e7 100644 (file)
@@ -32,14 +32,14 @@ import org.junit.Before;
 public abstract class ConvergenceCheckerTest {
     /** Not converged model. */
     protected ModelsComposition notConvergedMdl = new ModelsComposition(Collections.emptyList(), null) {
-        @Override public Double apply(Vector features) {
+        @Override public Double predict(Vector features) {
             return 2.1 * features.get(0);
         }
     };
 
     /** Converged model. */
     protected ModelsComposition convergedMdl = new ModelsComposition(Collections.emptyList(), null) {
-        @Override public Double apply(Vector features) {
+        @Override public Double predict(Vector features) {
             return 2 * (features.get(0) + 1);
         }
     };
index 4b44196..d253ea0 100644 (file)
@@ -21,7 +21,7 @@ import java.util.Map;
 import java.util.Random;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.TestUtils;
 import org.apache.ignite.ml.dataset.Dataset;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
@@ -85,9 +85,9 @@ public class LearningEnvironmentTest {
         int partitions = 10;
         int iterations = 2;
 
-        DatasetTrainer<Model<Object, Vector>, Void> trainer = new DatasetTrainer<Model<Object, Vector>, Void>() {
+        DatasetTrainer<IgniteModel<Object, Vector>, Void> trainer = new DatasetTrainer<IgniteModel<Object, Vector>, Void>() {
             /** {@inheritDoc} */
-            @Override public <K, V> Model<Object, Vector> fit(DatasetBuilder<K, V> datasetBuilder,
+            @Override public <K, V> IgniteModel<Object, Vector> fit(DatasetBuilder<K, V> datasetBuilder,
                 IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Void> lbExtractor) {
                 Dataset<EmptyContext, TestUtils.DataWrapper<Integer>> ds = datasetBuilder.build(envBuilder,
                     new EmptyContextBuilder<>(),
@@ -103,26 +103,26 @@ public class LearningEnvironmentTest {
             }
 
             /** {@inheritDoc} */
-            @Override protected boolean checkState(Model<Object, Vector> mdl) {
+            @Override protected boolean checkState(IgniteModel<Object, Vector> mdl) {
                 return false;
             }
 
             /** {@inheritDoc} */
-            @Override protected <K, V> Model<Object, Vector> updateModel(Model<Object, Vector> mdl,
+            @Override protected <K, V> IgniteModel<Object, Vector> updateModel(IgniteModel<Object, Vector> mdl,
                 DatasetBuilder<K, V> datasetBuilder,
                 IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Void> lbExtractor) {
                 return null;
             }
         };
         trainer.withEnvironmentBuilder(envBuilder);
-        Model<Object, Vector> mdl = trainer.fit(getCacheMock(partitions), partitions, null, null);
+        IgniteModel<Object, Vector> mdl = trainer.fit(getCacheMock(partitions), partitions, null, null);
 
         Vector exp = VectorUtils.zeroes(partitions);
         for (int i = 0; i < partitions; i++)
             exp.set(i, i * iterations);
 
 
-        Vector res = mdl.apply(null);
+        Vector res = mdl.predict(null);
         assertEquals(exp, res);
     }
 
index c670629..7364216 100644 (file)
 
 package org.apache.ignite.ml.inference;
 
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilderTest;
-import org.apache.ignite.ml.inference.builder.SingleInfModelBuilderTest;
-import org.apache.ignite.ml.inference.builder.ThreadedInfModelBuilderTest;
+import junit.framework.JUnit4TestAdapter;
+import junit.framework.TestSuite;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilderTest;
+import org.apache.ignite.ml.inference.builder.SingleModelBuilderTest;
+import org.apache.ignite.ml.inference.builder.ThreadedModelBuilderTest;
 import org.apache.ignite.ml.inference.storage.model.DefaultModelStorageTest;
 import org.apache.ignite.ml.inference.util.DirectorySerializerTest;
 import org.junit.runner.RunWith;
@@ -30,11 +32,23 @@ import org.junit.runners.Suite;
  */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
-    SingleInfModelBuilderTest.class,
-    ThreadedInfModelBuilderTest.class,
+    SingleModelBuilderTest.class,
+    ThreadedModelBuilderTest.class,
     DirectorySerializerTest.class,
     DefaultModelStorageTest.class,
-    IgniteDistributedInfModelBuilderTest.class
+    IgniteDistributedModelBuilderTest.class
 })
 public class InferenceTestSuite {
+    /** */
+    public static TestSuite suite() {
+        TestSuite suite = new TestSuite(InferenceTestSuite.class.getSimpleName());
+
+        suite.addTest(new JUnit4TestAdapter(SingleModelBuilderTest.class));
+        suite.addTest(new JUnit4TestAdapter(ThreadedModelBuilderTest.class));
+        suite.addTest(new JUnit4TestAdapter(DirectorySerializerTest.class));
+        suite.addTest(new JUnit4TestAdapter(DefaultModelStorageTest.class));
+        suite.addTest(new JUnit4TestAdapter(IgniteDistributedModelBuilderTest.class));
+
+        return suite;
+    }
 }
@@ -20,14 +20,14 @@ package org.apache.ignite.ml.inference.builder;
 import java.util.concurrent.Future;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.Model;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
 /**
- * Tests for {@link IgniteDistributedInfModelBuilder} class.
+ * Tests for {@link IgniteDistributedModelBuilder} class.
  */
-public class IgniteDistributedInfModelBuilderTest extends GridCommonAbstractTest {
+public class IgniteDistributedModelBuilderTest extends GridCommonAbstractTest {
     /** Number of nodes in grid */
     private static final int NODE_COUNT = 3;
 
@@ -58,11 +58,11 @@ public class IgniteDistributedInfModelBuilderTest extends GridCommonAbstractTest
     /** */
     @Test
     public void testBuild() {
-        AsyncInfModelBuilder mdlBuilder = new IgniteDistributedInfModelBuilder(ignite, 1, 1);
+        AsyncModelBuilder mdlBuilder = new IgniteDistributedModelBuilder(ignite, 1, 1);
 
-        InfModel<Integer, Future<Integer>> infMdl = mdlBuilder.build(
-            InfModelBuilderTestUtil.getReader(),
-            InfModelBuilderTestUtil.getParser()
+        Model<Integer, Future<Integer>> infMdl = mdlBuilder.build(
+            ModelBuilderTestUtil.getReader(),
+            ModelBuilderTestUtil.getParser()
         );
 
         // TODO: IGNITE-10250: Test hangs sometimes because of Ignite queue issue.
 
 package org.apache.ignite.ml.inference.builder;
 
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 
 /**
  * Util class for model builder tests.
  */
-class InfModelBuilderTestUtil {
+class ModelBuilderTestUtil {
     /**
      * Creates dummy model reader used in tests.
      *
      * @return Dummy model reader used in tests.
      */
-    static InfModelReader getReader() {
+    static ModelReader getReader() {
         return () -> new byte[0];
     }
 
@@ -39,9 +39,9 @@ class InfModelBuilderTestUtil {
      *
      * @return Dummy model parser used in tests.
      */
-    static InfModelParser<Integer, Integer, InfModel<Integer, Integer>> getParser() {
-        return m -> new InfModel<Integer, Integer>() {
-            @Override public Integer apply(Integer input) {
+    static ModelParser<Integer, Integer, Model<Integer, Integer>> getParser() {
+        return m -> new Model<Integer, Integer>() {
+            @Override public Integer predict(Integer input) {
                 return input;
             }
 
 
 package org.apache.ignite.ml.inference.builder;
 
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.Model;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
 /**
- * Tests for {@link SingleInfModelBuilder}.
+ * Tests for {@link SingleModelBuilder}.
  */
-public class SingleInfModelBuilderTest {
+public class SingleModelBuilderTest {
     /** */
     @Test
     public void testBuild() {
-        SyncInfModelBuilder mdlBuilder = new SingleInfModelBuilder();
+        SyncModelBuilder mdlBuilder = new SingleModelBuilder();
 
-        InfModel<Integer, Integer> infMdl = mdlBuilder.build(
-            InfModelBuilderTestUtil.getReader(),
-            InfModelBuilderTestUtil.getParser()
+        Model<Integer, Integer> infMdl = mdlBuilder.build(
+            ModelBuilderTestUtil.getReader(),
+            ModelBuilderTestUtil.getParser()
         );
 
         for (int i = 0; i < 100; i++)
-            assertEquals(Integer.valueOf(i), infMdl.apply(i));
+            assertEquals(Integer.valueOf(i), infMdl.predict(i));
     }
 }
@@ -19,26 +19,26 @@ package org.apache.ignite.ml.inference.builder;
 
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.Model;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
 /**
- * Tests for {@link ThreadedInfModelBuilder} class.
+ * Tests for {@link ThreadedModelBuilder} class.
  */
-public class ThreadedInfModelBuilderTest {
+public class ThreadedModelBuilderTest {
     /** */
     @Test
     public void testBuild() throws ExecutionException, InterruptedException {
-        AsyncInfModelBuilder mdlBuilder = new ThreadedInfModelBuilder(10);
+        AsyncModelBuilder mdlBuilder = new ThreadedModelBuilder(10);
 
-        InfModel<Integer, Future<Integer>> infMdl = mdlBuilder.build(
-            InfModelBuilderTestUtil.getReader(),
-            InfModelBuilderTestUtil.getParser()
+        Model<Integer, Future<Integer>> infMdl = mdlBuilder.build(
+            ModelBuilderTestUtil.getReader(),
+            ModelBuilderTestUtil.getParser()
         );
 
         for (int i = 0; i < 100; i++)
-            assertEquals(Integer.valueOf(i), infMdl.apply(i).get());
+            assertEquals(Integer.valueOf(i), infMdl.predict(i).get());
     }
 }
index 6fe8a63..3683fbb 100644 (file)
@@ -60,7 +60,7 @@ public class KNNClassificationTest {
     /** */
     @Test(expected = IllegalStateException.class)
     public void testNullDataset() {
-        new KNNClassificationModel(null).apply(null);
+        new KNNClassificationModel(null).predict(null);
     }
 
     /** */
@@ -90,9 +90,9 @@ public class KNNClassificationTest {
         assertTrue(!knnMdl.toString(false).isEmpty());
 
         Vector firstVector = new DenseVector(new double[] {2.0, 2.0});
-        assertEquals(knnMdl.apply(firstVector), 1.0);
+        assertEquals(knnMdl.predict(firstVector), 1.0);
         Vector secondVector = new DenseVector(new double[] {-2.0, -2.0});
-        assertEquals(knnMdl.apply(secondVector), 2.0);
+        assertEquals(knnMdl.predict(secondVector), 2.0);
     }
 
     /** */
@@ -118,9 +118,9 @@ public class KNNClassificationTest {
             .withStrategy(NNStrategy.SIMPLE);
 
         Vector firstVector = new DenseVector(new double[] {2.0, 2.0});
-        assertEquals(knnMdl.apply(firstVector), 1.0);
+        assertEquals(knnMdl.predict(firstVector), 1.0);
         Vector secondVector = new DenseVector(new double[] {-2.0, -2.0});
-        assertEquals(knnMdl.apply(secondVector), 2.0);
+        assertEquals(knnMdl.predict(secondVector), 2.0);
     }
 
     /** */
@@ -146,7 +146,7 @@ public class KNNClassificationTest {
             .withStrategy(NNStrategy.SIMPLE);
 
         Vector vector = new DenseVector(new double[] {-1.01, -1.01});
-        assertEquals(knnMdl.apply(vector), 2.0);
+        assertEquals(knnMdl.predict(vector), 2.0);
     }
 
     /** */
@@ -172,7 +172,7 @@ public class KNNClassificationTest {
             .withStrategy(NNStrategy.WEIGHTED);
 
         Vector vector = new DenseVector(new double[] {-1.01, -1.01});
-        assertEquals(knnMdl.apply(vector), 1.0);
+        assertEquals(knnMdl.predict(vector), 1.0);
     }
 
     /** */
@@ -210,7 +210,7 @@ public class KNNClassificationTest {
         );
 
         Vector vector = new DenseVector(new double[] {-1.01, -1.01});
-        assertEquals(originalMdl.apply(vector), updatedOnSameDataset.apply(vector));
-        assertEquals(originalMdl.apply(vector), updatedOnEmptyDataset.apply(vector));
+        assertEquals(originalMdl.predict(vector), updatedOnSameDataset.predict(vector));
+        assertEquals(originalMdl.predict(vector), updatedOnEmptyDataset.predict(vector));
     }
 }
index 9ff0bc2..75ab551 100644 (file)
@@ -60,8 +60,8 @@ public class KNNRegressionTest extends TrainerTest {
             .withStrategy(NNStrategy.SIMPLE);
 
         Vector vector = new DenseVector(new double[] {0, 0, 0, 5.0, 0.0});
-        System.out.println(knnMdl.apply(vector));
-        Assert.assertEquals(15, knnMdl.apply(vector), 1E-12);
+        System.out.println(knnMdl.predict(vector));
+        Assert.assertEquals(15, knnMdl.predict(vector), 1E-12);
     }
 
     /** */
@@ -107,9 +107,9 @@ public class KNNRegressionTest extends TrainerTest {
 
         Vector vector = new DenseVector(new double[] {104.6, 419180, 2822, 2857, 118734, 1956});
 
-        Assert.assertNotNull(knnMdl.apply(vector));
+        Assert.assertNotNull(knnMdl.predict(vector));
 
-        Assert.assertEquals(67857, knnMdl.apply(vector), 2000);
+        Assert.assertEquals(67857, knnMdl.predict(vector), 2000);
 
         Assert.assertTrue(knnMdl.toString().contains(stgy.name()));
         Assert.assertTrue(knnMdl.toString(true).contains(stgy.name()));
@@ -150,7 +150,7 @@ public class KNNRegressionTest extends TrainerTest {
         );
 
         Vector vector = new DenseVector(new double[] {0, 0, 0, 5.0, 0.0});
-        assertEquals(originalMdl.apply(vector), updatedOnSameDataset.apply(vector));
-        assertEquals(originalMdl.apply(vector), updatedOnEmptyDataset.apply(vector));
+        assertEquals(originalMdl.predict(vector), updatedOnSameDataset.predict(vector));
+        assertEquals(originalMdl.predict(vector), updatedOnEmptyDataset.predict(vector));
     }
 }
index 74841a3..b2728c5 100644 (file)
@@ -68,8 +68,8 @@ public class OneVsRestTrainerTest extends TrainerTest {
         Assert.assertTrue(mdl.toString(true).length() > 0);
         Assert.assertTrue(mdl.toString(false).length() > 0);
 
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(-100, 0)), PRECISION);
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 0)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(-100, 0)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 0)), PRECISION);
     }
 
     /** */
@@ -119,8 +119,8 @@ public class OneVsRestTrainerTest extends TrainerTest {
         );
 
         for (Vector vec : vectors) {
-            TestUtils.assertEquals(originalMdl.apply(vec), updatedOnSameDS.apply(vec), PRECISION);
-            TestUtils.assertEquals(originalMdl.apply(vec), updatedOnEmptyDS.apply(vec), PRECISION);
+            TestUtils.assertEquals(originalMdl.predict(vec), updatedOnSameDS.predict(vec), PRECISION);
+            TestUtils.assertEquals(originalMdl.predict(vec), updatedOnEmptyDS.predict(vec), PRECISION);
         }
     }
 }
index f6b947b..41d320d 100644 (file)
@@ -39,7 +39,7 @@ public class DiscreteNaiveBayesModelTest {
         DiscreteNaiveBayesModel mdl = new DiscreteNaiveBayesModel(probabilities, classProbabilities, new double[] {first, second}, thresholds, new DiscreteNaiveBayesSumsHolder());
         Vector observation = VectorUtils.of(2, 0, 1, 2, 0);
 
-        Assert.assertEquals(second, mdl.apply(observation), 0.0001);
+        Assert.assertEquals(second, mdl.predict(observation), 0.0001);
     }
 
 }
index 25fb37b..6c0e323 100644 (file)
@@ -62,6 +62,6 @@ public class DiscreteNaiveBayesTest {
         );
         Vector observation = VectorUtils.of(1, 0, 1, 1, 0);
 
-        Assert.assertEquals(scottish, model.apply(observation), PRECISION);
+        Assert.assertEquals(scottish, model.predict(observation), PRECISION);
     }
 }
index 7592811..d35ea3d 100644 (file)
@@ -43,7 +43,7 @@ public class GaussianNaiveBayesModelTest {
         GaussianNaiveBayesModel mdl = new GaussianNaiveBayesModel(means, variances, probabilities, new double[] {first, second}, null);
         Vector observation = VectorUtils.of(6, 130, 8);
 
-        Assert.assertEquals(second, mdl.apply(observation), 0.0001);
+        Assert.assertEquals(second, mdl.predict(observation), 0.0001);
     }
 
 }
index 504b464..fd95a4e 100644 (file)
@@ -57,7 +57,7 @@ public class GaussianNaiveBayesTest {
         );
         Vector observation = VectorUtils.of(6, 130, 8);
 
-        Assert.assertEquals(female, model.apply(observation), PRECISION);
+        Assert.assertEquals(female, model.predict(observation), PRECISION);
     }
 
     /** Dataset from Gaussian NB example in the scikit-learn documentation */
@@ -80,7 +80,7 @@ public class GaussianNaiveBayesTest {
         );
         Vector observation = VectorUtils.of(-0.8, -1);
 
-        Assert.assertEquals(one, model.apply(observation), PRECISION);
+        Assert.assertEquals(one, model.predict(observation), PRECISION);
     }
 
 }
index 64ea9d3..348b7c9 100644 (file)
@@ -84,8 +84,8 @@ public class GaussianNaiveBayesTrainerTest extends TrainerTest {
             (k, v) -> v[0]
         );
 
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 10)), PRECISION);
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(10, 100)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 10)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(10, 100)), PRECISION);
     }
 
     /** */
index 0f15dda..0a7d9a7 100644 (file)
@@ -44,7 +44,7 @@ public class MLPTest {
 
         int input = 2;
 
-        Matrix predict = mlp.apply(new DenseMatrix(new double[][] {{input}}));
+        Matrix predict = mlp.predict(new DenseMatrix(new double[][] {{input}}));
 
         Assert.assertEquals(predict, new DenseMatrix(new double[][] {{Activators.SIGMOID.apply(input)}}));
     }
@@ -68,7 +68,7 @@ public class MLPTest {
 
         Matrix input = new DenseMatrix(new double[][] {{0.0, 0.0}, {0.0, 1.0}, {1.0, 0.0}, {1.0, 1.0}});
 
-        Matrix predict = mlp.apply(input);
+        Matrix predict = mlp.predict(input);
         Matrix truth = new DenseMatrix(new double[][] {{0.0}, {1.0}, {1.0}, {0.0}});
 
         TestUtils.checkIsInEpsilonNeighbourhood(predict.getRow(0), truth.getRow(0), 1E-4);
@@ -99,8 +99,8 @@ public class MLPTest {
 
         MultilayerPerceptron stackedMLP = mlp1.add(mlp2);
 
-        Matrix predict = mlp.apply(new DenseMatrix(new double[][] {{1}, {2}, {3}, {4}}).transpose());
-        Matrix stackedPredict = stackedMLP.apply(new DenseMatrix(new double[][] {{1}, {2}, {3}, {4}}).transpose());
+        Matrix predict = mlp.predict(new DenseMatrix(new double[][] {{1}, {2}, {3}, {4}}).transpose());
+        Matrix stackedPredict = stackedMLP.predict(new DenseMatrix(new double[][] {{1}, {2}, {3}, {4}}).transpose());
 
         Assert.assertEquals(predict, stackedPredict);
     }
index ff6754a..3c2d64b 100644 (file)
@@ -149,7 +149,7 @@ public class MLPTrainerIntegrationTest extends GridCommonAbstractTest {
                 (k, v) -> new double[]{ v.lb}
             );
 
-            Matrix predict = mlp.apply(new DenseMatrix(new double[][]{
+            Matrix predict = mlp.predict(new DenseMatrix(new double[][]{
                 {0.0, 0.0},
                 {0.0, 1.0},
                 {1.0, 0.0},
index 6a6555e..053fe33 100644 (file)
@@ -146,7 +146,7 @@ public class MLPTrainerTest {
                 (k, v) -> v[1]
             );
 
-            Matrix predict = mlp.apply(new DenseMatrix(new double[][]{
+            Matrix predict = mlp.predict(new DenseMatrix(new double[][]{
                 {0.0, 0.0},
                 {0.0, 1.0},
                 {1.0, 0.0},
@@ -215,8 +215,8 @@ public class MLPTrainerTest {
                 {1.0, 1.0}
             });
 
-            TestUtils.checkIsInEpsilonNeighbourhood(originalMdl.apply(matrix).getRow(0), updatedOnSameDS.apply(matrix).getRow(0), 1E-1);
-            TestUtils.checkIsInEpsilonNeighbourhood(originalMdl.apply(matrix).getRow(0), updatedOnEmptyDS.apply(matrix).getRow(0), 1E-1);
+            TestUtils.checkIsInEpsilonNeighbourhood(originalMdl.predict(matrix).getRow(0), updatedOnSameDS.predict(matrix).getRow(0), 1E-1);
+            TestUtils.checkIsInEpsilonNeighbourhood(originalMdl.predict(matrix).getRow(0), updatedOnEmptyDS.predict(matrix).getRow(0), 1E-1);
         }
     }
 
index e406c31..6a6fec2 100644 (file)
@@ -120,7 +120,7 @@ public class MLPTrainerMnistIntegrationTest extends GridCommonAbstractTest {
 
         for (MnistUtils.MnistLabeledImage e : MnistMLPTestUtil.loadTestSet(1_000)) {
             Matrix input = new DenseMatrix(new double[][]{e.getPixels()});
-            Matrix outputMatrix = mdl.apply(input);
+            Matrix outputMatrix = mdl.predict(input);
 
             int predicted = (int) VectorUtils.vec2Num(outputMatrix.getRow(0));
 
index 9396009..a21320a 100644 (file)
@@ -85,7 +85,7 @@ public class MLPTrainerMnistTest {
 
         for (MnistUtils.MnistLabeledImage e : MnistMLPTestUtil.loadTestSet(10_000)) {
             Matrix input = new DenseMatrix(new double[][]{e.getPixels()});
-            Matrix outputMatrix = mdl.apply(input);
+            Matrix outputMatrix = mdl.predict(input);
 
             int predicted = (int) VectorUtils.vec2Num(outputMatrix.getRow(0));
 
index 8445900..3438e4b 100644 (file)
@@ -53,19 +53,19 @@ public class PipelineMdlTest {
     /** */
     private void verifyPredict(PipelineMdl mdl) {
         Vector observation = new DenseVector(new double[] {1.0, 1.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 1.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 1.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {2.0, 1.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 2.0 + 3.0 * 1.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 2.0 + 3.0 * 1.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {1.0, 2.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 2.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 2.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {-2.0, 1.0});
-        TestUtils.assertEquals(sigmoid(1.0 - 2.0 * 2.0 + 3.0 * 1.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 - 2.0 * 2.0 + 3.0 * 1.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {1.0, -2.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 - 3.0 * 2.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 - 3.0 * 2.0), mdl.predict(observation), PRECISION);
     }
 
     /**
index 694dcd3..98de92b 100644 (file)
@@ -71,8 +71,8 @@ public class PipelineTest extends TrainerTest {
                 parts
             );
 
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 10)), PRECISION);
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(10, 100)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 10)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(10, 100)), PRECISION);
     }
 
     /**
@@ -101,7 +101,7 @@ public class PipelineTest extends TrainerTest {
                 parts
             );
 
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 10)), PRECISION);
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(10, 100)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 10)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(10, 100)), PRECISION);
     }
 }
index 36d0fc7..6739905 100644 (file)
@@ -43,19 +43,19 @@ public class LinearRegressionModelTest {
         assertTrue(!mdl.toString(false).isEmpty());
 
         Vector observation = new DenseVector(new double[]{1.0, 1.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{2.0, 1.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 2.0 + 3.0 * 1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 2.0 + 3.0 * 1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{1.0, 2.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 2.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 2.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{-2.0, 1.0});
-        TestUtils.assertEquals(1.0 - 2.0 * 2.0 + 3.0 * 1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 - 2.0 * 2.0 + 3.0 * 1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{1.0, -2.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 1.0 - 3.0 * 2.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 1.0 - 3.0 * 2.0, mdl.predict(observation), PRECISION);
     }
 
     /** */
@@ -67,6 +67,6 @@ public class LinearRegressionModelTest {
 
         Vector observation = new DenseVector(new double[]{1.0});
 
-        mdl.apply(observation);
+        mdl.predict(observation);
     }
 }
index 4fae638..e934e96 100644 (file)
@@ -62,25 +62,25 @@ public class LogisticRegressionModelTest {
 
         Vector observation = new DenseVector(new double[] {1.0});
 
-        mdl.apply(observation);
+        mdl.predict(observation);
     }
 
     /** */
     private void verifyPredict(LogisticRegressionModel mdl) {
         Vector observation = new DenseVector(new double[] {1.0, 1.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 1.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 1.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {2.0, 1.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 2.0 + 3.0 * 1.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 2.0 + 3.0 * 1.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {1.0, 2.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 2.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 + 3.0 * 2.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {-2.0, 1.0});
-        TestUtils.assertEquals(sigmoid(1.0 - 2.0 * 2.0 + 3.0 * 1.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 - 2.0 * 2.0 + 3.0 * 1.0), mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[] {1.0, -2.0});
-        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 - 3.0 * 2.0), mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(sigmoid(1.0 + 2.0 * 1.0 - 3.0 * 2.0), mdl.predict(observation), PRECISION);
     }
 
     /**
index 681cb72..f018eba 100644 (file)
@@ -58,8 +58,8 @@ public class LogisticRegressionSGDTrainerTest extends TrainerTest {
             (k, v) -> v[0]
         );
 
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 10)), PRECISION);
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(10, 100)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 10)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(10, 100)), PRECISION);
     }
 
     /** */
@@ -103,9 +103,9 @@ public class LogisticRegressionSGDTrainerTest extends TrainerTest {
 
         Vector v1 = VectorUtils.of(100, 10);
         Vector v2 = VectorUtils.of(10, 100);
-        TestUtils.assertEquals(originalMdl.apply(v1), updatedOnSameDS.apply(v1), PRECISION);
-        TestUtils.assertEquals(originalMdl.apply(v2), updatedOnSameDS.apply(v2), PRECISION);
-        TestUtils.assertEquals(originalMdl.apply(v2), updatedOnEmptyDS.apply(v2), PRECISION);
-        TestUtils.assertEquals(originalMdl.apply(v1), updatedOnEmptyDS.apply(v1), PRECISION);
+        TestUtils.assertEquals(originalMdl.predict(v1), updatedOnSameDS.predict(v1), PRECISION);
+        TestUtils.assertEquals(originalMdl.predict(v2), updatedOnSameDS.predict(v2), PRECISION);
+        TestUtils.assertEquals(originalMdl.predict(v2), updatedOnEmptyDS.predict(v2), PRECISION);
+        TestUtils.assertEquals(originalMdl.predict(v1), updatedOnEmptyDS.predict(v1), PRECISION);
     }
 }
index ccde0d7..8b69b95 100644 (file)
@@ -50,8 +50,8 @@ public class SVMBinaryTrainerTest extends TrainerTest {
             (k, v) -> v[0]
         );
 
-        TestUtils.assertEquals(0, mdl.apply(VectorUtils.of(100, 10)), PRECISION);
-        TestUtils.assertEquals(1, mdl.apply(VectorUtils.of(10, 100)), PRECISION);
+        TestUtils.assertEquals(0, mdl.predict(VectorUtils.of(100, 10)), PRECISION);
+        TestUtils.assertEquals(1, mdl.predict(VectorUtils.of(10, 100)), PRECISION);
     }
 
     /** */
@@ -90,7 +90,7 @@ public class SVMBinaryTrainerTest extends TrainerTest {
         );
 
         Vector v = VectorUtils.of(100, 10);
-        TestUtils.assertEquals(originalMdl.apply(v), updatedOnSameDS.apply(v), PRECISION);
-        TestUtils.assertEquals(originalMdl.apply(v), updatedOnEmptyDS.apply(v), PRECISION);
+        TestUtils.assertEquals(originalMdl.predict(v), updatedOnSameDS.predict(v), PRECISION);
+        TestUtils.assertEquals(originalMdl.predict(v), updatedOnEmptyDS.predict(v), PRECISION);
     }
 }
index 3bac790..c39c883 100644 (file)
@@ -39,19 +39,19 @@ public class SVMModelTest {
         SVMLinearClassificationModel mdl = new SVMLinearClassificationModel(weights, 1.0).withRawLabels(true);
 
         Vector observation = new DenseVector(new double[]{1.0, 1.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{2.0, 1.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 2.0 + 3.0 * 1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 2.0 + 3.0 * 1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{1.0, 2.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 2.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 1.0 + 3.0 * 2.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{-2.0, 1.0});
-        TestUtils.assertEquals(1.0 - 2.0 * 2.0 + 3.0 * 1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 - 2.0 * 2.0 + 3.0 * 1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{1.0, -2.0});
-        TestUtils.assertEquals(1.0 + 2.0 * 1.0 - 3.0 * 2.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0 + 2.0 * 1.0 - 3.0 * 2.0, mdl.predict(observation), PRECISION);
 
         Assert.assertTrue(mdl.isKeepingRawLabels());
 
@@ -67,25 +67,25 @@ public class SVMModelTest {
         SVMLinearClassificationModel mdl = new SVMLinearClassificationModel(weights, 1.0);
 
         Vector observation = new DenseVector(new double[]{1.0, 1.0});
-        TestUtils.assertEquals(1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{3.0, 4.0});
-        TestUtils.assertEquals(1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{-1.0, -1.0});
-        TestUtils.assertEquals(0.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(0.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{-2.0, 1.0});
-        TestUtils.assertEquals(0.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(0.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{-1.0, -2.0});
-        TestUtils.assertEquals(0.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(0.0, mdl.predict(observation), PRECISION);
 
         final SVMLinearClassificationModel mdlWithNewData = mdl.withIntercept(-2.0).withWeights(new DenseVector(new double[] {-2.0, -2.0}));
         System.out.println("The SVM model is " + mdlWithNewData);
 
         observation = new DenseVector(new double[]{-1.0, -2.0});
-        TestUtils.assertEquals(1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0, mdl.predict(observation), PRECISION);
         TestUtils.assertEquals(-2.0, mdl.intercept(), PRECISION);
     }
 
@@ -96,10 +96,10 @@ public class SVMModelTest {
         SVMLinearClassificationModel mdl = new SVMLinearClassificationModel(weights, 1.0).withThreshold(5);
 
         Vector observation = new DenseVector(new double[]{1.0, 1.0});
-        TestUtils.assertEquals(0.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(0.0, mdl.predict(observation), PRECISION);
 
         observation = new DenseVector(new double[]{3.0, 4.0});
-        TestUtils.assertEquals(1.0, mdl.apply(observation), PRECISION);
+        TestUtils.assertEquals(1.0, mdl.predict(observation), PRECISION);
 
         TestUtils.assertEquals(5, mdl.threshold(), PRECISION);
     }
@@ -113,6 +113,6 @@ public class SVMModelTest {
 
         Vector observation = new DenseVector(new double[]{1.0});
 
-        mdl.apply(observation);
+        mdl.predict(observation);
     }
 }
index e0cdc96..7edcf2d 100644 (file)
@@ -97,7 +97,7 @@ public class DecisionTreeMNISTIntegrationTest extends GridCommonAbstractTest {
         int incorrectAnswers = 0;
 
         for (MnistUtils.MnistLabeledImage e : MnistMLPTestUtil.loadTestSet(10_000)) {
-            double res = mdl.apply(new DenseVector(e.getPixels()));
+            double res = mdl.predict(new DenseVector(e.getPixels()));
 
             if (res == e.getLabel())
                 correctAnswers++;
index 8a3f201..c7d2ef9 100644 (file)
@@ -61,7 +61,7 @@ public class DecisionTreeMNISTTest {
         int incorrectAnswers = 0;
 
         for (MnistUtils.MnistLabeledImage e : MnistMLPTestUtil.loadTestSet(10_000)) {
-            double res = mdl.apply(new DenseVector(e.getPixels()));
+            double res = mdl.predict(new DenseVector(e.getPixels()));
 
             if (res == e.getLabel())
                 correctAnswers++;
index e05139f..b999df3 100644 (file)
@@ -92,7 +92,7 @@ public class RandomForestClassifierTrainerTest extends TrainerTest {
         ModelsComposition updatedOnEmptyDS = trainer.update(originalMdl, new HashMap<double[], Double>(), parts, (k, v) -> VectorUtils.of(k), (k, v) -> v);
 
         Vector v = VectorUtils.of(5, 0.5, 0.05, 0.005);
-        assertEquals(originalMdl.apply(v), updatedOnSameDS.apply(v), 0.01);
-        assertEquals(originalMdl.apply(v), updatedOnEmptyDS.apply(v), 0.01);
+        assertEquals(originalMdl.predict(v), updatedOnSameDS.predict(v), 0.01);
+        assertEquals(originalMdl.predict(v), updatedOnEmptyDS.predict(v), 0.01);
     }
 }
index 08ff95d..1e949a1 100644 (file)
@@ -87,7 +87,7 @@ public class RandomForestRegressionTrainerTest extends TrainerTest {
         ModelsComposition updatedOnEmptyDS = trainer.update(originalMdl, new HashMap<double[], Double>(), parts, (k, v) -> VectorUtils.of(k), (k, v) -> v);
 
         Vector v = VectorUtils.of(5, 0.5, 0.05, 0.005);
-        assertEquals(originalMdl.apply(v), updatedOnSameDS.apply(v), 0.1);
-        assertEquals(originalMdl.apply(v), updatedOnEmptyDS.apply(v), 0.1);
+        assertEquals(originalMdl.predict(v), updatedOnSameDS.predict(v), 0.1);
+        assertEquals(originalMdl.predict(v), updatedOnEmptyDS.predict(v), 0.1);
     }
 }
index 943b5d8..eb420cc 100644 (file)
@@ -73,7 +73,7 @@ public class TreeNodeTest {
         });
 
         assertEquals(TreeNode.Type.CONDITIONAL, root.getType());
-        assertEquals(0.0, root.apply(features1), 0.001);
-        assertEquals(1.0, root.apply(features2), 0.001);
+        assertEquals(0.0, root.predict(features1), 0.001);
+        assertEquals(1.0, root.predict(features2), 0.001);
     }
 }
index b8ccff7..8001fcd 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.xgboost;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -32,7 +32,7 @@ import static org.apache.ignite.ml.math.StorageConstants.RANDOM_ACCESS_MODE;
 /**
  * XGBoost model composition.
  */
-public class XGModelComposition implements Model<HashMap<String, Double>, Double> {
+public class XGModelComposition implements IgniteModel<HashMap<String, Double>, Double> {
     /** Dictionary used for matching feature names and indexes. */
     private final Map<String, Integer> dict;
 
@@ -50,8 +50,8 @@ public class XGModelComposition implements Model<HashMap<String, Double>, Double
     }
 
     /** {@inheritDoc} */
-    @Override public Double apply(HashMap<String, Double> map) {
-        return modelsComposition.apply(toVector(map));
+    @Override public Double predict(HashMap<String, Double> map) {
+        return modelsComposition.predict(toVector(map));
     }
 
     /** */
index 8d40a7e..c99b1ae 100644 (file)
@@ -23,7 +23,7 @@ import java.util.HashMap;
 import org.antlr.v4.runtime.CharStream;
 import org.antlr.v4.runtime.CharStreams;
 import org.antlr.v4.runtime.CommonTokenStream;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
+import org.apache.ignite.ml.inference.parser.ModelParser;
 import org.apache.ignite.ml.xgboost.XGModelComposition;
 import org.apache.ignite.ml.xgboost.parser.visitor.XGModelVisitor;
 
@@ -63,7 +63,7 @@ import org.apache.ignite.ml.xgboost.parser.visitor.XGModelVisitor;
  * xgModel : xgTree+ ;
  * </pre>
  */
-public class XGModelParser implements InfModelParser<HashMap<String, Double>, Double, XGModelComposition> {
+public class XGModelParser implements ModelParser<HashMap<String, Double>, Double, XGModelComposition> {
     /** */
     private static final long serialVersionUID = -5819843559270294718L;
 
diff --git