IGNITE-10727: [ML] InfModel and Model merging This closes #5723
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2dc0d9f7 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2dc0d9f7 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2dc0d9f7 Branch: refs/heads/master Commit: 2dc0d9f75c2e83a4d81c277fbd8b7f0cae4dc869 Parents: 59b3a48 Author: Anton Dmitriev <[email protected]> Authored: Fri Dec 28 13:48:12 2018 +0300 Committer: Yury Babak <[email protected]> Committed: Fri Dec 28 13:48:13 2018 +0300 ---------------------------------------------------------------------- .../clustering/KMeansClusterizationExample.java | 2 +- ...niteFunctionDistributedInferenceExample.java | 100 ----- .../IgniteModelDistributedInferenceExample.java | 100 +++++ .../ml/inference/ModelStorageExample.java | 22 +- .../TensorFlowDistributedInferenceExample.java | 20 +- .../TensorFlowLocalInferenceExample.java | 20 +- .../TensorFlowThreadedInferenceExample.java | 20 +- .../ml/knn/ANNClassificationExample.java | 2 +- .../ml/knn/KNNClassificationExample.java | 2 +- .../examples/ml/knn/KNNRegressionExample.java | 2 +- .../OneVsRestClassificationExample.java | 4 +- .../DiscreteNaiveBayesTrainerExample.java | 2 +- .../GaussianNaiveBayesTrainerExample.java | 2 +- .../examples/ml/nn/MLPTrainerExample.java | 2 +- .../LinearRegressionLSQRTrainerExample.java | 2 +- ...ssionLSQRTrainerWithMinMaxScalerExample.java | 2 +- .../LinearRegressionSGDTrainerExample.java | 2 +- .../LogisticRegressionSGDTrainerExample.java | 2 +- .../split/TrainTestDatasetSplitterExample.java | 2 +- .../ml/svm/SVMBinaryClassificationExample.java | 2 +- ...ecisionTreeClassificationTrainerExample.java | 2 +- .../DecisionTreeRegressionTrainerExample.java | 2 +- .../GDBOnTreesClassificationTrainerExample.java | 2 +- .../GDBOnTreesRegressionTrainerExample.java | 4 +- .../RandomForestClassificationExample.java | 2 +- .../RandomForestRegressionExample.java | 2 +- .../ml/xgboost/XGBoostModelParserExample.java | 18 +- .../java/org/apache/ignite/ml/Exportable.java | 2 +- .../java/org/apache/ignite/ml/IgniteModel.java | 59 +++ .../main/java/org/apache/ignite/ml/Model.java | 59 --- .../ignite/ml/clustering/kmeans/Clusterer.java | 4 +- .../clustering/kmeans/ClusterizationModel.java | 4 +- .../ml/clustering/kmeans/KMeansModel.java | 2 +- .../ml/composition/ModelOnFeaturesSubspace.java | 14 +- .../ml/composition/ModelsComposition.java | 14 +- .../ml/composition/ModelsCompositionFormat.java | 8 +- .../boosting/GDBLearningStrategy.java | 20 +- .../ml/composition/boosting/GDBTrainer.java | 12 +- .../convergence/ConvergenceChecker.java | 2 +- .../stacking/SimpleStackedDatasetTrainer.java | 6 +- .../stacking/StackedDatasetTrainer.java | 40 +- .../ml/composition/stacking/StackedModel.java | 16 +- .../stacking/StackedVectorDatasetTrainer.java | 10 +- .../ml/environment/logging/ConsoleLogger.java | 4 +- .../ml/environment/logging/CustomMLLogger.java | 4 +- .../ignite/ml/environment/logging/MLLogger.java | 4 +- .../ml/environment/logging/NoOpLogger.java | 4 +- .../apache/ignite/ml/inference/InfModel.java | 39 -- .../org/apache/ignite/ml/inference/Model.java | 37 ++ .../ignite/ml/inference/ModelDescriptor.java | 18 +- .../inference/builder/AsyncInfModelBuilder.java | 43 --- .../ml/inference/builder/AsyncModelBuilder.java | 43 +++ .../IgniteDistributedInfModelBuilder.java | 368 ------------------- .../builder/IgniteDistributedModelBuilder.java | 368 +++++++++++++++++++ .../builder/SingleInfModelBuilder.java | 34 -- .../inference/builder/SingleModelBuilder.java | 34 ++ .../inference/builder/SyncInfModelBuilder.java | 42 --- .../ml/inference/builder/SyncModelBuilder.java | 42 +++ .../builder/ThreadedInfModelBuilder.java | 86 ----- .../inference/builder/ThreadedModelBuilder.java | 86 +++++ .../parser/IgniteFunctionInfModelParser.java | 76 ---- .../ml/inference/parser/IgniteModelParser.java | 49 +++ .../ml/inference/parser/InfModelParser.java | 38 -- .../ignite/ml/inference/parser/ModelParser.java | 38 ++ .../parser/TensorFlowBaseInfModelParser.java | 216 ----------- .../parser/TensorFlowBaseModelParser.java | 216 +++++++++++ .../parser/TensorFlowGraphInfModelParser.java | 40 -- .../parser/TensorFlowGraphModelParser.java | 40 ++ .../TensorFlowSavedModelInfModelParser.java | 70 ---- .../parser/TensorFlowSavedModelModelParser.java | 70 ++++ .../reader/FileSystemInfModelReader.java | 61 --- .../inference/reader/FileSystemModelReader.java | 61 +++ .../reader/InMemoryInfModelReader.java | 67 ---- .../inference/reader/InMemoryModelReader.java | 67 ++++ .../ml/inference/reader/InfModelReader.java | 33 -- .../ignite/ml/inference/reader/ModelReader.java | 33 ++ .../reader/ModelStorageInfModelReader.java | 64 ---- .../reader/ModelStorageModelReader.java | 64 ++++ .../ignite/ml/knn/NNClassificationModel.java | 4 +- .../ml/knn/ann/ANNClassificationModel.java | 2 +- .../classification/KNNClassificationModel.java | 2 +- .../ml/knn/regression/KNNRegressionModel.java | 2 +- .../ignite/ml/multiclass/MultiClassModel.java | 8 +- .../ignite/ml/multiclass/OneVsRestTrainer.java | 4 +- .../discrete/DiscreteNaiveBayesModel.java | 6 +- .../gaussian/GaussianNaiveBayesModel.java | 6 +- .../ignite/ml/nn/MultilayerPerceptron.java | 6 +- .../ml/optimization/SmoothParametrized.java | 4 +- .../org/apache/ignite/ml/pipeline/Pipeline.java | 4 +- .../apache/ignite/ml/pipeline/PipelineMdl.java | 14 +- .../linear/LinearRegressionModel.java | 6 +- .../logistic/LogisticRegressionModel.java | 6 +- .../ignite/ml/selection/cv/CrossValidation.java | 4 +- .../cursor/CacheBasedLabelPairCursor.java | 10 +- .../scoring/cursor/LocalLabelPairCursor.java | 8 +- .../BinaryClassificationEvaluator.java | 26 +- .../ml/svm/SVMLinearClassificationModel.java | 6 +- .../ml/trainers/AdaptableDatasetModel.java | 14 +- .../ml/trainers/AdaptableDatasetTrainer.java | 6 +- .../ignite/ml/trainers/DatasetTrainer.java | 4 +- .../ml/trainers/MultiLabelDatasetTrainer.java | 4 +- .../ml/trainers/SingleLabelDatasetTrainer.java | 4 +- .../ignite/ml/trainers/TrainerTransformers.java | 14 +- .../ml/tree/DecisionTreeConditionalNode.java | 6 +- .../ignite/ml/tree/DecisionTreeLeafNode.java | 2 +- .../apache/ignite/ml/tree/DecisionTreeNode.java | 4 +- .../boosting/GDBOnTreesLearningStrategy.java | 10 +- .../tree/randomforest/RandomForestTrainer.java | 4 +- .../ml/tree/randomforest/data/TreeNode.java | 10 +- .../ml/tree/randomforest/data/TreeRoot.java | 8 +- .../java/org/apache/ignite/ml/TestUtils.java | 4 +- .../ignite/ml/clustering/KMeansModelTest.java | 8 +- .../ignite/ml/clustering/KMeansTrainerTest.java | 12 +- .../org/apache/ignite/ml/common/ModelTest.java | 10 +- .../ignite/ml/composition/BaggingTest.java | 18 +- .../ignite/ml/composition/StackingTest.java | 20 +- .../ml/composition/boosting/GDBTrainerTest.java | 18 +- .../convergence/ConvergenceCheckerTest.java | 4 +- .../ml/environment/LearningEnvironmentTest.java | 14 +- .../ignite/ml/inference/InferenceTestSuite.java | 26 +- .../IgniteDistributedInfModelBuilderTest.java | 72 ---- .../IgniteDistributedModelBuilderTest.java | 72 ++++ .../builder/InfModelBuilderTestUtil.java | 53 --- .../inference/builder/ModelBuilderTestUtil.java | 53 +++ .../builder/SingleInfModelBuilderTest.java | 42 --- .../builder/SingleModelBuilderTest.java | 42 +++ .../builder/ThreadedInfModelBuilderTest.java | 44 --- .../builder/ThreadedModelBuilderTest.java | 44 +++ .../ignite/ml/knn/KNNClassificationTest.java | 18 +- .../apache/ignite/ml/knn/KNNRegressionTest.java | 12 +- .../ml/multiclass/OneVsRestTrainerTest.java | 8 +- .../discrete/DiscreteNaiveBayesModelTest.java | 2 +- .../discrete/DiscreteNaiveBayesTest.java | 2 +- .../gaussian/GaussianNaiveBayesModelTest.java | 2 +- .../gaussian/GaussianNaiveBayesTest.java | 4 +- .../gaussian/GaussianNaiveBayesTrainerTest.java | 4 +- .../java/org/apache/ignite/ml/nn/MLPTest.java | 8 +- .../ignite/ml/nn/MLPTrainerIntegrationTest.java | 2 +- .../org/apache/ignite/ml/nn/MLPTrainerTest.java | 6 +- .../MLPTrainerMnistIntegrationTest.java | 2 +- .../ml/nn/performance/MLPTrainerMnistTest.java | 2 +- .../ignite/ml/pipeline/PipelineMdlTest.java | 10 +- .../apache/ignite/ml/pipeline/PipelineTest.java | 8 +- .../linear/LinearRegressionModelTest.java | 12 +- .../logistic/LogisticRegressionModelTest.java | 12 +- .../LogisticRegressionSGDTrainerTest.java | 12 +- .../ignite/ml/svm/SVMBinaryTrainerTest.java | 8 +- .../org/apache/ignite/ml/svm/SVMModelTest.java | 28 +- .../DecisionTreeMNISTIntegrationTest.java | 2 +- .../tree/performance/DecisionTreeMNISTTest.java | 2 +- .../RandomForestClassifierTrainerTest.java | 4 +- .../RandomForestRegressionTrainerTest.java | 4 +- .../ml/tree/randomforest/data/TreeNodeTest.java | 4 +- .../ignite/ml/xgboost/XGModelComposition.java | 8 +- .../ignite/ml/xgboost/parser/XGModelParser.java | 4 +- .../xgboost/parser/XGBoostModelParserTest.java | 14 +- 156 files changed, 2069 insertions(+), 2084 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java index 44c4256..46550f3 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java @@ -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); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java deleted file mode 100644 index 58ddde7..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.ml.inference; - -import java.io.IOException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import javax.cache.Cache; -import org.apache.ignite.Ignite; -import org.apache.ignite.IgniteCache; -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.math.primitives.vector.Vector; -import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer; -import org.apache.ignite.ml.regressions.linear.LinearRegressionModel; -import org.apache.ignite.ml.util.MLSandboxDatasets; -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 { - /** Run example. */ - public static void main(String... args) throws IOException, ExecutionException, InterruptedException { - System.out.println(); - System.out.println(">>> Linear regression model over cache based dataset usage example started."); - // Start ignite grid. - try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { - System.out.println(">>> Ignite grid started."); - - IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite) - .fillCacheWith(MLSandboxDatasets.MORTALITY_DATA); - - System.out.println(">>> Create new linear regression trainer object."); - LinearRegressionLSQRTrainer trainer = new LinearRegressionLSQRTrainer(); - - System.out.println(">>> Perform the training to get the model."); - LinearRegressionModel mdl = trainer.fit( - ignite, - dataCache, - (k, v) -> v.copyOfRange(1, v.size()), - (k, v) -> v.get(0) - ); - - 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) - .build(reader, parser)) { - System.out.println(">>> Inference model is ready."); - - System.out.println(">>> ---------------------------------"); - System.out.println(">>> | Prediction\t| Ground Truth\t|"); - System.out.println(">>> ---------------------------------"); - - try (QueryCursor<Cache.Entry<Integer, Vector>> observations = dataCache.query(new ScanQuery<>())) { - for (Cache.Entry<Integer, Vector> observation : observations) { - Vector val = observation.getValue(); - Vector inputs = val.copyOfRange(1, val.size()); - double groundTruth = val.get(0); - - double prediction = infMdl.apply(inputs).get(); - - System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth); - } - } - } - - System.out.println(">>> ---------------------------------"); - - System.out.println(">>> Linear regression model over cache based dataset usage example completed."); - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java new file mode 100644 index 0000000..8a43a79 --- /dev/null +++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.examples.ml.inference; + +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import javax.cache.Cache; +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +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.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; +import org.apache.ignite.ml.util.MLSandboxDatasets; +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 IgniteModelDistributedInferenceExample { + /** Run example. */ + public static void main(String... args) throws IOException, ExecutionException, InterruptedException { + System.out.println(); + System.out.println(">>> Linear regression model over cache based dataset usage example started."); + // Start ignite grid. + try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { + System.out.println(">>> Ignite grid started."); + + IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite) + .fillCacheWith(MLSandboxDatasets.MORTALITY_DATA); + + System.out.println(">>> Create new linear regression trainer object."); + LinearRegressionLSQRTrainer trainer = new LinearRegressionLSQRTrainer(); + + System.out.println(">>> Perform the training to get the model."); + LinearRegressionModel mdl = trainer.fit( + ignite, + dataCache, + (k, v) -> v.copyOfRange(1, v.size()), + (k, v) -> v.get(0) + ); + + System.out.println(">>> Linear regression model: " + mdl); + + System.out.println(">>> Preparing model reader and model parser."); + 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."); + + System.out.println(">>> ---------------------------------"); + System.out.println(">>> | Prediction\t| Ground Truth\t|"); + System.out.println(">>> ---------------------------------"); + + try (QueryCursor<Cache.Entry<Integer, Vector>> observations = dataCache.query(new ScanQuery<>())) { + for (Cache.Entry<Integer, Vector> observation : observations) { + Vector val = observation.getValue(); + Vector inputs = val.copyOfRange(1, val.size()); + double groundTruth = val.get(0); + + double prediction = infMdl.predict(inputs).get(); + + System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth); + } + } + } + + System.out.println(">>> ---------------------------------"); + + System.out.println(">>> Linear regression model over cache based dataset usage example completed."); + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java index a32d137..3f1d923 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java @@ -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); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java index a1e3b21..a81da7f 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java @@ -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(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java index d5ccbd7..baa1f00 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java @@ -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(); http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java index 14051f4..900dcd4 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java @@ -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(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java index 2e74f60..71546e9 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java @@ -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); http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java index 460752b..4a475a0 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java @@ -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)) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java index 51cc4ed..8615b6c 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java @@ -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); http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java index 1f81c48..080f45d 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java @@ -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++; http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java index 5af3f69..54c9ce0 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java @@ -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) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java index e711d84..74e0bfd 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java @@ -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)) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java index dc67aa1..a6f177a 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java @@ -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; http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java index e6e2632..1bb4146 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java @@ -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); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java index c60f8fb..c00a3bb 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java @@ -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); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java index bf235e2..cb764c5 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java @@ -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); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java index 65cf4d1..059f810 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java @@ -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)) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java index 0a681ce..c9a7ae4 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java @@ -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); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java index a32ec08..f057386 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java @@ -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)) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java index 4b44c7f..606660f 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java @@ -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) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java index 2338522..3e37646 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java @@ -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)); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java index c478407..fd46556 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java @@ -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); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java index c119c9a..d04415a 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java @@ -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)); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java index 3ce833d..fd95033 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java @@ -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)) http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java index 1754b7c..e1bbc8b 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java @@ -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); http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java index 68f27c4..0ec05c5 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java @@ -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); http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java b/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java index 83b3578..47ea72b 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java @@ -18,7 +18,7 @@ package org.apache.ignite.ml; /** - * Interface for exportable models({@link Model}). + * Interface for exportable models({@link IgniteModel}). * * @see Exporter */ http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java b/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java new file mode 100644 index 0000000..a1165e1 --- /dev/null +++ b/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.ml; + +import java.io.Serializable; +import java.util.function.BiFunction; +import org.apache.ignite.ml.inference.Model; + +/** Basic interface for all models. */ +public interface IgniteModel<T, V> extends Model<T, V>, Serializable { + /** + * Combines this model with other model via specified combiner + * + * @param other Other model. + * @param combiner Combiner. + * @return Combination of models. + */ + 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)); + } + + /** + * Get a composition model of the form {@code x -> after(mdl(x))}. + * + * @param after Function to apply after this model. + * @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> IgniteModel<T, V1> andThen(IgniteModel<V, V1> after) { + return t -> after.predict(predict(t)); + } + + /** + * @param pretty Use pretty mode. + */ + public default String toString(boolean pretty) { + return getClass().getSimpleName(); + } + + /** {@inheritDoc} */ + @Override public default void close() { + // Do nothing. + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/Model.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/Model.java b/modules/ml/src/main/java/org/apache/ignite/ml/Model.java deleted file mode 100644 index 6453108..0000000 --- a/modules/ml/src/main/java/org/apache/ignite/ml/Model.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.ml; - -import java.util.function.BiFunction; -import org.apache.ignite.ml.inference.InfModel; -import org.apache.ignite.ml.math.functions.IgniteFunction; - -/** Basic interface for all models. */ -public interface Model<T, V> extends InfModel<T, V>, IgniteFunction<T, V> { - /** - * Combines this model with other model via specified combiner - * - * @param other Other model. - * @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)); - } - - /** - * Get a composition model of the form {@code x -> after(mdl(x))}. - * - * @param after Function to apply after this model. - * @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)); - } - - /** - * @param pretty Use pretty mode. - */ - public default String toString(boolean pretty) { - return getClass().getSimpleName(); - } - - /** {@inheritDoc} */ - @Override public default void close() { - // Do nothing. - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java index 9930f23..c5308bd 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java @@ -17,12 +17,12 @@ 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. * http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java index 43e1899..42b0823 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java @@ -17,10 +17,10 @@ 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(); http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java index e07f4f0..33d43c8 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java @@ -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; http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java index 5ef1de5..4a73782 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java @@ -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; } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java index 36ee626..a7894c1 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java @@ -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; } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java index 68af0a9..ba71afa 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java @@ -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; } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java index 0b87748..7e42d12 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java @@ -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; } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java index 03772ec..35502ab 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java @@ -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)); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java index e383e39..f7da9a1 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java @@ -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); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java index c4c082f..a117f43 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java @@ -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); }
