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.
+}