Repository: ignite Updated Branches: refs/heads/master 9e3af25e1 -> 5743c3b0b
IGNITE-5112 Create OLS example: Created example & tests refactoring. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5743c3b0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5743c3b0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5743c3b0 Branch: refs/heads/master Commit: 5743c3b0bec7813eb22ade8c15334be418c5ad4b Parents: 9e3af25 Author: Yury Babak <[email protected]> Authored: Mon May 15 13:20:18 2017 +0300 Committer: Yury Babak <[email protected]> Committed: Mon May 15 13:20:18 2017 +0300 ---------------------------------------------------------------------- .../DistributedRegressionExample.java | 149 +++++++++++++++++++ .../apache/ignite/ml/math/util/MatrixUtil.java | 3 +- .../org/apache/ignite/ml/IgniteMLTestSuite.java | 35 +++++ .../ml/math/MathImplDistributedTestSuite.java | 2 +- .../ignite/ml/math/MathImplLocalTestSuite.java | 7 +- .../ignite/ml/math/MathImplMainTestSuite.java | 2 +- .../OLSMultipleLinearRegressionTest.java | 7 + .../ml/regressions/RegressionsTestSuite.java | 32 ++++ 8 files changed, 229 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/examples/src/main/ml/org/apache/ignite/examples/ml/math/regression/DistributedRegressionExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/ml/org/apache/ignite/examples/ml/math/regression/DistributedRegressionExample.java b/examples/src/main/ml/org/apache/ignite/examples/ml/math/regression/DistributedRegressionExample.java new file mode 100644 index 0000000..8e68522 --- /dev/null +++ b/examples/src/main/ml/org/apache/ignite/examples/ml/math/regression/DistributedRegressionExample.java @@ -0,0 +1,149 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.examples.ml.math.regression; + +import java.util.Arrays; +import org.apache.ignite.Ignite; +import org.apache.ignite.Ignition; +import org.apache.ignite.examples.ml.math.matrix.SparseDistributedMatrixExample; +import org.apache.ignite.ml.math.StorageConstants; +import org.apache.ignite.ml.math.Tracer; +import org.apache.ignite.ml.math.impls.matrix.SparseDistributedMatrix; +import org.apache.ignite.ml.regressions.OLSMultipleLinearRegression; +import org.apache.ignite.thread.IgniteThread; + +/** + * Run linear regression over distributed matrix. + * + * TODO: Currently works only in local mode. + * + * @see OLSMultipleLinearRegression + */ +public class DistributedRegressionExample { + /** Run example. */ + public static void main(String[] args) throws InterruptedException { + System.out.println(); + System.out.println(">>> Linear regression over sparse distributed matrix API usage example started."); + // Start ignite grid. + try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { + System.out.println(">>> Ignite grid started."); + // Create IgniteThread, we must work with SparseDistributedMatrix inside IgniteThread + // because we create ignite cache internally. + IgniteThread igniteThread = new IgniteThread(ignite.configuration().getIgniteInstanceName(), SparseDistributedMatrixExample.class.getSimpleName(), () -> { + + double[] data = { + 8, 78, 284, 9.100000381, 109, + 9.300000191, 68, 433, 8.699999809, 144, + 7.5, 70, 739, 7.199999809, 113, + 8.899999619, 96, 1792, 8.899999619, 97, + 10.19999981, 74, 477, 8.300000191, 206, + 8.300000191, 111, 362, 10.89999962, 124, + 8.800000191, 77, 671, 10, 152, + 8.800000191, 168, 636, 9.100000381, 162, + 10.69999981, 82, 329, 8.699999809, 150, + 11.69999981, 89, 634, 7.599999905, 134, + 8.5, 149, 631, 10.80000019, 292, + 8.300000191, 60, 257, 9.5, 108, + 8.199999809, 96, 284, 8.800000191, 111, + 7.900000095, 83, 603, 9.5, 182, + 10.30000019, 130, 686, 8.699999809, 129, + 7.400000095, 145, 345, 11.19999981, 158, + 9.600000381, 112, 1357, 9.699999809, 186, + 9.300000191, 131, 544, 9.600000381, 177, + 10.60000038, 80, 205, 9.100000381, 127, + 9.699999809, 130, 1264, 9.199999809, 179, + 11.60000038, 140, 688, 8.300000191, 80, + 8.100000381, 154, 354, 8.399999619, 103, + 9.800000191, 118, 1632, 9.399999619, 101, + 7.400000095, 94, 348, 9.800000191, 117, + 9.399999619, 119, 370, 10.39999962, 88, + 11.19999981, 153, 648, 9.899999619, 78, + 9.100000381, 116, 366, 9.199999809, 102, + 10.5, 97, 540, 10.30000019, 95, + 11.89999962, 176, 680, 8.899999619, 80, + 8.399999619, 75, 345, 9.600000381, 92, + 5, 134, 525, 10.30000019, 126, + 9.800000191, 161, 870, 10.39999962, 108, + 9.800000191, 111, 669, 9.699999809, 77, + 10.80000019, 114, 452, 9.600000381, 60, + 10.10000038, 142, 430, 10.69999981, 71, + 10.89999962, 238, 822, 10.30000019, 86, + 9.199999809, 78, 190, 10.69999981, 93, + 8.300000191, 196, 867, 9.600000381, 106, + 7.300000191, 125, 969, 10.5, 162, + 9.399999619, 82, 499, 7.699999809, 95, + 9.399999619, 125, 925, 10.19999981, 91, + 9.800000191, 129, 353, 9.899999619, 52, + 3.599999905, 84, 288, 8.399999619, 110, + 8.399999619, 183, 718, 10.39999962, 69, + 10.80000019, 119, 540, 9.199999809, 57, + 10.10000038, 180, 668, 13, 106, + 9, 82, 347, 8.800000191, 40, + 10, 71, 345, 9.199999809, 50, + 11.30000019, 118, 463, 7.800000191, 35, + 11.30000019, 121, 728, 8.199999809, 86, + 12.80000019, 68, 383, 7.400000095, 57, + 10, 112, 316, 10.39999962, 57, + 6.699999809, 109, 388, 8.899999619, 94 + }; + + final int nobs = 53; + final int nvars = 4; + + System.out.println(">>> Create new SparseDistributedMatrix inside IgniteThread."); + // Create SparseDistributedMatrix, new cache will be created automagically. + SparseDistributedMatrix distributedMatrix = new SparseDistributedMatrix(0, 0, + StorageConstants.ROW_STORAGE_MODE, StorageConstants.RANDOM_ACCESS_MODE); + + System.out.println(">>> Create new linear regression object"); + OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression(); + regression.newSampleData(data, nobs, nvars, distributedMatrix); + System.out.println(); + + System.out.println(">>> Estimates the regression parameters b:"); + System.out.println(Arrays.toString(regression.estimateRegressionParameters())); + + System.out.println(">>> Estimates the residuals, ie u = y - X*b:"); + System.out.println(Arrays.toString(regression.estimateResiduals())); + + System.out.println(">>> Standard errors of the regression parameters:"); + System.out.println(Arrays.toString(regression.estimateRegressionParametersStandardErrors())); + + System.out.println(">>> Estimates the variance of the regression parameters, ie Var(b):"); + Tracer.showAscii(regression.estimateRegressionParametersVariance()); + + System.out.println(">>> Estimates the standard error of the regression:"); + System.out.println(regression.estimateRegressionStandardError()); + + System.out.println(">>> R-Squared statistic:"); + System.out.println(regression.calculateRSquared()); + + System.out.println(">>> Adjusted R-squared statistic:"); + System.out.println(regression.calculateAdjustedRSquared()); + + System.out.println(">>> Returns the variance of the regressand, ie Var(y):"); + System.out.println(regression.estimateErrorVariance()); + }); + + igniteThread.start(); + + igniteThread.join(); + } + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/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 9277ae4..a06b773 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 @@ -24,6 +24,7 @@ import org.apache.ignite.ml.math.impls.matrix.DenseLocalOnHeapMatrix; import org.apache.ignite.ml.math.impls.matrix.MatrixView; import org.apache.ignite.ml.math.impls.matrix.PivotedMatrixView; import org.apache.ignite.ml.math.impls.matrix.RandomMatrix; +import org.apache.ignite.ml.math.impls.matrix.SparseDistributedMatrix; import org.apache.ignite.ml.math.impls.vector.DenseLocalOnHeapVector; /** @@ -116,6 +117,6 @@ public class MatrixUtil { /** */ private static boolean isCopyLikeSupport(Matrix matrix) { return matrix instanceof RandomMatrix || matrix instanceof MatrixView || matrix instanceof CacheMatrix || - matrix instanceof PivotedMatrixView; + matrix instanceof PivotedMatrixView || matrix instanceof SparseDistributedMatrix; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java new file mode 100644 index 0000000..92aa7db --- /dev/null +++ b/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.ml; + +import org.apache.ignite.ml.math.MathImplMainTestSuite; +import org.apache.ignite.ml.regressions.RegressionsTestSuite; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +/** + * Test suite for all module tests. + */ +@RunWith(Suite.class) [email protected]({ + MathImplMainTestSuite.class, + RegressionsTestSuite.class +}) +public class IgniteMLTestSuite { + // No-op. +} http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplDistributedTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplDistributedTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplDistributedTestSuite.java index 720a090..9899d3b 100644 --- a/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplDistributedTestSuite.java +++ b/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplDistributedTestSuite.java @@ -25,7 +25,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; /** - * Test suite for all distributed tests located in org.apache.ignite.math.impls.* package. + * Test suite for all distributed tests located in org.apache.ignite.ml.math.impls.* package. */ @RunWith(Suite.class) @Suite.SuiteClasses({ http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplLocalTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplLocalTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplLocalTestSuite.java index 9137bed..216fd7b 100644 --- a/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplLocalTestSuite.java +++ b/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplLocalTestSuite.java @@ -59,12 +59,11 @@ import org.apache.ignite.ml.math.impls.vector.VectorIterableTest; import org.apache.ignite.ml.math.impls.vector.VectorNormTest; import org.apache.ignite.ml.math.impls.vector.VectorToMatrixTest; import org.apache.ignite.ml.math.impls.vector.VectorViewTest; -import org.apache.ignite.ml.regressions.OLSMultipleLinearRegressionTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; /** - * Test suite for all local tests located in org.apache.ignite.math.impls.* package. + * Test suite for all local tests located in org.apache.ignite.ml.math.impls.* package. */ @RunWith(Suite.class) @Suite.SuiteClasses({ @@ -117,9 +116,7 @@ import org.junit.runners.Suite; EigenDecompositionTest.class, CholeskyDecompositionTest.class, QRDecompositionTest.class, - SingularValueDecompositionTest.class, - // Regressions. - OLSMultipleLinearRegressionTest.class + SingularValueDecompositionTest.class }) public class MathImplLocalTestSuite { // No-op. http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplMainTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplMainTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplMainTestSuite.java index 8d6d2af..4d245b4 100644 --- a/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplMainTestSuite.java +++ b/modules/ml/src/test/java/org/apache/ignite/ml/math/MathImplMainTestSuite.java @@ -21,7 +21,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; /** - * Test suite for local and distributed tests. + * Test suite for local and distributed math tests. */ @RunWith(Suite.class) @Suite.SuiteClasses({ http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/modules/ml/src/test/java/org/apache/ignite/ml/regressions/OLSMultipleLinearRegressionTest.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/regressions/OLSMultipleLinearRegressionTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/OLSMultipleLinearRegressionTest.java index 8180c55..e992163 100644 --- a/modules/ml/src/test/java/org/apache/ignite/ml/regressions/OLSMultipleLinearRegressionTest.java +++ b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/OLSMultipleLinearRegressionTest.java @@ -809,4 +809,11 @@ public class OLSMultipleLinearRegressionTest extends AbstractMultipleLinearRegre OLSMultipleLinearRegression mdl = new OLSMultipleLinearRegression(); mdl.calculateTotalSumOfSquares(); } + + /** */ + @Test(expected = MathIllegalArgumentException.class) + public void testMathIllegalArgumentException(){ + OLSMultipleLinearRegression mdl = new OLSMultipleLinearRegression(); + mdl.validateSampleData(new DenseLocalOnHeapMatrix(1, 2), new DenseLocalOnHeapVector(1)); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/5743c3b0/modules/ml/src/test/java/org/apache/ignite/ml/regressions/RegressionsTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/regressions/RegressionsTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/RegressionsTestSuite.java new file mode 100644 index 0000000..a54a4e3 --- /dev/null +++ b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/RegressionsTestSuite.java @@ -0,0 +1,32 @@ +/* + * 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.regressions; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +/** + * Test suite for all tests located in org.apache.ignite.ml.regressions.* package. + */ +@RunWith(Suite.class) [email protected]({ + OLSMultipleLinearRegressionTest.class +}) +public class RegressionsTestSuite { + // No-op. +}
