You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by av...@apache.org on 2018/07/26 19:56:01 UTC
[13/50] [abbrv] ignite git commit: IGNITE-8981: [ML] Parallel
optimizations for BaggingTrainer
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
new file mode 100644
index 0000000..7efa29c
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
@@ -0,0 +1,102 @@
+/*
+ * 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.logging;
+
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.Tracer;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * Simple logger printing to STD-out.
+ */
+public class ConsoleLogger implements MLLogger {
+ /** Maximum Verbose level. */
+ private final VerboseLevel maxVerboseLevel;
+ /** Class name. */
+ private final String className;
+
+ /**
+ * Creates an instance of ConsoleLogger.
+ *
+ * @param maxVerboseLevel Max verbose level.
+ * @param clsName Class name.
+ */
+ private ConsoleLogger(VerboseLevel maxVerboseLevel, String clsName) {
+ this.className = clsName;
+ this.maxVerboseLevel = maxVerboseLevel;
+ }
+
+ /**
+ * Returns an instance of ConsoleLogger factory.
+ *
+ * @param maxVerboseLevel Max verbose level.
+ */
+ public static Factory factory(VerboseLevel maxVerboseLevel) {
+ return new Factory(maxVerboseLevel);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Vector log(Vector vector) {
+ Tracer.showAscii(vector);
+ return vector;
+ }
+
+ /** {@inheritDoc} */
+ @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, Model<K, V> mdl) {
+ print(verboseLevel, mdl.toString(true));
+ return mdl;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void log(VerboseLevel verboseLevel, String fmtStr, Object... params) {
+ print(verboseLevel, String.format(fmtStr, params));
+ }
+
+ /**
+ * Prints log line to STD-out.
+ *
+ * @param verboseLevel Verbose level.
+ * @param line Line.
+ */
+ private void print(VerboseLevel verboseLevel, String line) {
+ if (this.maxVerboseLevel.compareTo(verboseLevel) >= 0)
+ System.out.println(String.format("%s [%s] %s", className, verboseLevel.name(), line));
+ }
+
+ /**
+ * ConsoleLogger factory.
+ */
+ private static class Factory implements MLLogger.Factory {
+ /** Max Verbose level. */
+ private final VerboseLevel maxVerboseLevel;
+
+ /**
+ * Creates an instance of ConsoleLogger factory.
+ *
+ * @param maxVerboseLevel Max verbose level.
+ */
+ private Factory(VerboseLevel maxVerboseLevel) {
+ this.maxVerboseLevel = maxVerboseLevel;
+ }
+
+ /** {@inheritDoc} */
+ @Override public <T> MLLogger create(Class<T> targetCls) {
+ return new ConsoleLogger(maxVerboseLevel, targetCls.getName());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
new file mode 100644
index 0000000..65bc4cb
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
@@ -0,0 +1,105 @@
+/*
+ * 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.logging;
+
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.Tracer;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * MLLogger implementation based on IgniteLogger.
+ */
+public class CustomMLLogger implements MLLogger {
+ /** Ignite logger instance. */
+ private final IgniteLogger logger;
+
+ /**
+ * Creates an instance of CustomMLLogger.
+ *
+ * @param logger Basic Logger.
+ */
+ private CustomMLLogger(IgniteLogger logger) {
+ this.logger = logger;
+ }
+
+ /**
+ * Returns factory for OnIgniteLogger instantiating.
+ *
+ * @param rootLogger Root logger.
+ */
+ public static Factory factory(IgniteLogger rootLogger) {
+ return new Factory(rootLogger);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Vector log(Vector vector) {
+ Tracer.showAscii(vector, logger);
+ return vector;
+ }
+
+ /** {@inheritDoc} */
+ @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, Model<K, V> mdl) {
+ log(verboseLevel, mdl.toString(true));
+ return mdl;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void log(VerboseLevel verboseLevel, String fmtStr, Object... params) {
+ log(verboseLevel, String.format(fmtStr, params));
+ }
+
+ /**
+ * Log line.
+ *
+ * @param verboseLevel Verbose level.
+ * @param line Line.
+ */
+ private void log(VerboseLevel verboseLevel, String line) {
+ switch (verboseLevel) {
+ case LOW:
+ logger.info(line);
+ break;
+ case HIGH:
+ logger.debug(line);
+ break;
+ }
+ }
+
+ /**
+ * CustomMLLogger factory.
+ */
+ private static class Factory implements MLLogger.Factory {
+ /** Root logger. */
+ private IgniteLogger rootLogger;
+
+ /**
+ * Creates an instance of factory.
+ *
+ * @param rootLogger Root logger.
+ */
+ public Factory(IgniteLogger rootLogger) {
+ this.rootLogger = rootLogger;
+ }
+
+ /** {@inheritDoc} */
+ @Override public <T> MLLogger create(Class<T> targetCls) {
+ return new CustomMLLogger(rootLogger.getLogger(targetCls));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
new file mode 100644
index 0000000..872b947
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
@@ -0,0 +1,69 @@
+/*
+ * 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.logging;
+
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * Helper for ML-specific objects logging.
+ */
+public interface MLLogger {
+ /**
+ * Logging verbose level.
+ */
+ enum VerboseLevel {
+ OFF, LOW, HIGH
+ }
+
+ /**
+ * Log vector.
+ *
+ * @param vector Vector.
+ */
+ public Vector log(Vector vector);
+
+ /**
+ * Log model according to toString method.
+ *
+ * @param verboseLevel Verbose level.
+ * @param mdl Model.
+ */
+ public <K, V> Model<K,V> log(VerboseLevel verboseLevel, Model<K, V> mdl);
+
+ /**
+ * Log line with formatting.
+ *
+ * @param verboseLevel Verbose level.
+ * @param fmtStr Format string.
+ * @param params Params.
+ */
+ public void log(VerboseLevel verboseLevel, String fmtStr, Object... params);
+
+ /**
+ * MLLogger factory interface.
+ */
+ public static interface Factory {
+ /**
+ * Creates an instance of MLLogger for target class.
+ *
+ * @param targetCls For class.
+ */
+ public <T> MLLogger create(Class<T> targetCls);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
new file mode 100644
index 0000000..67b48f5
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
@@ -0,0 +1,64 @@
+/*
+ * 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.logging;
+
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * MLLogger implementation skipping all logs.
+ */
+public class NoOpLogger implements MLLogger {
+ /** Factory. */
+ private static final Factory FACTORY = new Factory();
+
+ /**
+ * Returns NoOpLogger factory.
+ */
+ public static Factory factory() {
+ return FACTORY;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Vector log(Vector vector) {
+ return vector;
+ }
+
+ /** {@inheritDoc} */
+ @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, Model<K, V> mdl) {
+ return mdl;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void log(VerboseLevel verboseLevel, String fmtStr, Object... params) {
+
+ }
+
+ /**
+ * NoOpLogger factory.
+ */
+ private static class Factory implements MLLogger.Factory {
+ /** NoOpLogger instance. */
+ private final static NoOpLogger NO_OP_LOGGER = new NoOpLogger();
+
+ /** {@inheritDoc} */
+ @Override public <T> MLLogger create(Class<T> targetCls) {
+ return NO_OP_LOGGER;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
new file mode 100644
index 0000000..303f006
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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 contains several logging strategy realisations.
+ */
+package org.apache.ignite.ml.environment.logging;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java
new file mode 100644
index 0000000..0f58d13
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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 contains environment utils for ML algorithms.
+ */
+package org.apache.ignite.ml.environment;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
new file mode 100644
index 0000000..ce2ca50
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
@@ -0,0 +1,85 @@
+/*
+ * 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.parallelism;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.apache.ignite.ml.math.functions.IgniteSupplier;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * All task should be processed by default thread pool.
+ */
+public class DefaultParallelismStrategy implements ParallelismStrategy {
+ /** Strategy Pool. */
+ private ExecutorService pool = Executors.newWorkStealingPool(4);
+
+ /** {@inheritDoc} */
+ @Override public <T> Promise<T> submit(IgniteSupplier<T> task) {
+ return new FutureWrapper<>(pool.submit(task::get));
+ }
+
+ /**
+ * Wrapper for future class.
+ *
+ * @param <T>
+ */
+ public static class FutureWrapper<T> implements Promise<T> {
+ private final Future<T> f;
+
+ /**
+ * Create an instance of FutureWrapper.
+ *
+ * @param f Future.
+ */
+ public FutureWrapper(Future<T> f) {
+ this.f = f;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean cancel(boolean mayInterruptIfRunning) {
+ return f.cancel(mayInterruptIfRunning);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isCancelled() {
+ return f.isCancelled();
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isDone() {
+ return f.isDone();
+ }
+
+ /** {@inheritDoc} */
+ @Override public T get() throws InterruptedException, ExecutionException {
+ return f.get();
+ }
+
+ /** {@inheritDoc} */
+ @Override public T get(long timeout,
+ @NotNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
+
+ return f.get(timeout, unit);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
new file mode 100644
index 0000000..5f605a7
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
@@ -0,0 +1,87 @@
+/*
+ * 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.parallelism;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.apache.ignite.ml.math.functions.IgniteSupplier;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * All tasks should be processed in one thread.
+ */
+public class NoParallelismStrategy implements ParallelismStrategy {
+ /** Instance. */
+ public static final ParallelismStrategy INSTANCE = new NoParallelismStrategy();
+
+ /** */
+ private NoParallelismStrategy() {
+
+ }
+
+ /** {@inheritDoc} */
+ @Override public <T> Promise<T> submit(IgniteSupplier<T> task) {
+ return new Stub<>(task.get());
+ }
+
+ /**
+ * Stub for Future interface implementation.
+ *
+ * @param <T> Type of result.
+ */
+ public static class Stub<T> implements Promise<T> {
+ private T result;
+
+ /**
+ * Create an instance of Stub
+ *
+ * @param result Execution result.
+ */
+ public Stub(T result) {
+ this.result = result;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean cancel(boolean mayInterruptIfRunning) {
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isCancelled() {
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isDone() {
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ @Override public T get() throws InterruptedException, ExecutionException {
+ return result;
+ }
+
+ /** {@inheritDoc} */
+ @Override public T get(long timeout,
+ @NotNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
+
+ return result;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
new file mode 100644
index 0000000..cdf2d50
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
@@ -0,0 +1,47 @@
+/*
+ * 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.parallelism;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.ignite.ml.math.functions.IgniteSupplier;
+
+/**
+ * Specifies the behaviour of processes in ML-algorithms that can may be parallelized such as parallel learning in
+ * bagging, learning submodels for One-vs-All model, Cross-Validation etc.
+ */
+public interface ParallelismStrategy {
+ public enum Type {
+ NO_PARALLELISM,
+ ON_DEFAULT_POOL
+ }
+
+ /**
+ * Submit task.
+ *
+ * @param task Task.
+ */
+ public <T> Promise<T> submit(IgniteSupplier<T> task);
+
+ public default <T> List<Promise<T>> submit(List<IgniteSupplier<T>> tasks) {
+ List<Promise<T>> results = new ArrayList<>();
+ for(IgniteSupplier<T> task : tasks)
+ results.add(submit(task));
+ return results;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
new file mode 100644
index 0000000..dec3f43
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
@@ -0,0 +1,53 @@
+/*
+ * 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.parallelism;
+
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * Future interface extension for lambda-friendly interface.
+ *
+ * @param <T> Type of result.
+ */
+public interface Promise<T> extends Future<T> {
+ /**
+ * Await result of Future and return it.
+ * Wrap exceptions from Future to RuntimeException.
+ */
+ public default T unsafeGet() {
+ try {
+ return get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Wrap result of Future to Optional-object.
+ * If Future throws an exception then it returns Optional.empty.
+ */
+ public default Optional<T> getOpt() {
+ try {
+ return Optional.of(get());
+ } catch (InterruptedException | ExecutionException e) {
+ return Optional.empty();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
new file mode 100644
index 0000000..22fe9af
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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 contains realisations of parallelism strategies for multi-thread algorithms.
+ */
+package org.apache.ignite.ml.environment.parallelism;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
index d262efe..2f213b5 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
@@ -19,18 +19,16 @@ package org.apache.ignite.ml.genetic;
import java.util.Arrays;
import java.util.Random;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.compute.ComputeJobAdapter;
+import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
/**
* Responsible for performing 'crossover' genetic operation for 2 X 'parent' chromosomes.
*
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
index 02d90be..9daa57a 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
@@ -21,7 +21,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteException;
import org.apache.ignite.cache.affinity.Affinity;
@@ -30,10 +29,9 @@ import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.compute.ComputeJobResultPolicy;
import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.resources.IgniteInstanceResource;
-
import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
/**
* Responsible for assigning 2 X 'parent' chromosomes to produce 2 X 'child' chromosomes.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
index c11490a..0bde403 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
@@ -19,18 +19,16 @@ package org.apache.ignite.ml.genetic;
import java.util.ArrayList;
import java.util.List;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.compute.ComputeJobAdapter;
+import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
/**
* Responsible for performing fitness evaluation on an individual chromosome
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
index cfae767..66fd795 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
@@ -20,7 +20,6 @@ package org.apache.ignite.ml.genetic;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteException;
import org.apache.ignite.cache.affinity.Affinity;
@@ -29,10 +28,9 @@ import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.compute.ComputeJobResultPolicy;
import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.resources.IgniteInstanceResource;
-
import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
/**
* Responsible for fitness operation
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
index 4133adf..92eab5e 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
@@ -20,16 +20,13 @@ package org.apache.ignite.ml.genetic;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
-
import javax.cache.Cache.Entry;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.cache.query.SqlQuery;
-
import org.apache.ignite.ml.genetic.cache.GeneCacheConfig;
import org.apache.ignite.ml.genetic.cache.PopulationCacheConfig;
import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
index f15d988..af1af3c 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
@@ -18,7 +18,6 @@
package org.apache.ignite.ml.genetic;
import java.util.concurrent.atomic.AtomicLong;
-
import org.apache.ignite.cache.query.annotations.QuerySqlField;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
index 704cf00..9fd9147 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
@@ -22,9 +22,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
-
import javax.cache.Cache.Entry;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
@@ -36,10 +34,9 @@ import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.compute.ComputeJobResultPolicy;
import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.resources.IgniteInstanceResource;
-
import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
/**
* Responsible for applying mutation on respective chromosomes. <br/>
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
index e657ca0..19f22c6 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
@@ -22,11 +22,10 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.compute.ComputeJobAdapter;
+import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
/**
* Responsible for performing truncate selection
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
index 09f17cb..00d00c1 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
@@ -21,9 +21,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import javax.cache.Cache.Entry;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
@@ -35,8 +33,8 @@ import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.compute.ComputeJobResultPolicy;
import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
/**
* Responsible for performing truncate selection.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
index 9911eea..2dddf4b 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
@@ -20,15 +20,13 @@ package org.apache.ignite.ml.genetic.functions;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.annotations.QuerySqlFunction;
-import org.h2.tools.SimpleResultSet;
-
import org.apache.ignite.ml.genetic.Chromosome;
import org.apache.ignite.ml.genetic.Gene;
import org.apache.ignite.ml.genetic.utils.GAGridUtils;
+import org.h2.tools.SimpleResultSet;
/**
* Responsible for providing custom SQL functions to retrieve optimization results.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
index ccacda6..619f56d 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
@@ -19,7 +19,6 @@ package org.apache.ignite.ml.genetic.parameter;
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/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
index 76c292d..45056e1 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
@@ -19,14 +19,11 @@ package org.apache.ignite.ml.genetic.utils;
import java.util.ArrayList;
import java.util.List;
-
import javax.cache.Cache.Entry;
-
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlQuery;
-
import org.apache.ignite.ml.genetic.Chromosome;
import org.apache.ignite.ml.genetic.Gene;
import org.apache.ignite.ml.genetic.cache.PopulationCacheConfig;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java b/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
index 6c27ab7..b5a0cdb 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
@@ -21,8 +21,8 @@ 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.functions.IgniteBiFunction;
+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/knn/classification/KNNClassificationModel.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
index 22b6832..c2c1c43 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
@@ -33,11 +33,12 @@ import org.apache.ignite.ml.Exporter;
import org.apache.ignite.ml.Model;
import org.apache.ignite.ml.dataset.Dataset;
import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.distances.DistanceMeasure;
import org.apache.ignite.ml.math.distances.EuclideanDistance;
+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.util.ModelTrace;
import org.jetbrains.annotations.NotNull;
/**
@@ -270,4 +271,18 @@ public class KNNClassificationModel implements Model<Vector, Double>, Exportable
return k == that.k && distanceMeasure.equals(that.distanceMeasure) && stgy.equals(that.stgy);
}
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return toString(false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString(boolean pretty) {
+ return ModelTrace.builder("KNNClassificationModel", pretty)
+ .addField("k", String.valueOf(k))
+ .addField("measure", distanceMeasure.getClass().getSimpleName())
+ .addField("strategy", stgy.name())
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
index 99b70ab..e0a81f9 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ml.knn.classification;
import org.apache.ignite.ml.dataset.DatasetBuilder;
import org.apache.ignite.ml.knn.KNNUtils;
-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.trainers.SingleLabelDatasetTrainer;
/**
* kNN algorithm trainer to solve multi-class classification task.
*/
-public class KNNClassificationTrainer implements SingleLabelDatasetTrainer<KNNClassificationModel> {
+public class KNNClassificationTrainer extends SingleLabelDatasetTrainer<KNNClassificationModel> {
/**
* Trains model based on the specified data.
*
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
index 5db2a30..16dcd8a 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
@@ -20,10 +20,11 @@ import java.util.List;
import org.apache.ignite.ml.dataset.Dataset;
import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
import org.apache.ignite.ml.knn.classification.KNNClassificationModel;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
+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.util.ModelTrace;
/**
* This class provides kNN Multiple Linear Regression or Locally [weighted] regression (Simple and Weighted versions).
@@ -86,4 +87,18 @@ public class KNNRegressionModel extends KNNClassificationModel {
sum += neighbor.label();
return sum / (double)k;
}
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return toString(false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString(boolean pretty) {
+ return ModelTrace.builder("KNNClassificationModel", pretty)
+ .addField("k", String.valueOf(k))
+ .addField("measure", distanceMeasure.getClass().getSimpleName())
+ .addField("strategy", stgy.name())
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
index 5f1b349..395ce61 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ml.knn.regression;
import org.apache.ignite.ml.dataset.DatasetBuilder;
import org.apache.ignite.ml.knn.KNNUtils;
-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.trainers.SingleLabelDatasetTrainer;
/**
* kNN algorithm trainer to solve regression task.
*/
-public class KNNRegressionTrainer implements SingleLabelDatasetTrainer<KNNRegressionModel> {
+public class KNNRegressionTrainer extends SingleLabelDatasetTrainer<KNNRegressionModel> {
/**
* Trains model based on the specified data.
*
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
index 18aea1a..a22ec06 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
@@ -26,9 +26,9 @@ import org.apache.ignite.ml.math.exceptions.NonSquareMatrixException;
import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
import org.apache.ignite.ml.math.primitives.vector.impl.SparseVector;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.util.MatrixUtil;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
index eacf0b8..d01b150 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
@@ -117,7 +117,22 @@ public class Tracer {
public static void showAscii(Vector vec, String fmt) {
String cls = vec.getClass().getSimpleName();
- System.out.println(String.format(LOCALE, "%s(%d) [%s]", cls, vec.size(), mkString(vec, fmt)));
+ System.out.println(asAscii(vec, fmt, true));
+ }
+
+ /**
+ * @param vec Vector to show as plain text.
+ * @param fmt Format string for vector elements.
+ * @param showMeta Show vector type and size.
+ */
+ public static String asAscii(Vector vec, String fmt, boolean showMeta) {
+ String cls = vec.getClass().getSimpleName();
+ String vectorStr = mkString(vec, fmt);
+
+ if(showMeta)
+ return String.format(LOCALE, "%s(%d) [%s]", cls, vec.size(), vectorStr);
+ else
+ return String.format(LOCALE, "[%s]", vectorStr);
}
/**
@@ -159,15 +174,26 @@ public class Tracer {
* @param fmt Format string for matrix rows.
*/
public static void showAscii(Matrix mtx, String fmt) {
+ System.out.println(asAscii(mtx, fmt));
+ }
+
+
+ /**
+ * @param mtx {@link Matrix} object to show as a plain text.
+ * @param fmt Format string for matrix rows.
+ */
+ public static String asAscii(Matrix mtx, String fmt) {
+ StringBuilder builder = new StringBuilder();
String cls = mtx.getClass().getSimpleName();
int rows = mtx.rowSize();
int cols = mtx.columnSize();
- System.out.println(String.format(LOCALE, "%s(%dx%d)", cls, rows, cols));
+ builder.append(String.format(LOCALE, "%s(%dx%d)\n", cls, rows, cols));
for (int row = 0; row < rows; row++)
- System.out.println(rowStr(mtx, row, fmt));
+ builder.append(rowStr(mtx, row, fmt)).append(row != rows - 1 ? "\n" : "");
+ return builder.toString();
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
index 50324c1..88e9a41 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
@@ -17,8 +17,8 @@
package org.apache.ignite.ml.math.distances;
import java.io.Externalizable;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
/**
* This class is based on the corresponding class from Apache Common Math lib.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
index 935e19b..fa5c21c 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
@@ -19,8 +19,8 @@ package org.apache.ignite.ml.math.distances;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.util.MatrixUtil;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
index f08ff7b..ef50a69 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
@@ -19,10 +19,10 @@ package org.apache.ignite.ml.math.distances;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
import org.apache.ignite.ml.math.functions.Functions;
import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.util.MatrixUtil;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
index d298e3c..bd3df14 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
@@ -19,8 +19,8 @@ package org.apache.ignite.ml.math.distances;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.util.MatrixUtil;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
index bed32de..161b336 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
@@ -28,7 +28,6 @@ import java.util.Spliterator;
import java.util.function.Consumer;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.ml.math.Blas;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
import org.apache.ignite.ml.math.exceptions.ColumnIndexException;
import org.apache.ignite.ml.math.exceptions.RowIndexException;
@@ -38,6 +37,7 @@ import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
import org.apache.ignite.ml.math.functions.IgniteTriFunction;
import org.apache.ignite.ml.math.functions.IntIntToDoubleFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
import org.apache.ignite.ml.math.primitives.vector.impl.VectorizedViewMatrix;
import org.apache.ignite.ml.math.util.MatrixUtil;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
index e4792ee..6dce522 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
@@ -17,13 +17,13 @@
package org.apache.ignite.ml.math.primitives.matrix.impl;
+import org.apache.ignite.ml.math.StorageConstants;
+import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.OrderedMatrix;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
import org.apache.ignite.ml.math.primitives.matrix.storage.DenseMatrixStorage;
import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
+import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
/**
* Basic implementation for matrix.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
index 119bb8d..0c4f500 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
@@ -20,13 +20,13 @@ package org.apache.ignite.ml.math.primitives.matrix.impl;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import it.unimi.dsi.fastutil.ints.IntIterator;
import it.unimi.dsi.fastutil.ints.IntSet;
+import org.apache.ignite.ml.math.StorageConstants;
+import org.apache.ignite.ml.math.functions.IgniteTriFunction;
+import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
-import org.apache.ignite.ml.math.StorageConstants;
import org.apache.ignite.ml.math.primitives.matrix.storage.SparseMatrixStorage;
import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.math.functions.IgniteTriFunction;
-import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
import org.apache.ignite.ml.math.primitives.vector.impl.SparseVector;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
index df769c7..592064c 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
@@ -18,12 +18,12 @@
package org.apache.ignite.ml.math.primitives.matrix.impl;
import java.io.Externalizable;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
import org.apache.ignite.ml.math.primitives.matrix.storage.ViewMatrixStorage;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
/**
* Implements the rectangular view into the parent {@link Matrix}.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
index dcdaf4f..d21d8c6 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
@@ -22,9 +22,9 @@ import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Arrays;
import org.apache.ignite.ml.math.Blas;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
import org.apache.ignite.ml.math.StorageConstants;
import org.apache.ignite.ml.math.functions.IgniteIntIntToIntBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
import org.apache.ignite.ml.math.util.MatrixUtil;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
index fb2f3d9..4a1355c 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
@@ -26,9 +26,9 @@ import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.HashMap;
import java.util.Map;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
import org.apache.ignite.ml.math.StorageConstants;
import org.apache.ignite.ml.math.functions.IgniteTriFunction;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
/**
* Storage for sparse, local, on-heap matrix.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
index 01b630e..343ebf1 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
@@ -29,7 +29,6 @@ import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.function.IntToDoubleFunction;
import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
import org.apache.ignite.ml.math.exceptions.IndexException;
import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
@@ -37,6 +36,7 @@ import org.apache.ignite.ml.math.functions.Functions;
import org.apache.ignite.ml.math.functions.IgniteBiFunction;
import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix;
import org.apache.ignite.ml.math.primitives.vector.impl.VectorView;
import org.jetbrains.annotations.NotNull;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
index 41ce988..f544405 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
@@ -22,7 +22,6 @@ import java.util.Spliterator;
import java.util.function.IntToDoubleFunction;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.ml.math.Destroyable;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.MetaAttributes;
import org.apache.ignite.ml.math.StorageOpsMetrics;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
@@ -31,6 +30,7 @@ import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
import org.apache.ignite.ml.math.functions.IgniteBiFunction;
import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
/**
* A vector interface.
@@ -513,6 +513,7 @@ public interface Vector extends MetaAttributes, Externalizable, StorageOpsMetric
/**
* Returns array of doubles corresponds to vector components.
+ *
* @return Array of doubles.
*/
public default double[] asArray() {
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
index b31f6fb..3a44373 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
@@ -25,12 +25,12 @@ import java.util.Map;
import java.util.Spliterator;
import java.util.function.IntToDoubleFunction;
import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
import org.apache.ignite.ml.math.functions.IgniteBiFunction;
import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
/**
* Convenient class that can be used to add decorations to an existing vector. Subclasses
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
index 48b9212..bed39e3 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
@@ -18,13 +18,13 @@
package org.apache.ignite.ml.math.primitives.vector.impl;
import java.util.Map;
+import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.storage.DenseVectorStorage;
import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
+import org.apache.ignite.ml.math.primitives.vector.storage.DenseVectorStorage;
/**
* Basic implementation for vector.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
index 8b3a274..673ad79 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
@@ -22,11 +22,11 @@ import java.util.Map;
import java.util.Set;
import java.util.Spliterator;
import java.util.function.Consumer;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.StorageConstants;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.storage.SparseVectorStorage;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
index 5342a22..c5d689e 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
@@ -18,11 +18,11 @@
package org.apache.ignite.ml.math.primitives.vector.impl;
import java.io.Externalizable;
+import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
import org.apache.ignite.ml.math.primitives.vector.storage.VectorViewStorage;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
index 26f7b03..5990567 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
@@ -20,10 +20,10 @@ package org.apache.ignite.ml.math.primitives.vector.impl;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.IndexException;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.storage.VectorizedViewMatrixStorage;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
index 919301f..970e30b 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
@@ -20,9 +20,9 @@ package org.apache.ignite.ml.math.primitives.vector.storage;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.apache.ignite.ml.math.exceptions.IndexException;
import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
-import org.apache.ignite.ml.math.exceptions.IndexException;
/**
* Row, column or diagonal vector-based view of the matrix
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
index 0fd3cc6..e4554e9 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ml.math.util;
import java.util.List;
import org.apache.ignite.internal.util.GridArgumentCheck;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.StorageConstants;
-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.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
-import org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix;
+import org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
index 6588059..6727ba9 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
@@ -27,12 +27,12 @@ import org.apache.ignite.ml.dataset.primitive.builder.context.EmptyContextBuilde
import org.apache.ignite.ml.dataset.primitive.builder.data.SimpleLabeledDatasetDataBuilder;
import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
import org.apache.ignite.ml.dataset.primitive.data.SimpleLabeledDatasetData;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.functions.IgniteBiFunction;
import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.nn.architecture.MLPArchitecture;
import org.apache.ignite.ml.nn.initializers.RandomInitializer;
import org.apache.ignite.ml.optimization.updatecalculators.ParameterUpdateCalculator;
@@ -44,7 +44,7 @@ import org.apache.ignite.ml.util.Utils;
*
* @param <P> Type of model update used in this trainer.
*/
-public class MLPTrainer<P extends Serializable> implements MultiLabelDatasetTrainer<MultilayerPerceptron> {
+public class MLPTrainer<P extends Serializable> extends MultiLabelDatasetTrainer<MultilayerPerceptron> {
/** Multilayer perceptron architecture supplier that defines layers and activators. */
private final IgniteFunction<Dataset<EmptyContext, SimpleLabeledDatasetData>, MLPArchitecture> archSupplier;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
index a2c2c6e..639bb44 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
@@ -24,12 +24,13 @@ import java.util.List;
import java.util.Random;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.ml.Model;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.math.Tracer;
import org.apache.ignite.ml.math.functions.IgniteDifferentiableDoubleToDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
import org.apache.ignite.ml.nn.architecture.MLPArchitecture;
import org.apache.ignite.ml.nn.architecture.TransformationLayerArchitecture;
@@ -560,4 +561,28 @@ public class MultilayerPerceptron implements Model<Matrix, Matrix>, SmoothParame
return diff;
}
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return toString(false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString(boolean pretty) {
+ StringBuilder builder = new StringBuilder("MultilayerPerceptron [\n");
+ if(below != null)
+ builder.append("below = \n").append(below.toString(pretty)).append("\n\n");
+ builder.append("layers = [").append(pretty ? "\n" : "");
+ for(int i = 0; i < layers.size(); i++) {
+ MLPLayer layer = layers.get(i);
+ builder.append("\tlayer").append(i).append(" = [\n");
+ if(layer.biases != null)
+ builder.append("\t\tbias = ").append(Tracer.asAscii(layer.biases, "%.4f", false)).append("\n");
+ String matrix = Tracer.asAscii(layer.weights, "%.4f").replaceAll("\n", "\n\t\t\t");
+ builder.append("\t\tweights = [\n\t\t\t").append(matrix).append("\n\t\t]");
+ builder.append("\n\t]\n");
+ }
+ builder.append("]");
+ return builder.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
index 533bc74..2aa0437 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
@@ -23,9 +23,6 @@ import java.io.ObjectOutput;
import java.util.Map;
import java.util.Spliterator;
import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.exceptions.CardinalityException;
import org.apache.ignite.ml.math.functions.IgniteBiConsumer;
import org.apache.ignite.ml.math.functions.IgniteBiFunction;
@@ -33,7 +30,10 @@ import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
import org.apache.ignite.ml.math.functions.IgniteTriFunction;
import org.apache.ignite.ml.math.functions.IntIntToDoubleFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
/**
* Convenient way to create matrix of replicated columns or rows from vector.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
index d328d63..741337e 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
@@ -17,9 +17,9 @@
package org.apache.ignite.ml.optimization;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
/**
* Class containing popular loss functions.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
index 0611215..5eb8722 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
@@ -18,10 +18,10 @@
package org.apache.ignite.ml.optimization;
import org.apache.ignite.ml.Model;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
/**
* Interface for models which are smooth functions of their parameters.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
index 0868d69..eb5c310 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
@@ -17,10 +17,10 @@
package org.apache.ignite.ml.optimization.updatecalculators;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.optimization.SmoothParametrized;
/**