You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/05/15 10:52:24 UTC

[2/6] ignite git commit: IGNITE-5112 Create OLS example: Created example & tests refactoring.

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/ignite-5075
Commit: 5743c3b0bec7813eb22ade8c15334be418c5ad4b
Parents: 9e3af25
Author: Yury Babak <yb...@gridgain.com>
Authored: Mon May 15 13:20:18 2017 +0300
Committer: Yury Babak <yb...@gridgain.com>
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)
+@Suite.SuiteClasses({
+    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)
+@Suite.SuiteClasses({
+    OLSMultipleLinearRegressionTest.class
+})
+public class RegressionsTestSuite {
+    // No-op.
+}