IGNITE-8981: [ML] Parallel optimizations for BaggingTrainer this closes #4350
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9f5dd09b Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9f5dd09b Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9f5dd09b Branch: refs/heads/ignite-8446 Commit: 9f5dd09bc33d96f0a08d1890f9be33b51fef54ff Parents: 81d04a5 Author: Alexey Platonov <aplaton...@gmail.com> Authored: Tue Jul 24 15:45:09 2018 +0300 Committer: Yury Babak <yba...@gridgain.com> Committed: Tue Jul 24 15:45:10 2018 +0300 ---------------------------------------------------------------------- .../OptimizeMakeChangeFitnessFunction.java | 1 - .../change/OptimizeMakeChangeGAExample.java | 2 - .../OptimizeMakeChangeTerminateCriteria.java | 2 - .../genetic/helloworld/HelloWorldGAExample.java | 2 - .../helloworld/HelloWorldTerminateCriteria.java | 2 - .../ml/genetic/knapsack/KnapsackGAExample.java | 2 - .../knapsack/KnapsackTerminateCriteria.java | 1 - .../ml/genetic/movie/MovieFitnessFunction.java | 1 - .../ml/genetic/movie/MovieGAExample.java | 2 - .../genetic/movie/MovieTerminateCriteria.java | 2 - .../ml/knn/KNNClassificationExample.java | 2 +- .../examples/ml/knn/KNNRegressionExample.java | 2 +- .../examples/ml/nn/MLPTrainerExample.java | 2 +- .../ml/preprocessing/BinarizationExample.java | 2 +- .../ml/preprocessing/ImputingExample.java | 2 +- .../ImputingExampleWithMostFrequentValues.java | 2 +- .../ml/preprocessing/MinMaxScalerExample.java | 2 +- .../ml/preprocessing/NormalizationExample.java | 2 +- ...ssionLSQRTrainerWithMinMaxScalerExample.java | 2 +- ...gressionMultiClassClassificationExample.java | 2 +- .../SVMMultiClassClassificationExample.java | 2 +- .../RandomForestRegressionExample.java | 18 ++- .../ml/tutorial/Step_1_Read_and_Learn.java | 2 +- .../examples/ml/tutorial/Step_2_Imputing.java | 2 +- .../examples/ml/tutorial/Step_3_Categorial.java | 2 +- .../ml/tutorial/Step_4_Add_age_fare.java | 2 +- .../examples/ml/tutorial/Step_5_Scaling.java | 2 +- .../ignite/examples/ml/tutorial/Step_6_KNN.java | 2 +- .../ml/tutorial/Step_7_Split_train_test.java | 2 +- .../ignite/examples/ml/tutorial/Step_8_CV.java | 2 +- .../ml/tutorial/Step_9_Go_to_LogReg.java | 2 +- .../main/java/org/apache/ignite/ml/Model.java | 7 + .../ml/clustering/kmeans/KMeansModel.java | 22 +++- .../ml/clustering/kmeans/KMeansModelFormat.java | 2 +- .../ml/clustering/kmeans/KMeansTrainer.java | 6 +- .../ml/composition/BaggingModelTrainer.java | 38 ++++-- .../ml/composition/ModelOnFeaturesSubspace.java | 19 +++ .../ml/composition/ModelsComposition.java | 14 ++ .../boosting/GDBBinaryClassifierTrainer.java | 2 +- .../boosting/GDBRegressionTrainer.java | 2 +- .../ml/composition/boosting/GDBTrainer.java | 40 +++--- .../PredictionsAggregator.java | 8 ++ .../WeightedPredictionsAggregator.java | 24 ++++ .../ignite/ml/dataset/DatasetFactory.java | 2 +- .../builder/data/SimpleDatasetDataBuilder.java | 2 +- .../data/SimpleLabeledDatasetDataBuilder.java | 2 +- .../ml/environment/LearningEnvironment.java | 54 ++++++++ .../environment/LearningEnvironmentBuilder.java | 123 ++++++++++++++++++ .../ml/environment/logging/ConsoleLogger.java | 102 +++++++++++++++ .../ml/environment/logging/CustomMLLogger.java | 105 +++++++++++++++ .../ignite/ml/environment/logging/MLLogger.java | 69 ++++++++++ .../ml/environment/logging/NoOpLogger.java | 64 +++++++++ .../ml/environment/logging/package-info.java | 21 +++ .../ignite/ml/environment/package-info.java | 21 +++ .../parallelism/DefaultParallelismStrategy.java | 85 ++++++++++++ .../parallelism/NoParallelismStrategy.java | 87 +++++++++++++ .../parallelism/ParallelismStrategy.java | 47 +++++++ .../ml/environment/parallelism/Promise.java | 53 ++++++++ .../environment/parallelism/package-info.java | 21 +++ .../apache/ignite/ml/genetic/CrossOverJob.java | 4 +- .../apache/ignite/ml/genetic/CrossOverTask.java | 4 +- .../apache/ignite/ml/genetic/FitnessJob.java | 4 +- .../apache/ignite/ml/genetic/FitnessTask.java | 4 +- .../org/apache/ignite/ml/genetic/GAGrid.java | 3 - .../java/org/apache/ignite/ml/genetic/Gene.java | 1 - .../apache/ignite/ml/genetic/MutateTask.java | 5 +- .../ignite/ml/genetic/TruncateSelectionJob.java | 3 +- .../ml/genetic/TruncateSelectionTask.java | 4 +- .../ml/genetic/functions/GAGridFunction.java | 4 +- .../ml/genetic/parameter/GAConfiguration.java | 1 - .../ignite/ml/genetic/utils/GAGridUtils.java | 3 - .../java/org/apache/ignite/ml/knn/KNNUtils.java | 2 +- .../classification/KNNClassificationModel.java | 17 ++- .../KNNClassificationTrainer.java | 4 +- .../ml/knn/regression/KNNRegressionModel.java | 17 ++- .../ml/knn/regression/KNNRegressionTrainer.java | 4 +- .../java/org/apache/ignite/ml/math/Blas.java | 2 +- .../java/org/apache/ignite/ml/math/Tracer.java | 32 ++++- .../ml/math/distances/DistanceMeasure.java | 2 +- .../ml/math/distances/EuclideanDistance.java | 2 +- .../ml/math/distances/HammingDistance.java | 2 +- .../ml/math/distances/ManhattanDistance.java | 2 +- .../math/primitives/matrix/AbstractMatrix.java | 2 +- .../primitives/matrix/impl/DenseMatrix.java | 6 +- .../primitives/matrix/impl/SparseMatrix.java | 6 +- .../math/primitives/matrix/impl/ViewMatrix.java | 6 +- .../matrix/storage/DenseMatrixStorage.java | 2 +- .../matrix/storage/SparseMatrixStorage.java | 2 +- .../math/primitives/vector/AbstractVector.java | 2 +- .../ml/math/primitives/vector/Vector.java | 3 +- .../vector/impl/DelegatingVector.java | 6 +- .../primitives/vector/impl/DenseVector.java | 6 +- .../primitives/vector/impl/SparseVector.java | 4 +- .../math/primitives/vector/impl/VectorView.java | 4 +- .../vector/impl/VectorizedViewMatrix.java | 4 +- .../storage/VectorizedViewMatrixStorage.java | 2 +- .../apache/ignite/ml/math/util/MatrixUtil.java | 6 +- .../org/apache/ignite/ml/nn/MLPTrainer.java | 6 +- .../ignite/ml/nn/MultilayerPerceptron.java | 29 ++++- .../ignite/ml/nn/ReplicatedVectorMatrix.java | 6 +- .../ignite/ml/optimization/LossFunctions.java | 2 +- .../ml/optimization/SmoothParametrized.java | 4 +- .../NesterovUpdateCalculator.java | 4 +- .../ParameterUpdateCalculator.java | 4 +- .../RPropUpdateCalculator.java | 4 +- .../SimpleGDUpdateCalculator.java | 4 +- .../binarization/BinarizationPreprocessor.java | 2 +- .../binarization/BinarizationTrainer.java | 2 +- .../StringEncoderPreprocessor.java | 4 +- .../stringencoder/StringEncoderTrainer.java | 2 +- .../imputing/ImputerPreprocessor.java | 2 +- .../preprocessing/imputing/ImputerTrainer.java | 2 +- .../minmaxscaling/MinMaxScalerPreprocessor.java | 2 +- .../minmaxscaling/MinMaxScalerTrainer.java | 2 +- .../NormalizationPreprocessor.java | 2 +- .../normalization/NormalizationTrainer.java | 2 +- .../linear/FeatureExtractorWrapper.java | 2 +- .../linear/LinearRegressionLSQRTrainer.java | 6 +- .../linear/LinearRegressionModel.java | 9 +- .../linear/LinearRegressionSGDTrainer.java | 4 +- .../binomial/LogisticRegressionModel.java | 9 +- .../binomial/LogisticRegressionSGDTrainer.java | 4 +- .../LogRegressionMultiClassModel.java | 5 + .../LogRegressionMultiClassTrainer.java | 4 +- .../ignite/ml/selection/cv/CrossValidation.java | 2 +- .../cursor/CacheBasedLabelPairCursor.java | 2 +- .../scoring/cursor/LocalLabelPairCursor.java | 2 +- .../selection/scoring/evaluator/Evaluator.java | 2 +- .../ignite/ml/structures/LabeledDataset.java | 2 +- ...abeledDatasetPartitionDataBuilderOnHeap.java | 2 +- .../preprocessing/LabeledDatasetLoader.java | 2 +- .../svm/SVMLinearBinaryClassificationModel.java | 9 +- .../SVMLinearBinaryClassificationTrainer.java | 4 +- .../SVMLinearMultiClassClassificationModel.java | 5 + ...VMLinearMultiClassClassificationTrainer.java | 4 +- .../ignite/ml/trainers/DatasetTrainer.java | 26 +++- .../ml/trainers/MultiLabelDatasetTrainer.java | 2 +- .../ml/trainers/SingleLabelDatasetTrainer.java | 2 +- .../org/apache/ignite/ml/tree/DecisionTree.java | 56 +++++++- .../ml/tree/DecisionTreeConditionalNode.java | 10 ++ .../ignite/ml/tree/DecisionTreeLeafNode.java | 10 ++ .../ml/tree/data/DecisionTreeDataBuilder.java | 2 +- .../org/apache/ignite/ml/util/ModelTrace.java | 130 +++++++++++++++++++ .../org/apache/ignite/ml/LocalModelsTest.java | 2 +- .../java/org/apache/ignite/ml/TestUtils.java | 2 +- .../ignite/ml/clustering/KMeansModelTest.java | 2 +- .../ignite/ml/clustering/KMeansTrainerTest.java | 2 +- .../ml/genetic/GAGridCalculateFitnessTest.java | 5 +- .../genetic/GAGridInitializePopulationTest.java | 5 +- .../ignite/ml/knn/KNNClassificationTest.java | 2 +- .../apache/ignite/ml/knn/KNNRegressionTest.java | 2 +- .../ignite/ml/knn/LabeledDatasetTest.java | 2 +- .../org/apache/ignite/ml/math/BlasTest.java | 2 +- .../ignite/ml/math/MathImplLocalTestSuite.java | 8 +- .../org/apache/ignite/ml/math/TracerTest.java | 2 +- .../matrix/MatrixBaseStorageTest.java | 1 - .../matrix/MatrixStorageFixtures.java | 1 - .../primitives/vector/AbstractVectorTest.java | 2 +- .../vector/DelegatingVectorConstructorTest.java | 2 +- .../primitives/vector/MatrixVectorViewTest.java | 2 +- .../primitives/vector/VectorAttributesTest.java | 2 +- .../vector/VectorBaseStorageTest.java | 1 - .../vector/VectorImplementationsFixtures.java | 4 +- .../vector/VectorImplementationsTest.java | 2 +- .../primitives/vector/VectorToMatrixTest.java | 4 +- .../java/org/apache/ignite/ml/nn/MLPTest.java | 4 +- .../ignite/ml/nn/MLPTrainerIntegrationTest.java | 4 +- .../org/apache/ignite/ml/nn/MLPTrainerTest.java | 2 +- .../MLPTrainerMnistIntegrationTest.java | 2 +- .../ml/nn/performance/MLPTrainerMnistTest.java | 2 +- .../linear/LinearRegressionModelTest.java | 2 +- .../logistic/LogisticRegressionModelTest.java | 2 +- .../org/apache/ignite/ml/svm/SVMModelTest.java | 2 +- 173 files changed, 1517 insertions(+), 266 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java index 88d7037..34626be 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java @@ -18,7 +18,6 @@ package org.apache.ignite.examples.ml.genetic.change; import java.util.List; - import org.apache.ignite.ml.genetic.Gene; import org.apache.ignite.ml.genetic.IFitnessFunction; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java index 829fc4e..1e80d6d 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java @@ -19,11 +19,9 @@ package org.apache.ignite.examples.ml.genetic.change; import java.util.ArrayList; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.IgniteLogger; import org.apache.ignite.Ignition; - import org.apache.ignite.ml.genetic.Chromosome; import org.apache.ignite.ml.genetic.GAGrid; import org.apache.ignite.ml.genetic.Gene; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java index bb4a369..2080ac3 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java @@ -18,10 +18,8 @@ package org.apache.ignite.examples.ml.genetic.change; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.IgniteLogger; - import org.apache.ignite.ml.genetic.Chromosome; import org.apache.ignite.ml.genetic.Gene; import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java index 9e0eb7a..839471a 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java @@ -19,10 +19,8 @@ package org.apache.ignite.examples.ml.genetic.helloworld; import java.util.ArrayList; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.Ignition; - import org.apache.ignite.ml.genetic.Chromosome; import org.apache.ignite.ml.genetic.GAGrid; import org.apache.ignite.ml.genetic.Gene; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java index e7ec131..41809d4 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java @@ -18,10 +18,8 @@ package org.apache.ignite.examples.ml.genetic.helloworld; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.IgniteLogger; - import org.apache.ignite.ml.genetic.Chromosome; import org.apache.ignite.ml.genetic.Gene; import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java index 21b9c01..7578226 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java @@ -19,10 +19,8 @@ package org.apache.ignite.examples.ml.genetic.knapsack; import java.util.ArrayList; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.Ignition; - import org.apache.ignite.ml.genetic.GAGrid; import org.apache.ignite.ml.genetic.Gene; import org.apache.ignite.ml.genetic.parameter.GAConfiguration; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java index 76af2bb..487f8a7 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java @@ -18,7 +18,6 @@ package org.apache.ignite.examples.ml.genetic.knapsack; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.IgniteLogger; import org.apache.ignite.ml.genetic.Chromosome; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java index b5f52f7..bfd50f0 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java @@ -19,7 +19,6 @@ package org.apache.ignite.examples.ml.genetic.movie; import java.util.ArrayList; import java.util.List; - import org.apache.ignite.ml.genetic.Gene; import org.apache.ignite.ml.genetic.IFitnessFunction; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java index c52238b..a0b368af 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java @@ -20,10 +20,8 @@ package org.apache.ignite.examples.ml.genetic.movie; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; - import org.apache.ignite.Ignite; import org.apache.ignite.Ignition; - import org.apache.ignite.ml.genetic.Chromosome; import org.apache.ignite.ml.genetic.GAGrid; import org.apache.ignite.ml.genetic.Gene; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java index ac56cca..43804b7 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java @@ -18,10 +18,8 @@ package org.apache.ignite.examples.ml.genetic.movie; import java.util.List; - import org.apache.ignite.Ignite; import org.apache.ignite.IgniteLogger; - import org.apache.ignite.ml.genetic.Chromosome; import org.apache.ignite.ml.genetic.Gene; import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 85e2bec..d12fc1d 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 @@ -30,8 +30,8 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.ml.knn.classification.KNNClassificationModel; import org.apache.ignite.ml.knn.classification.KNNClassificationTrainer; import org.apache.ignite.ml.knn.classification.KNNStrategy; -import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.distances.EuclideanDistance; +import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector; import org.apache.ignite.thread.IgniteThread; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 597efe4..d1e5055 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 @@ -31,8 +31,8 @@ import org.apache.ignite.ml.knn.classification.KNNClassificationTrainer; import org.apache.ignite.ml.knn.classification.KNNStrategy; import org.apache.ignite.ml.knn.regression.KNNRegressionModel; import org.apache.ignite.ml.knn.regression.KNNRegressionTrainer; -import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.distances.ManhattanDistance; +import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector; import org.apache.ignite.thread.IgniteThread; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 68d793f..7873b12 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 @@ -24,8 +24,8 @@ import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.examples.ExampleNodeStartup; import org.apache.ignite.ml.math.primitives.matrix.Matrix; -import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix; +import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.nn.Activators; import org.apache.ignite.ml.nn.MLPTrainer; import org.apache.ignite.ml.nn.MultilayerPerceptron; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/BinarizationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/BinarizationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/BinarizationExample.java index 9f2fc8a..4c873d9 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/BinarizationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/BinarizationExample.java @@ -26,9 +26,9 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.examples.ml.dataset.model.Person; import org.apache.ignite.ml.dataset.DatasetFactory; import org.apache.ignite.ml.dataset.primitive.SimpleDataset; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.binarization.BinarizationTrainer; /** http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExample.java index 239e3a7..3ea52d8 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExample.java @@ -26,9 +26,9 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.examples.ml.dataset.model.Person; import org.apache.ignite.ml.dataset.DatasetFactory; import org.apache.ignite.ml.dataset.primitive.SimpleDataset; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; /** http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExampleWithMostFrequentValues.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExampleWithMostFrequentValues.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExampleWithMostFrequentValues.java index 3348ce0..10344bc 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExampleWithMostFrequentValues.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/ImputingExampleWithMostFrequentValues.java @@ -26,9 +26,9 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.examples.ml.dataset.model.Person; import org.apache.ignite.ml.dataset.DatasetFactory; import org.apache.ignite.ml.dataset.primitive.SimpleDataset; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputingStrategy; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/MinMaxScalerExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/MinMaxScalerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/MinMaxScalerExample.java index 37920cf..3f3b0d6 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/MinMaxScalerExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/MinMaxScalerExample.java @@ -26,9 +26,9 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.examples.ml.dataset.model.Person; import org.apache.ignite.ml.dataset.DatasetFactory; import org.apache.ignite.ml.dataset.primitive.SimpleDataset; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; /** http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/NormalizationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/NormalizationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/NormalizationExample.java index e58154a..b8581d0 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/NormalizationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/NormalizationExample.java @@ -26,9 +26,9 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.examples.ml.dataset.model.Person; import org.apache.ignite.ml.dataset.DatasetFactory; import org.apache.ignite.ml.dataset.primitive.SimpleDataset; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer; /** http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 fca86b6..03c82ef 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 @@ -27,9 +27,9 @@ import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction; import org.apache.ignite.cache.query.QueryCursor; import org.apache.ignite.cache.query.ScanQuery; import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerPreprocessor; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/multiclass/LogRegressionMultiClassClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/multiclass/LogRegressionMultiClassClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/multiclass/LogRegressionMultiClassClassificationExample.java index 362e9b7..351f1c6 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/multiclass/LogRegressionMultiClassClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/multiclass/LogRegressionMultiClassClassificationExample.java @@ -27,9 +27,9 @@ import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction; import org.apache.ignite.cache.query.QueryCursor; import org.apache.ignite.cache.query.ScanQuery; import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector; import org.apache.ignite.ml.nn.UpdatesStrategy; import org.apache.ignite.ml.optimization.updatecalculators.SimpleGDParameterUpdate; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/svm/multiclass/SVMMultiClassClassificationExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/svm/multiclass/SVMMultiClassClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/svm/multiclass/SVMMultiClassClassificationExample.java index b835a5f..b9e24c0 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/svm/multiclass/SVMMultiClassClassificationExample.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/svm/multiclass/SVMMultiClassClassificationExample.java @@ -27,9 +27,9 @@ import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction; import org.apache.ignite.cache.query.QueryCursor; import org.apache.ignite.cache.query.ScanQuery; import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; import org.apache.ignite.ml.svm.SVMLinearMultiClassClassificationModel; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 4704268..c803354 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 @@ -28,6 +28,10 @@ import org.apache.ignite.cache.query.QueryCursor; import org.apache.ignite.cache.query.ScanQuery; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.ml.composition.ModelsComposition; +import org.apache.ignite.ml.environment.LearningEnvironment; +import org.apache.ignite.ml.environment.logging.ConsoleLogger; +import org.apache.ignite.ml.environment.logging.MLLogger; +import org.apache.ignite.ml.environment.parallelism.ParallelismStrategy; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.tree.randomforest.RandomForestRegressionTrainer; import org.apache.ignite.ml.tree.randomforest.RandomForestTrainer; @@ -35,11 +39,12 @@ import org.apache.ignite.thread.IgniteThread; /** * Example represents a solution for the task of price predictions for houses in Boston based on RandomForest - * implementation for regression. It shows an initialization of {@link RandomForestTrainer}, - * +initialization of Ignite Cache, learning step and evaluation of model quality in terms of - * Mean Squared Error (MSE) and Mean Absolute Error (MAE). + * implementation for regression. It shows an initialization of {@link RandomForestTrainer}, +initialization of Ignite + * Cache, learning step and evaluation of model quality in terms of Mean Squared Error (MSE) and Mean Absolute Error + * (MAE). * * Dataset url: https://archive.ics.uci.edu/ml/machine-learning-databases/housing/ + * * @see RandomForestRegressionTrainer */ public class RandomForestRegressionExample { @@ -54,10 +59,15 @@ public class RandomForestRegressionExample { System.out.println(">>> Ignite grid started."); IgniteThread igniteThread = new IgniteThread(ignite.configuration().getIgniteInstanceName(), - RandomForestRegressionExample.class.getSimpleName(), () -> { + RandomForestRegressionExample.class.getSimpleName(), () -> { IgniteCache<Integer, double[]> dataCache = getTestCache(ignite); RandomForestRegressionTrainer trainer = new RandomForestRegressionTrainer(13, 4, 101, 0.3, 2, 0); + trainer.setEnvironment(LearningEnvironment.builder() + .withParallelismStrategy(ParallelismStrategy.Type.ON_DEFAULT_POOL) + .withLoggingFactory(ConsoleLogger.factory(MLLogger.VerboseLevel.LOW)) + .build() + ); ModelsComposition randomForest = trainer.fit(ignite, dataCache, (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)), http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java index 3910edb..460ca67 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java @@ -21,9 +21,9 @@ import java.io.FileNotFoundException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator; import org.apache.ignite.ml.selection.scoring.metric.Accuracy; import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java index 52dc434..8127a51 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java @@ -21,9 +21,9 @@ import java.io.FileNotFoundException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; +import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; -import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator; import org.apache.ignite.ml.selection.scoring.metric.Accuracy; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java index 7eb3d3b..ee2ef8b 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java @@ -21,8 +21,8 @@ import java.io.FileNotFoundException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java index 67615dd..c3bf389 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java @@ -21,8 +21,8 @@ import java.io.FileNotFoundException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java index 88a38ef..549ab77 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java @@ -21,8 +21,8 @@ import java.io.FileNotFoundException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java index 42a531b..5308287 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java @@ -24,8 +24,8 @@ import org.apache.ignite.Ignition; import org.apache.ignite.ml.knn.classification.KNNClassificationModel; import org.apache.ignite.ml.knn.classification.KNNClassificationTrainer; import org.apache.ignite.ml.knn.classification.KNNStrategy; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java index 3a882e0..c8fad61 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java @@ -21,8 +21,8 @@ import java.io.FileNotFoundException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java index 077d8c8..981e119 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java @@ -22,8 +22,8 @@ import java.util.Arrays; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.preprocessing.encoding.stringencoder.StringEncoderTrainer; import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer; import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java index 701039a..88b642b 100644 --- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java +++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java @@ -22,8 +22,8 @@ import java.util.Arrays; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.Ignition; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.nn.UpdatesStrategy; import org.apache.ignite.ml.optimization.updatecalculators.SimpleGDParameterUpdate; import org.apache.ignite.ml.optimization.updatecalculators.SimpleGDUpdateCalculator; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 index 41b10b9..a042666 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/Model.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/Model.java @@ -32,4 +32,11 @@ public interface Model<T, V> extends IgniteFunction<T, V> { 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)); } + + /** + * @param pretty Use pretty mode. + */ + default public String toString(boolean pretty) { + return getClass().getSimpleName(); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 6c09f9d..bdfa1b6 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 @@ -18,10 +18,14 @@ package org.apache.ignite.ml.clustering.kmeans; import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import org.apache.ignite.ml.Exportable; import org.apache.ignite.ml.Exporter; -import org.apache.ignite.ml.math.primitives.vector.Vector; +import org.apache.ignite.ml.math.Tracer; import org.apache.ignite.ml.math.distances.DistanceMeasure; +import org.apache.ignite.ml.math.primitives.vector.Vector; +import org.apache.ignite.ml.util.ModelTrace; /** * This class encapsulates result of clusterization by KMeans algorithm. @@ -109,4 +113,20 @@ public class KMeansModel implements ClusterizationModel<Vector, Integer>, Export return distanceMeasure.equals(that.distanceMeasure) && Arrays.deepEquals(centers, that.centers); } + /** {@inheritDoc} */ + @Override public String toString() { + return toString(false); + } + + /** {@inheritDoc} */ + @Override public String toString(boolean pretty) { + String measureName = distanceMeasure.getClass().getSimpleName(); + List<String> centersList = Arrays.stream(centers).map(x -> Tracer.asAscii(x, "%.4f", false)) + .collect(Collectors.toList()); + + return ModelTrace.builder("KMeansModel", pretty) + .addField("distance measure", measureName) + .addField("centroids", centersList) + .toString(); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.java b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.java index a0f6cc7..549b9fe 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModelFormat.java @@ -21,8 +21,8 @@ import java.io.Serializable; import java.util.Arrays; import org.apache.ignite.ml.Exportable; import org.apache.ignite.ml.Exporter; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.distances.DistanceMeasure; +import org.apache.ignite.ml.math.primitives.vector.Vector; /** * K-means model representation. http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.java index b26ff68..7dbc78a 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansTrainer.java @@ -28,11 +28,11 @@ import org.apache.ignite.ml.dataset.Dataset; import org.apache.ignite.ml.dataset.DatasetBuilder; import org.apache.ignite.ml.dataset.PartitionDataBuilder; import org.apache.ignite.ml.dataset.primitive.context.EmptyContext; -import org.apache.ignite.ml.math.primitives.vector.Vector; -import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.distances.DistanceMeasure; import org.apache.ignite.ml.math.distances.EuclideanDistance; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; +import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector; import org.apache.ignite.ml.math.util.MapUtil; import org.apache.ignite.ml.structures.LabeledDataset; @@ -43,7 +43,7 @@ import org.apache.ignite.ml.trainers.SingleLabelDatasetTrainer; /** * The trainer for KMeans algorithm. */ -public class KMeansTrainer implements SingleLabelDatasetTrainer<KMeansModel> { +public class KMeansTrainer extends SingleLabelDatasetTrainer<KMeansModel> { /** Amount of clusters. */ private int k = 2; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/composition/BaggingModelTrainer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/BaggingModelTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/BaggingModelTrainer.java index d73bd4e..f439789 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/BaggingModelTrainer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/BaggingModelTrainer.java @@ -22,25 +22,28 @@ import java.util.HashMap; import java.util.List; 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.composition.predictionsaggregator.PredictionsAggregator; import org.apache.ignite.ml.dataset.DatasetBuilder; -import org.apache.ignite.ml.math.primitives.vector.Vector; -import org.apache.ignite.ml.math.primitives.vector.VectorUtils; +import org.apache.ignite.ml.environment.logging.MLLogger; +import org.apache.ignite.ml.environment.parallelism.Promise; import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.functions.IgniteFunction; +import org.apache.ignite.ml.math.functions.IgniteSupplier; +import org.apache.ignite.ml.math.primitives.vector.Vector; +import org.apache.ignite.ml.math.primitives.vector.VectorUtils; import org.apache.ignite.ml.selection.split.mapper.SHA256UniformMapper; import org.apache.ignite.ml.trainers.DatasetTrainer; import org.apache.ignite.ml.util.Utils; import org.jetbrains.annotations.NotNull; /** - * Abstract trainer implementing bagging logic. - * In each learning iteration the algorithm trains one model on subset of learning sample and - * subspace of features space. Each model is produced from same model-class [e.g. Decision Trees]. + * Abstract trainer implementing bagging logic. In each learning iteration the algorithm trains one model on subset of + * learning sample and subspace of features space. Each model is produced from same model-class [e.g. Decision Trees]. */ -public abstract class BaggingModelTrainer implements DatasetTrainer<ModelsComposition, Double> { +public abstract class BaggingModelTrainer extends DatasetTrainer<ModelsComposition, Double> { /** * Predictions aggregator. */ @@ -89,11 +92,23 @@ public abstract class BaggingModelTrainer implements DatasetTrainer<ModelsCompos IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Double> lbExtractor) { - List<ModelOnFeaturesSubspace> learnedModels = new ArrayList<>(); - for (int i = 0; i < ensembleSize; i++) - learnedModels.add(learnModel(datasetBuilder, featureExtractor, lbExtractor)); + MLLogger log = environment.logger(getClass()); + log.log(MLLogger.VerboseLevel.LOW, "Start learning"); + + Long startTs = System.currentTimeMillis(); + + List<IgniteSupplier<ModelOnFeaturesSubspace>> tasks = new ArrayList<>(); + for(int i = 0; i < ensembleSize; i++) + tasks.add(() -> learnModel(datasetBuilder, featureExtractor, lbExtractor)); + + List<Model<Vector, Double>> models = environment.parallelismStrategy().submit(tasks) + .stream().map(Promise::unsafeGet) + .collect(Collectors.toList()); - return new ModelsComposition(learnedModels, predictionsAggregator); + double learningTime = (double)(System.currentTimeMillis() - startTs) / 1000.0; + log.log(MLLogger.VerboseLevel.LOW, "The training time was %.2fs", learningTime); + log.log(MLLogger.VerboseLevel.LOW, "Learning finished"); + return new ModelsComposition(models, predictionsAggregator); } /** @@ -114,10 +129,13 @@ public abstract class BaggingModelTrainer implements DatasetTrainer<ModelsCompos Map<Integer, Integer> featuresMapping = createFeaturesMapping(featureExtractorSeed, featureVectorSize); //TODO: IGNITE-8867 Need to implement bootstrapping algorithm + Long startTs = System.currentTimeMillis(); Model<Vector, Double> mdl = buildDatasetTrainerForModel().fit( datasetBuilder.withFilter((features, answer) -> sampleFilter.map(features, answer) < samplePartSizePerMdl), wrapFeatureExtractor(featureExtractor, featuresMapping), lbExtractor); + double learningTime = (double)(System.currentTimeMillis() - startTs) / 1000.0; + environment.logger(getClass()).log(MLLogger.VerboseLevel.HIGH, "One model training time was %.2fs", learningTime); return new ModelOnFeaturesSubspace(featuresMapping, mdl); } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 5877afa..5ef1de5 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 @@ -19,9 +19,11 @@ 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.math.primitives.vector.Vector; import org.apache.ignite.ml.math.primitives.vector.VectorUtils; +import org.apache.ignite.ml.util.ModelTrace; /** * Model trained on a features subspace with mapping from original features space to subspace. @@ -72,4 +74,21 @@ public class ModelOnFeaturesSubspace implements Model<Vector, Double> { public Model<Vector, Double> getMdl() { return mdl; } + + /** {@inheritDoc} */ + @Override public String toString() { + return toString(false); + } + + /** {@inheritDoc} */ + @Override public String toString(boolean pretty) { + String mappingStr = featuresMapping.entrySet().stream() + .map(e -> String.format("%d -> %d", e.getKey(), e.getValue())) + .collect(Collectors.joining(", ", "{", "}")); + + return ModelTrace.builder("ModelOnFeatureSubspace", pretty) + .addField("features mapping", mappingStr) + .addField("model", mdl.toString(false)) + .toString(); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 661c941..e14fa6d 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 @@ -22,6 +22,7 @@ import java.util.List; import org.apache.ignite.ml.Model; import org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator; import org.apache.ignite.ml.math.primitives.vector.Vector; +import org.apache.ignite.ml.util.ModelTrace; /** * Model consisting of several models and prediction aggregation strategy. @@ -75,4 +76,17 @@ public class ModelsComposition implements Model<Vector, Double> { public List<Model<Vector, Double>> getModels() { return models; } + + /** {@inheritDoc} */ + @Override public String toString() { + return toString(false); + } + + /** {@inheritDoc} */ + @Override public String toString(boolean pretty) { + return ModelTrace.builder("Models composition", pretty) + .addField("aggregator", predictionsAggregator.toString(pretty)) + .addField("models", models) + .toString(); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.java index 25ae2375..53a6219 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBBinaryClassifierTrainer.java @@ -25,10 +25,10 @@ import java.util.stream.Collectors; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.ml.dataset.DatasetBuilder; import org.apache.ignite.ml.dataset.primitive.builder.context.EmptyContextBuilder; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.functions.IgniteFunction; import org.apache.ignite.ml.math.functions.IgniteTriFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.structures.LabeledDataset; import org.apache.ignite.ml.structures.LabeledVector; import org.apache.ignite.ml.structures.partition.LabeledDatasetPartitionDataBuilderOnHeap; http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.java index 2c8caba..201586e 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBRegressionTrainer.java @@ -18,8 +18,8 @@ package org.apache.ignite.ml.composition.boosting; import org.apache.ignite.ml.dataset.DatasetBuilder; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; /** * Trainer for regressor using Gradient Boosting. http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/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 8bdb9b8..6726892 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 @@ -28,10 +28,11 @@ import org.apache.ignite.ml.dataset.Dataset; import org.apache.ignite.ml.dataset.DatasetBuilder; import org.apache.ignite.ml.dataset.primitive.builder.context.EmptyContextBuilder; import org.apache.ignite.ml.dataset.primitive.context.EmptyContext; +import org.apache.ignite.ml.environment.logging.MLLogger; import org.apache.ignite.ml.knn.regression.KNNRegressionTrainer; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; import org.apache.ignite.ml.math.functions.IgniteTriFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer; import org.apache.ignite.ml.regressions.linear.LinearRegressionSGDTrainer; import org.apache.ignite.ml.trainers.DatasetTrainer; @@ -42,26 +43,25 @@ import org.apache.ignite.ml.tree.randomforest.RandomForestRegressionTrainer; import org.jetbrains.annotations.NotNull; /** - * Abstract Gradient Boosting trainer. - * It implements gradient descent in functional space using user-selected regressor in child class. - * Each learning iteration the trainer evaluate gradient of error-function and fit regression model - * to it. After learning step the model is used in models composition of regressions with weight - * equal to gradient descent step. + * Abstract Gradient Boosting trainer. It implements gradient descent in functional space using user-selected regressor + * in child class. Each learning iteration the trainer evaluate gradient of error-function and fit regression model to + * it. After learning step the model is used in models composition of regressions with weight equal to gradient descent + * step. * - * These classes can be used as regressor trainers: - * {@link DecisionTreeRegressionTrainer}, {@link KNNRegressionTrainer}, - * {@link LinearRegressionLSQRTrainer}, {@link RandomForestRegressionTrainer}, - * {@link LinearRegressionSGDTrainer}. + * These classes can be used as regressor trainers: {@link DecisionTreeRegressionTrainer}, {@link KNNRegressionTrainer}, + * {@link LinearRegressionLSQRTrainer}, {@link RandomForestRegressionTrainer}, {@link LinearRegressionSGDTrainer}. * * But in practice Decision Trees is most used regressors (see: {@link DecisionTreeRegressionTrainer}). */ -abstract class GDBTrainer implements DatasetTrainer<Model<Vector, Double>, Double> { +abstract class GDBTrainer extends DatasetTrainer<Model<Vector, Double>, Double> { /** Gradient step. */ private final double gradientStep; /** Count of iterations. */ private final int cntOfIterations; - /** Gradient of loss function. First argument is sample size, second argument is valid answer, - * third argument is current model prediction. */ + /** + * Gradient of loss function. First argument is sample size, second argument is valid answer, third argument is + * current model prediction. + */ private final IgniteTriFunction<Long, Double, Double, Double> lossGradient; /** @@ -69,9 +69,11 @@ abstract class GDBTrainer implements DatasetTrainer<Model<Vector, Double>, Doubl * * @param gradStepSize Grad step size. * @param cntOfIterations Count of learning iterations. - * @param lossGradient Gradient of loss function. First argument is sample size, second argument is valid answer third argument is current model prediction. + * @param lossGradient Gradient of loss function. First argument is sample size, second argument is valid answer + * third argument is current model prediction. */ - public GDBTrainer(double gradStepSize, Integer cntOfIterations, IgniteTriFunction<Long, Double, Double, Double> lossGradient) { + public GDBTrainer(double gradStepSize, Integer cntOfIterations, + IgniteTriFunction<Long, Double, Double, Double> lossGradient) { gradientStep = gradStepSize; this.cntOfIterations = cntOfIterations; this.lossGradient = lossGradient; @@ -94,6 +96,7 @@ abstract class GDBTrainer implements DatasetTrainer<Model<Vector, Double>, Doubl Arrays.fill(compositionWeights, gradientStep); WeightedPredictionsAggregator resAggregator = new WeightedPredictionsAggregator(compositionWeights, mean); + long learningStartTs = System.currentTimeMillis(); for (int i = 0; i < cntOfIterations; i++) { double[] weights = Arrays.copyOf(compositionWeights, i); WeightedPredictionsAggregator aggregator = new WeightedPredictionsAggregator(weights, mean); @@ -105,8 +108,13 @@ abstract class GDBTrainer implements DatasetTrainer<Model<Vector, Double>, Doubl return -lossGradient.apply(sampleSize, realAnswer, mdlAnswer); }; + long startTs = System.currentTimeMillis(); models.add(buildBaseModelTrainer().fit(datasetBuilder, featureExtractor, lbExtractorWrap)); + double learningTime = (double)(System.currentTimeMillis() - startTs) / 1000.0; + environment.logger(getClass()).log(MLLogger.VerboseLevel.LOW, "One model training time was %.2fs", learningTime); } + double learningTime = (double)(System.currentTimeMillis() - learningStartTs) / 1000.0; + environment.logger(getClass()).log(MLLogger.VerboseLevel.LOW, "The training time was %.2fs", learningTime); return new ModelsComposition(models, resAggregator) { @Override public Double apply(Vector features) { @@ -122,7 +130,7 @@ abstract class GDBTrainer implements DatasetTrainer<Model<Vector, Double>, Doubl * @param featureExtractor Feature extractor. * @param lExtractor Labels extractor. */ - protected abstract <V, K> void learnLabels(DatasetBuilder<K, V> builder, + protected abstract <V, K> void learnLabels(DatasetBuilder<K, V> builder, IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Double> lExtractor); /** http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.java index 86b1e96..d996a2a 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/PredictionsAggregator.java @@ -23,4 +23,12 @@ import org.apache.ignite.ml.math.functions.IgniteFunction; * Predictions aggregator interface. */ public interface PredictionsAggregator extends IgniteFunction<double[], Double> { + /** + * Represents aggregator as String. + * + * @param pretty Use pretty mode. + */ + public default String toString(boolean pretty) { + return getClass().getSimpleName(); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.java b/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.java index f6bbe9c..c37fdf7 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/composition/predictionsaggregator/WeightedPredictionsAggregator.java @@ -62,4 +62,28 @@ public class WeightedPredictionsAggregator implements PredictionsAggregator { return res; } + + /** {@inheritDoc} */ + @Override public String toString() { + return toString(false); + } + + /** {@inheritDoc} */ + @Override public String toString(boolean pretty) { + String clsName = getClass().getSimpleName(); + if(!pretty) + return clsName; + + StringBuilder builder = new StringBuilder(clsName).append(" ["); + for(int i = 0; i < weights.length; i++) { + final String SIGN = weights[i] > 0 ? " + " : " - "; + builder + .append(i > 0 || weights[i] < 0 ? SIGN : "") + .append(String.format("%.4f", Math.abs(weights[i]))) + .append("*x").append(i); + } + + return builder.append(bias > 0 ? " + " : " - ").append(String.format("%.4f", bias)) + .append("]").toString(); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/DatasetFactory.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/dataset/DatasetFactory.java b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/DatasetFactory.java index 75ac6d3..ffd3136 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/dataset/DatasetFactory.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/DatasetFactory.java @@ -31,8 +31,8 @@ import org.apache.ignite.ml.dataset.primitive.builder.data.SimpleLabeledDatasetD import org.apache.ignite.ml.dataset.primitive.context.EmptyContext; import org.apache.ignite.ml.dataset.primitive.data.SimpleDatasetData; import org.apache.ignite.ml.dataset.primitive.data.SimpleLabeledDatasetData; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; /** * Factory providing a client facing API that allows to construct basic and the most frequently used types of dataset. http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.java b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.java index e2f98c2..cf5bc7a 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleDatasetDataBuilder.java @@ -22,8 +22,8 @@ import java.util.Iterator; import org.apache.ignite.ml.dataset.PartitionDataBuilder; import org.apache.ignite.ml.dataset.UpstreamEntry; import org.apache.ignite.ml.dataset.primitive.data.SimpleDatasetData; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; /** * A partition {@code data} builder that makes {@link SimpleDatasetData}. http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.java b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.java index 1bfd949..6286255 100644 --- a/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.java +++ b/modules/ml/src/main/java/org/apache/ignite/ml/dataset/primitive/builder/data/SimpleLabeledDatasetDataBuilder.java @@ -22,8 +22,8 @@ import java.util.Iterator; import org.apache.ignite.ml.dataset.PartitionDataBuilder; import org.apache.ignite.ml.dataset.UpstreamEntry; import org.apache.ignite.ml.dataset.primitive.data.SimpleLabeledDatasetData; -import org.apache.ignite.ml.math.primitives.vector.Vector; import org.apache.ignite.ml.math.functions.IgniteBiFunction; +import org.apache.ignite.ml.math.primitives.vector.Vector; /** * A partition {@code data} builder that makes {@link SimpleLabeledDatasetData}. http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironment.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironment.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironment.java new file mode 100644 index 0000000..2b94a2f --- /dev/null +++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironment.java @@ -0,0 +1,54 @@ +/* + * 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.environment; + +import org.apache.ignite.ml.environment.logging.MLLogger; +import org.apache.ignite.ml.environment.parallelism.ParallelismStrategy; + +/** + * Specifies a set of utility-objects helpful at runtime but optional for learning algorithm + * (like thread pool for parallel learning in bagging model or logger). + */ +public interface LearningEnvironment { + /** Default environment */ + public static final LearningEnvironment DEFAULT = builder().build(); + + /** + * Returns Parallelism Strategy instance. + */ + public ParallelismStrategy parallelismStrategy(); + + /** + * Returns an instance of logger. + */ + public MLLogger logger(); + + /** + * Returns an instance of logger for specific class. + * + * @param forClass Logging class context. + */ + public <T> MLLogger logger(Class<T> forClass); + + /** + * Creates an instance of LearningEnvironmentBuilder. + */ + public static LearningEnvironmentBuilder builder() { + return new LearningEnvironmentBuilder(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.java new file mode 100644 index 0000000..be56ccc --- /dev/null +++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/LearningEnvironmentBuilder.java @@ -0,0 +1,123 @@ +/* + * 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.environment; + +import org.apache.ignite.ml.environment.logging.MLLogger; +import org.apache.ignite.ml.environment.logging.NoOpLogger; +import org.apache.ignite.ml.environment.parallelism.DefaultParallelismStrategy; +import org.apache.ignite.ml.environment.parallelism.NoParallelismStrategy; +import org.apache.ignite.ml.environment.parallelism.ParallelismStrategy; + +/** + * Builder for LearningEnvironment. + */ +public class LearningEnvironmentBuilder { + /** Parallelism strategy. */ + private ParallelismStrategy parallelismStgy; + /** Logging factory. */ + private MLLogger.Factory loggingFactory; + + /** + * Creates an instance of LearningEnvironmentBuilder. + */ + LearningEnvironmentBuilder() { + parallelismStgy = NoParallelismStrategy.INSTANCE; + loggingFactory = NoOpLogger.factory(); + } + + /** + * Specifies Parallelism Strategy for LearningEnvironment. + * + * @param stgy Parallelism Strategy. + */ + public <T> LearningEnvironmentBuilder withParallelismStrategy(ParallelismStrategy stgy) { + this.parallelismStgy = stgy; + + return this; + } + + /** + * Specifies Parallelism Strategy for LearningEnvironment. + * + * @param stgyType Parallelism Strategy Type. + */ + public LearningEnvironmentBuilder withParallelismStrategy(ParallelismStrategy.Type stgyType) { + switch (stgyType) { + case NO_PARALLELISM: + this.parallelismStgy = NoParallelismStrategy.INSTANCE; + case ON_DEFAULT_POOL: + this.parallelismStgy = new DefaultParallelismStrategy(); + } + return this; + } + + + /** + * Specifies Logging factory for LearningEnvironment. + * + * @param loggingFactory Logging Factory. + */ + public LearningEnvironmentBuilder withLoggingFactory(MLLogger.Factory loggingFactory) { + this.loggingFactory = loggingFactory; + return this; + } + + /** + * Create an instance of LearningEnvironment. + */ + public LearningEnvironment build() { + return new LearningEnvironmentImpl(parallelismStgy, loggingFactory); + } + + /** + * Default LearningEnvironment implementation. + */ + private class LearningEnvironmentImpl implements LearningEnvironment { + /** Parallelism strategy. */ + private final ParallelismStrategy parallelismStgy; + /** Logging factory. */ + private final MLLogger.Factory loggingFactory; + + /** + * Creates an instance of LearningEnvironmentImpl. + * + * @param parallelismStgy Parallelism strategy. + * @param loggingFactory Logging factory. + */ + private LearningEnvironmentImpl(ParallelismStrategy parallelismStgy, + MLLogger.Factory loggingFactory) { + this.parallelismStgy = parallelismStgy; + this.loggingFactory = loggingFactory; + } + + /** {@inheritDoc} */ + @Override public ParallelismStrategy parallelismStrategy() { + return parallelismStgy; + } + + /** {@inheritDoc} */ + @Override public MLLogger logger() { + return loggingFactory.create(getClass()); + } + + /** {@inheritDoc} */ + @Override public <T> MLLogger logger(Class<T> clazz) { + return loggingFactory.create(clazz); + } + } +}