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; /**