You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ch...@apache.org on 2018/08/31 08:37:21 UTC
[3/3] ignite git commit: IGNITE-9348: ML examples improvements,
follow-up to IGNITE-9297
IGNITE-9348: ML examples improvements, follow-up to IGNITE-9297
this closes #4641
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/145a2898
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/145a2898
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/145a2898
Branch: refs/heads/master
Commit: 145a28981017026c86ab509ac3d660449715bbb1
Parents: 2108b3b
Author: Oleg Ignatenko <oi...@gridgain.com>
Authored: Fri Aug 31 11:37:10 2018 +0300
Committer: Yury Babak <yb...@gridgain.com>
Committed: Fri Aug 31 11:37:10 2018 +0300
----------------------------------------------------------------------
.../clustering/KMeansClusterizationExample.java | 3 +-
.../AlgorithmSpecificDatasetExample.java | 5 +-
.../ml/dataset/LocalDatasetExample.java | 69 --
.../change/OptimizeMakeChangeGAExample.java | 14 +-
.../OptimizeMakeChangeTerminateCriteria.java | 42 +-
.../genetic/helloworld/HelloWorldGAExample.java | 13 +-
.../helloworld/HelloWorldTerminateCriteria.java | 34 +-
.../ml/genetic/knapsack/KnapsackGAExample.java | 12 +-
.../knapsack/KnapsackTerminateCriteria.java | 47 +-
.../ml/genetic/movie/MovieGAExample.java | 6 +-
.../genetic/movie/MovieTerminateCriteria.java | 42 +-
.../ml/knn/ANNClassificationExample.java | 3 +-
.../ml/knn/KNNClassificationExample.java | 3 +-
.../examples/ml/knn/KNNRegressionExample.java | 3 +-
.../examples/ml/nn/MLPTrainerExample.java | 3 +-
.../LinearRegressionLSQRTrainerExample.java | 3 +-
...ssionLSQRTrainerWithMinMaxScalerExample.java | 3 +-
.../LinearRegressionSGDTrainerExample.java | 5 +-
.../LogisticRegressionSGDTrainerExample.java | 4 +-
.../ml/selection/cv/CrossValidationExample.java | 6 +-
.../RandomForestClassificationExample.java | 51 +-
.../RandomForestRegressionExample.java | 1064 +++++++++---------
.../ml/environment/EnvironmentTestSuite.java | 1 +
.../ml/environment/LearningEnvironmentTest.java | 201 ++++
24 files changed, 920 insertions(+), 717 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 c310302..b96cbce 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
@@ -38,7 +38,8 @@ import org.apache.ignite.thread.IgniteThread;
* Code in this example launches Ignite grid and fills the cache with test data points (based on the
* <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
* <p>
- * After that it trains the model based on the specified data using KMeans algorithm.</p>
+ * After that it trains the model based on the specified data using
+ * <a href="https://en.wikipedia.org/wiki/K-means_clustering">KMeans</a> algorithm.</p>
* <p>
* Finally, this example loops over the test set of data points, applies the trained model to predict what cluster
* does this point belong to, and compares prediction to expected outcome (ground truth).</p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/examples/src/main/java/org/apache/ignite/examples/ml/dataset/AlgorithmSpecificDatasetExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/dataset/AlgorithmSpecificDatasetExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/dataset/AlgorithmSpecificDatasetExample.java
index de7f0e9..4d42d19 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/dataset/AlgorithmSpecificDatasetExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/dataset/AlgorithmSpecificDatasetExample.java
@@ -34,8 +34,9 @@ import org.apache.ignite.ml.dataset.primitive.data.SimpleLabeledDatasetData;
import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
/**
- * Example that shows how to implement your own algorithm (gradient descent trainer for linear regression) which uses
- * dataset as an underlying infrastructure.
+ * Example that shows how to implement your own algorithm
+ * (<a href="https://en.wikipedia.org/wiki/Gradient_descent">gradient</a> descent trainer for linear regression)
+ * which uses dataset as an underlying infrastructure.
* <p>
* Code in this example launches Ignite grid and fills the cache with simple test data.</p>
* <p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/examples/src/main/java/org/apache/ignite/examples/ml/dataset/LocalDatasetExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/dataset/LocalDatasetExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/dataset/LocalDatasetExample.java
deleted file mode 100644
index 282e76b..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/dataset/LocalDatasetExample.java
+++ /dev/null
@@ -1,69 +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.dataset;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.ignite.examples.ml.dataset.model.Person;
-import org.apache.ignite.examples.ml.util.DatasetHelper;
-import org.apache.ignite.ml.dataset.DatasetFactory;
-import org.apache.ignite.ml.dataset.primitive.SimpleDataset;
-import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
-
-/**
- * Example that shows how to create dataset based on an existing local storage and then use it to calculate {@code mean}
- * and {@code std} values as well as {@code covariance} and {@code correlation} matrices.
- * <p>
- * Code in this example the storage with simple test data.</p>
- * <p>
- * After that it creates the dataset based on the data in the storage and uses Dataset API to find and output
- * various statistical metrics of the data.</p>
- * <p>
- * You can change the test data used in this example and re-run it to explore this functionality further.</p>
- */
-public class LocalDatasetExample {
- /** Run example. */
- public static void main(String[] args) throws Exception {
- System.out.println(">>> Local Dataset example started.");
-
- Map<Integer, Person> persons = createCache();
-
- // Creates a local simple dataset containing features and providing standard dataset API.
- try (SimpleDataset<?> dataset = DatasetFactory.createSimpleDataset(
- persons,
- 2,
- (k, v) -> VectorUtils.of(v.getAge(), v.getSalary())
- )) {
- new DatasetHelper(dataset).describe();
- }
-
- System.out.println(">>> Local Dataset example completed.");
- }
-
- /** */
- private static Map<Integer, Person> createCache() {
- Map<Integer, Person> persons = new HashMap<>();
-
- persons.put(1, new Person("Mike", 42, 10000));
- persons.put(2, new Person("John", 32, 64000));
- persons.put(3, new Person("George", 53, 120000));
- persons.put(4, new Person("Karl", 24, 70000));
-
- return persons;
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 ed392c29..36a5f47 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
@@ -20,7 +20,6 @@ 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;
@@ -64,8 +63,6 @@ public class OptimizeMakeChangeGAExample {
public static void main(String args[]) {
System.out.println(">>> OptimizeMakeChange GA grid example started.");
- System.setProperty("IGNITE_QUIET", "false");
-
String sAmountChange = "75";
StringBuilder sbErrorMsg = new StringBuilder();
@@ -85,8 +82,6 @@ public class OptimizeMakeChangeGAExample {
// Create an Ignite instance as you would in any other use case.
Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
- IgniteLogger log = ignite.log();
-
// Create GAConfiguration.
GAConfiguration gaCfg = new GAConfiguration();
@@ -120,7 +115,8 @@ public class OptimizeMakeChangeGAExample {
gaCfg.setFitnessFunction(function);
// Create and set TerminateCriteria.
- OptimizeMakeChangeTerminateCriteria termCriteria = new OptimizeMakeChangeTerminateCriteria(ignite);
+ OptimizeMakeChangeTerminateCriteria termCriteria = new OptimizeMakeChangeTerminateCriteria(ignite,
+ System.out::println);
ChromosomeCriteria chromosomeCriteria = new ChromosomeCriteria();
@@ -139,11 +135,11 @@ public class OptimizeMakeChangeGAExample {
// Initialize GAGrid.
GAGrid gaGrid = new GAGrid(gaCfg, ignite);
- log.info("##########################################################################################");
+ System.out.println("##########################################################################################");
- log.info("Calculating optimal set of coins where amount of change is " + sAmountChange);
+ System.out.println("Calculating optimal set of coins where amount of change is " + sAmountChange);
- log.info("##########################################################################################");
+ System.out.println("##########################################################################################");
Chromosome chromosome = gaGrid.evolve();
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 1d6612c..2d65d3f 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,8 +18,8 @@
package org.apache.ignite.examples.ml.genetic.change;
import java.util.List;
+import java.util.function.Consumer;
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;
@@ -29,19 +29,21 @@ import org.apache.ignite.ml.genetic.utils.GAGridUtils;
* Terminate Condition implementation for {@link OptimizeMakeChangeGAExample}.
*/
public class OptimizeMakeChangeTerminateCriteria implements ITerminateCriteria {
- /** Ignite logger. */
- private IgniteLogger igniteLog;
- /** Ignite instance. */
- private Ignite ignite;
+ /** */
+ private final Ignite ignite;
+
+ /** */
+ private final Consumer<String> logConsumer;
/**
* Create class instance.
*
* @param ignite Ignite instance.
+ * @param logConsumer Logging consumer.
*/
- public OptimizeMakeChangeTerminateCriteria(Ignite ignite) {
+ OptimizeMakeChangeTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
this.ignite = ignite;
- this.igniteLog = ignite.log();
+ this.logConsumer = logConsumer;
}
/**
@@ -56,13 +58,14 @@ public class OptimizeMakeChangeTerminateCriteria implements ITerminateCriteria {
int currGeneration) {
boolean isTerminate = true;
- igniteLog.info("##########################################################################################");
- igniteLog.info("Generation: " + currGeneration);
- igniteLog.info("Fittest is Chromosome Key: " + fittestChromosome);
- igniteLog.info("Chromosome: " + fittestChromosome);
- printCoins(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome));
- igniteLog.info("Avg Chromosome Fitness: " + averageFitnessScore);
- igniteLog.info("##########################################################################################");
+ logConsumer.accept(
+ "\n##########################################################################################"
+ + "\n Generation: " + currGeneration
+ + "\n Fittest is Chromosome Key: " + fittestChromosome
+ + "\n Chromosome: " + fittestChromosome
+ + "\n" + reportCoins(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
+ + "\nAvg Chromosome Fitness: " + averageFitnessScore
+ + "\n##########################################################################################");
if (!(currGeneration > 5))
isTerminate = false;
@@ -74,11 +77,16 @@ public class OptimizeMakeChangeTerminateCriteria implements ITerminateCriteria {
* Helper to print change details.
*
* @param genes List if Genes.
+ * @return Details to print.
*/
- private void printCoins(List<Gene> genes) {
+ private String reportCoins(List<Gene> genes) {
+ StringBuilder sb = new StringBuilder();
+
for (Gene gene : genes) {
- igniteLog.info("Coin Type: " + ((Coin)gene.getVal()).getCoinType().toString());
- igniteLog.info("Number of Coins: " + ((Coin)gene.getVal()).getNumOfCoins());
+ sb.append("\nCoin Type: ").append(((Coin)gene.getVal()).getCoinType().toString())
+ .append("\nNumber of Coins: ").append(((Coin)gene.getVal()).getNumOfCoins());
}
+
+ return sb.toString();
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 3182d2f..585cbb5 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,6 +19,7 @@ package org.apache.ignite.examples.ml.genetic.helloworld;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.ml.genetic.Chromosome;
@@ -56,8 +57,6 @@ public class HelloWorldGAExample {
public static void main(String args[]) {
System.out.println(">>> HelloWorld GA grid example started.");
- System.setProperty("IGNITE_QUIET", "false");
-
try {
// Create an Ignite instance as you would in any other use case.
Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
@@ -79,10 +78,14 @@ public class HelloWorldGAExample {
gaCfg.setFitnessFunction(function);
// Create and set TerminateCriteria.
- HelloWorldTerminateCriteria termCriteria = new HelloWorldTerminateCriteria(ignite);
- gaCfg.setTerminateCriteria(termCriteria);
+ AtomicInteger cnt = new AtomicInteger(0);
+ HelloWorldTerminateCriteria termCriteria = new HelloWorldTerminateCriteria(ignite,
+ msg -> {
+ if (cnt.getAndIncrement() % 20 == 0)
+ System.out.println(msg);
+ });
- ignite.log();
+ gaCfg.setTerminateCriteria(termCriteria);
GAGrid gaGrid = new GAGrid(gaCfg, ignite);
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 f149da1..610d479 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,8 +18,8 @@
package org.apache.ignite.examples.ml.genetic.helloworld;
import java.util.List;
+import java.util.function.Consumer;
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;
@@ -31,19 +31,21 @@ import org.apache.ignite.ml.genetic.utils.GAGridUtils;
* Class terminates Genetic algorithm when fitness score is more than 10.</p>
*/
public class HelloWorldTerminateCriteria implements ITerminateCriteria {
- /** Ignite logger. */
- private IgniteLogger igniteLog;
/** Ignite instance. */
- private Ignite ignite;
+ private final Ignite ignite;
+
+ /** */
+ private final Consumer<String> logConsumer;
/**
* Create class instance.
*
* @param ignite Ignite instance.
+ * @param logConsumer Logging consumer.
*/
- public HelloWorldTerminateCriteria(Ignite ignite) {
+ HelloWorldTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
this.ignite = ignite;
- this.igniteLog = ignite.log();
+ this.logConsumer = logConsumer;
}
/**
@@ -58,13 +60,14 @@ public class HelloWorldTerminateCriteria implements ITerminateCriteria {
int currGeneration) {
boolean isTerminate = true;
- igniteLog.info("##########################################################################################");
- igniteLog.info("Generation: " + currGeneration);
- igniteLog.info("Fittest is Chromosome Key: " + fittestChromosome);
- igniteLog.info("Chromosome: " + fittestChromosome);
- printPhrase(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome));
- igniteLog.info("Avg Chromosome Fitness: " + averageFitnessScore);
- igniteLog.info("##########################################################################################");
+ logConsumer.accept(
+ "\n##########################################################################################"
+ + "\n Generation: " + currGeneration
+ + "\n Fittest is Chromosome Key: " + fittestChromosome
+ + "\n Chromosome: " + fittestChromosome
+ + "\n" + printPhrase(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
+ + "\nAvg Chromosome Fitness: " + averageFitnessScore
+ + "\n##########################################################################################");
if (!(fittestChromosome.getFitnessScore() > 10))
isTerminate = false;
@@ -76,13 +79,14 @@ public class HelloWorldTerminateCriteria implements ITerminateCriteria {
* Helper to print phrase.
*
* @param genes List of Genes.
+ * @return Phrase to print.
*/
- private void printPhrase(List<Gene> genes) {
+ private String printPhrase(List<Gene> genes) {
StringBuilder sbPhrase = new StringBuilder();
for (Gene gene : genes)
sbPhrase.append(((Character)gene.getVal()).toString());
- igniteLog.info(sbPhrase.toString());
+ return sbPhrase.toString();
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 873c1c6..1631a95 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,6 +19,7 @@ package org.apache.ignite.examples.ml.genetic.knapsack;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.ml.genetic.Chromosome;
@@ -55,8 +56,6 @@ public class KnapsackGAExample {
public static void main(String args[]) {
System.out.println(">>> Knapsack GA grid example started.");
- System.setProperty("IGNITE_QUIET", "false");
-
try {
// Create an Ignite instance as you would in any other use case.
Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
@@ -78,11 +77,14 @@ public class KnapsackGAExample {
gaCfg.setFitnessFunction(function);
// Create and set TerminateCriteria.
- KnapsackTerminateCriteria termCriteria = new KnapsackTerminateCriteria(ignite);
+ AtomicInteger cnt = new AtomicInteger(0);
+ KnapsackTerminateCriteria termCriteria = new KnapsackTerminateCriteria(ignite,
+ msg -> {
+ if (cnt.getAndIncrement() % 10 == 0)
+ System.out.println(msg);
+ });
gaCfg.setTerminateCriteria(termCriteria);
- ignite.log();
-
GAGrid gaGrid = new GAGrid(gaCfg, ignite);
// Evolve the population.
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 1bba159..09e047b 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,8 +18,8 @@
package org.apache.ignite.examples.ml.genetic.knapsack;
import java.util.List;
+import java.util.function.Consumer;
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;
@@ -32,19 +32,20 @@ import org.apache.ignite.ml.genetic.utils.GAGridUtils;
*/
public class KnapsackTerminateCriteria implements ITerminateCriteria {
/** Ignite instance. */
- private Ignite ignite;
+ private final Ignite ignite;
- /** Ignite logger. */
- private IgniteLogger igniteLog;
+ /** */
+ private final Consumer<String> logConsumer;
/**
* Create class instance.
*
* @param ignite Ignite instance.
+ * @param logConsumer Logging consumer.
*/
- public KnapsackTerminateCriteria(Ignite ignite) {
+ KnapsackTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
this.ignite = ignite;
- this.igniteLog = this.ignite.log();
+ this.logConsumer = logConsumer;
}
/**
@@ -59,15 +60,16 @@ public class KnapsackTerminateCriteria implements ITerminateCriteria {
int currGeneration) {
boolean isTerminate = true;
- igniteLog.info("##########################################################################################");
- igniteLog.info("Generation: " + currGeneration);
- igniteLog.info("Fittest is Chromosome Key: " + fittestChromosome);
- igniteLog.info("Total value is: " + fittestChromosome.getFitnessScore());
- igniteLog.info("Total weight is: " + calculateTotalWeight(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome)));
- igniteLog.info("Avg Chromosome Fitness: " + averageFitnessScore);
- igniteLog.info("Chromosome: " + fittestChromosome);
- printItems(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome));
- igniteLog.info("##########################################################################################");
+ logConsumer.accept(
+ "\n##########################################################################################"
+ + "\n Generation: " + currGeneration
+ + "\n Fittest is Chromosome Key: " + fittestChromosome
+ + "\nTotal value is: " + fittestChromosome.getFitnessScore()
+ + "\nTotal weight is: " + calculateTotalWeight(
+ GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
+ + "\nChromosome: " + fittestChromosome
+ + "\n" + reportItems(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
+ + "\n##########################################################################################");
if (!(currGeneration > 29))
isTerminate = false;
@@ -93,13 +95,18 @@ public class KnapsackTerminateCriteria implements ITerminateCriteria {
* Helper to print items in knapsack.
*
* @param genes List of Genes.
+ * @return Items to print.
*/
- private void printItems(List<Gene> genes) {
+ private String reportItems(List<Gene> genes) {
+ StringBuilder sb = new StringBuilder();
+
for (Gene gene : genes) {
- igniteLog.info("------------------------------------------------------------------------------------------");
- igniteLog.info("Name: " + ((Item)gene.getVal()).getName());
- igniteLog.info("Weight: " + ((Item)gene.getVal()).getWeight());
- igniteLog.info("Value: " + ((Item)gene.getVal()).getVal());
+ sb.append("\n------------------------------------------------------------------------------------------")
+ .append("\nName: ").append(((Item)gene.getVal()).getName())
+ .append("\nWeight: ").append(((Item)gene.getVal()).getWeight())
+ .append("\nValue: ").append(((Item)gene.getVal()).getVal());
}
+
+ return sb.toString();
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 51e28be..cec2719 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
@@ -61,8 +61,6 @@ public class MovieGAExample {
public static void main(String args[]) {
System.out.println(">>> Movie GA grid example started.");
- System.setProperty("IGNITE_QUIET", "false");
-
List<String> genres = new ArrayList<>();
String sGenres = "Action,Comedy,Romance";
@@ -110,14 +108,12 @@ public class MovieGAExample {
// Create an Ignite instance as you would in any other use case.
Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
- MovieTerminateCriteria termCriteria = new MovieTerminateCriteria(ignite);
+ MovieTerminateCriteria termCriteria = new MovieTerminateCriteria(ignite, System.out::println);
gaCfg.setTerminateCriteria(termCriteria);
GAGrid gaGrid = new GAGrid(gaCfg, ignite);
- ignite.log();
-
Chromosome chromosome = gaGrid.evolve();
System.out.println(">>> Evolution result: " + chromosome);
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 7110a7c..68c577f 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,8 +18,8 @@
package org.apache.ignite.examples.ml.genetic.movie;
import java.util.List;
+import java.util.function.Consumer;
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;
@@ -31,19 +31,21 @@ import org.apache.ignite.ml.genetic.utils.GAGridUtils;
* Class terminates Genetic algorithm when fitness score is more than 32.</p>
*/
public class MovieTerminateCriteria implements ITerminateCriteria {
- /** Ignite logger. */
- private IgniteLogger igniteLog;
/** Ignite instance. */
- private Ignite ignite;
+ private final Ignite ignite;
+
+ /** */
+ private final Consumer<String> logConsumer;
/**
* Create class instance.
*
* @param ignite Ignite instance.
+ * @param logConsumer Logging consumer.
*/
- public MovieTerminateCriteria(Ignite ignite) {
+ MovieTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
this.ignite = ignite;
- this.igniteLog = ignite.log();
+ this.logConsumer = logConsumer;
}
@@ -59,12 +61,13 @@ public class MovieTerminateCriteria implements ITerminateCriteria {
int currGeneration) {
boolean isTerminate = true;
- igniteLog.info("##########################################################################################");
- igniteLog.info("Generation: " + currGeneration);
- igniteLog.info("Fittest is Chromosome Key: " + fittestChromosome);
- igniteLog.info("Chromosome: " + fittestChromosome);
- printMovies(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome));
- igniteLog.info("##########################################################################################");
+ logConsumer.accept(
+ "\n##########################################################################################"
+ + "\n Generation: " + currGeneration
+ + "\n Fittest is Chromosome Key: " + fittestChromosome
+ + "\nChromosome: " + fittestChromosome
+ + "\n" + reportMovies(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
+ + "\n##########################################################################################");
if (!(fittestChromosome.getFitnessScore() > 32))
isTerminate = false;
@@ -73,15 +76,20 @@ public class MovieTerminateCriteria implements ITerminateCriteria {
}
/**
- * Helper to print change details.
+ * Helper to print movies details.
*
* @param genes List of Genes.
+ * @return Movies details.
*/
- private void printMovies(List<Gene> genes) {
+ private String reportMovies(List<Gene> genes) {
+ StringBuilder sb = new StringBuilder();
+
for (Gene gene : genes) {
- igniteLog.info("Name: " + ((Movie)gene.getVal()).getName());
- igniteLog.info("Genres: " + ((Movie)gene.getVal()).getGenre().toString());
- igniteLog.info("IMDB Rating: " + ((Movie)gene.getVal()).getImdbRating());
+ sb.append("\nName: ").append(((Movie)gene.getVal()).getName())
+ .append("\nGenres: ").append(((Movie)gene.getVal()).getGenre().toString())
+ .append("\nIMDB Rating: ").append(((Movie)gene.getVal()).getImdbRating());
}
+
+ return sb.toString();
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 37cb231..8a2d786 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
@@ -42,7 +42,8 @@ import org.apache.ignite.thread.IgniteThread;
* Code in this example launches Ignite grid and fills the cache with test data points (based on the
* <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
* <p>
- * After that it trains the model based on the specified data using kNN algorithm.</p>
+ * After that it trains the model based on the specified data using
+ * <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">kNN</a> algorithm.</p>
* <p>
* Finally, this example loops over the test set of data points, applies the trained model to predict what cluster
* does this point belong to, and compares prediction to expected outcome (ground truth).</p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 77a48ad..cf285a4 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
@@ -39,7 +39,8 @@ import org.apache.ignite.thread.IgniteThread;
* Code in this example launches Ignite grid and fills the cache with test data points (based on the
* <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
* <p>
- * After that it trains the model based on the specified data using kNN algorithm.</p>
+ * After that it trains the model based on the specified data using
+ * <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">kNN</a> algorithm.</p>
* <p>
* Finally, this example loops over the test set of data points, applies the trained model to predict what cluster
* does this point belong to, and compares prediction to expected outcome (ground truth).</p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 a28ecc4..78f38c8 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
@@ -39,7 +39,8 @@ import org.apache.ignite.thread.IgniteThread;
* Code in this example launches Ignite grid and fills the cache with test data points (based on the
* <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
* <p>
- * After that it trains the model based on the specified data using kNN regression algorithm.</p>
+ * After that it trains the model based on the specified data using
+ * <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">kNN</a> regression algorithm.</p>
* <p>
* Finally, this example loops over the test set of data points, applies the trained model to predict what cluster
* does this point belong to, and compares prediction to expected outcome (ground truth).</p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 30f8769..3e5a98c 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
@@ -41,7 +41,8 @@ import org.apache.ignite.thread.IgniteThread;
* <p>
* Code in this example launches Ignite grid and fills the cache with simple test data.</p>
* <p>
- * After that it defines a layered architecture and a neural network trainer, trains neural network
+ * After that it defines a layered architecture and a
+ * <a href="https://en.wikipedia.org/wiki/Neural_network">neural network</a> trainer, trains neural network
* and obtains multilayer perceptron model.</p>
* <p>
* Finally, this example loops over the test set, applies the trained model to predict the value and
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 085a089..6ac445c 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
@@ -32,7 +32,8 @@ import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
import org.apache.ignite.thread.IgniteThread;
/**
- * Run linear regression model ({@link LinearRegressionLSQRTrainer}) over cached dataset.
+ * Run linear regression model based on <a href="http://web.stanford.edu/group/SOL/software/lsqr/">LSQR algorithm</a>
+ * ({@link LinearRegressionLSQRTrainer}) over cached dataset.
* <p>
* Code in this example launches Ignite grid and fills the cache with simple test data.</p>
* <p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 39f3771..320d464 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
@@ -35,7 +35,8 @@ import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
import org.apache.ignite.thread.IgniteThread;
/**
- * Run linear regression model ({@link LinearRegressionLSQRTrainer}) over cached dataset that was created using
+ * Run linear regression model based on <a href="http://web.stanford.edu/group/SOL/software/lsqr/">LSQR algorithm</a>
+ * ({@link LinearRegressionLSQRTrainer}) over cached dataset that was created using
* a minmaxscaling preprocessor ({@link MinMaxScalerTrainer}, {@link MinMaxScalerPreprocessor}).
* <p>
* Code in this example launches Ignite grid, fills the cache with simple test data, and defines minmaxscaling
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 0a1e966..9fdc0df 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
@@ -35,8 +35,9 @@ import org.apache.ignite.ml.regressions.linear.LinearRegressionSGDTrainer;
import org.apache.ignite.thread.IgniteThread;
/**
- * Run linear regression model based on stochastic gradient descent algorithm ({@link LinearRegressionSGDTrainer})
- * over cached dataset.
+ * Run linear regression model based on based on
+ * <a href="https://en.wikipedia.org/wiki/Stochastic_gradient_descent">stochastic gradient descent</a> algorithm
+ * ({@link LinearRegressionSGDTrainer}) over cached dataset.
* <p>
* Code in this example launches Ignite grid and fills the cache with simple test data.</p>
* <p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 7e1c773..0a6ff01 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
@@ -35,8 +35,8 @@ import org.apache.ignite.ml.regressions.logistic.binomial.LogisticRegressionSGDT
import org.apache.ignite.thread.IgniteThread;
/**
- * Run logistic regression model based on stochastic gradient descent algorithm ({@link LogisticRegressionSGDTrainer})
- * over distributed cache.
+ * Run logistic regression model based on <a href="https://en.wikipedia.org/wiki/Stochastic_gradient_descent">
+ * stochastic gradient descent</a> algorithm ({@link LogisticRegressionSGDTrainer}) over distributed cache.
* <p>
* Code in this example launches Ignite grid and fills the cache with test data points (based on the
* <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/examples/src/main/java/org/apache/ignite/examples/ml/selection/cv/CrossValidationExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/cv/CrossValidationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/cv/CrossValidationExample.java
index f1b5650..eb4c8f3 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/selection/cv/CrossValidationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/cv/CrossValidationExample.java
@@ -33,11 +33,13 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
import org.apache.ignite.thread.IgniteThread;
/**
- * Run decision tree classification with cross validation ({@link CrossValidation}).
+ * Run <a href="https://en.wikipedia.org/wiki/Decision_tree">decision tree</a> classification with
+ * <a href="https://en.wikipedia.org/wiki/Cross-validation_(statistics)">cross validation</a> ({@link CrossValidation}).
* <p>
* Code in this example launches Ignite grid and fills the cache with pseudo random training data points.</p>
* <p>
- * After that it creates classification trainer and computes cross-validated metrics based on the training set.</p>
+ * After that it creates classification trainer ({@link DecisionTreeClassificationTrainer}) and computes cross-validated
+ * metrics based on the training set.</p>
*/
public class CrossValidationExample {
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/145a2898/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 4ea471c..aa13943 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
@@ -32,18 +32,24 @@ import org.apache.ignite.ml.composition.ModelsComposition;
import org.apache.ignite.ml.dataset.feature.FeatureMeta;
import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
import org.apache.ignite.ml.tree.randomforest.RandomForestClassifierTrainer;
-import org.apache.ignite.ml.tree.randomforest.RandomForestTrainer;
import org.apache.ignite.ml.tree.randomforest.data.FeaturesCountSelectionStrategies;
import org.apache.ignite.thread.IgniteThread;
/**
- * Example represents a solution for the task of wine classification based on RandomForestTrainer implementation for
- * multi-classification. It shows an initialization of {@link RandomForestTrainer} with thread pool for multi-thread
- * learning, initialization of Ignite Cache, learning step and evaluation of accuracy of model.
- *
- * Dataset url: https://archive.ics.uci.edu/ml/machine-learning-databases/wine/
- *
- * @see RandomForestClassifierTrainer
+ * Example represents a solution for the task of wine classification based on a
+ * <a href ="https://en.wikipedia.org/wiki/Random_forest">Random Forest</a> implementation for
+ * multi-classification.
+ * <p>
+ * Code in this example launches Ignite grid and fills the cache with test data points (based on the
+ * <a href="https://archive.ics.uci.edu/ml/machine-learning-databases/wine/">Wine recognition dataset</a>).</p>
+ * <p>
+ * After that it initializes the {@link RandomForestClassifierTrainer} with thread pool for multi-thread learning
+ * and trains the model based on the specified data using random forest regression algorithm.</p>
+ * <p>
+ * Finally, this example loops over the test set of data points, compares prediction of the trained model to the
+ * expected outcome (ground truth), and evaluates accuracy of the model.</p>
+ * <p>
+ * You can change the test data used in this example and re-run it to explore this algorithm further.</p>
*/
public class RandomForestClassificationExample {
/**
@@ -57,23 +63,29 @@ public class RandomForestClassificationExample {
System.out.println(">>> Ignite grid started.");
IgniteThread igniteThread = new IgniteThread(ignite.configuration().getIgniteInstanceName(),
- RandomForestClassificationExample.class.getSimpleName(), () -> {
+ RandomForestClassificationExample.class.getSimpleName(), () -> {
IgniteCache<Integer, double[]> dataCache = new TestCache(ignite).fillCacheWith(data);
- AtomicInteger indx = new AtomicInteger(0);
+ AtomicInteger idx = new AtomicInteger(0);
RandomForestClassifierTrainer classifier = new RandomForestClassifierTrainer(
- IntStream.range(0, 13).mapToObj(x -> new FeatureMeta("", indx.getAndIncrement(), false)).collect(Collectors.toList()))
- .withCountOfTrees(101)
- .withFeaturesCountSelectionStrgy(FeaturesCountSelectionStrategies.SQRT)
- .withMaxDepth(3)
+ IntStream.range(0, data[0].length - 1).mapToObj(
+ x -> new FeatureMeta("", idx.getAndIncrement(), false)).collect(Collectors.toList())
+ ).withCountOfTrees(101)
+ .withFeaturesCountSelectionStrgy(FeaturesCountSelectionStrategies.ONE_THIRD)
+ .withMaxDepth(4)
.withMinImpurityDelta(0.)
- .withSubsampleSize(0.3);
+ .withSubsampleSize(0.3)
+ .withSeed(0);
+
+ System.out.println(">>> Configured trainer: " + classifier.getClass().getSimpleName());
ModelsComposition randomForest = classifier.fit(ignite, dataCache,
(k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 1, v.length)),
(k, v) -> v[0]
);
+ System.out.println(">>> Trained model: " + randomForest.toString(true));
+
int amountOfErrors = 0;
int totalAmount = 0;
@@ -91,8 +103,11 @@ public class RandomForestClassificationExample {
}
+ System.out.println("\n>>> Evaluated model on " + totalAmount + " data points.");
+
System.out.println("\n>>> Absolute amount of errors " + amountOfErrors);
- System.out.println("\n>>> Accuracy " + (1 - amountOfErrors / (double)totalAmount));
+ System.out.println("\n>>> Accuracy " + (1 - amountOfErrors / (double) totalAmount));
+ System.out.println(">>> Random Forest multi-class classification algorithm over cached dataset usage example completed.");
}
});
@@ -101,9 +116,7 @@ public class RandomForestClassificationExample {
}
}
- /**
- * The Wine dataset.
- */
+ /** The Wine recognition dataset. */
private static final double[][] data = {
{1, 14.23, 1.71, 2.43, 15.6, 127, 2.8, 3.06, .28, 2.29, 5.64, 1.04, 3.92, 1065},
{1, 13.2, 1.78, 2.14, 11.2, 100, 2.65, 2.76, .26, 1.28, 4.38, 1.05, 3.4, 1050},