[1/2] ignite git commit: IGNITE-8176: Integrate gradient descent linear regression with partition based dataset

2018-04-12 Thread chief
Repository: ignite
Updated Branches:
  refs/heads/ignite-2.5 dbf2d722b -> 72259b01e


http://git-wip-us.apache.org/repos/asf/ignite/blob/72259b01/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
--
diff --git 
a/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
 
b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
new file mode 100644
index 000..fa8fac4
--- /dev/null
+++ 
b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
@@ -0,0 +1,94 @@
+/*
+ * 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.linear;
+
+import 
org.apache.ignite.ml.optimization.updatecalculators.RPropParameterUpdate;
+import 
org.apache.ignite.ml.optimization.updatecalculators.RPropUpdateCalculator;
+import org.apache.ignite.ml.trainers.group.UpdatesStrategy;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for {@link LinearRegressionSGDTrainer}.
+ */
+@RunWith(Parameterized.class)
+public class LinearRegressionSGDTrainerTest {
+/** Parameters. */
+@Parameterized.Parameters(name = "Data divided on {0} partitions")
+public static Iterable data() {
+return Arrays.asList(
+new Integer[] {1},
+new Integer[] {2},
+new Integer[] {3},
+new Integer[] {5},
+new Integer[] {7},
+new Integer[] {100}
+);
+}
+
+/** Number of partitions. */
+@Parameterized.Parameter
+public int parts;
+
+/**
+ * Tests {@code fit()} method on a simple small dataset.
+ */
+@Test
+public void testSmallDataFit() {
+Map data = new HashMap<>();
+data.put(0, new double[] {-1.0915526, 1.81983527, -0.91409478, 
0.70890712, -24.55724107});
+data.put(1, new double[] {-0.61072904, 0.37545517, 0.21705352, 
0.09516495, -26.57226867});
+data.put(2, new double[] {0.05485406, 0.88219898, -0.80584547, 
0.94668307, 61.80919728});
+data.put(3, new double[] {-0.24835094, -0.3453, -1.69984651, 
-1.45902635, -161.65525991});
+data.put(4, new double[] {0.63675392, 0.31675535, 0.38837437, 
-1.1221971, -14.46432611});
+data.put(5, new double[] {0.14194017, 2.18158997, -0.28397346, 
-0.62090588, -3.2122197});
+data.put(6, new double[] {-0.53487507, 1.4454797, 0.21570443, 
-0.54161422, -46.5469012});
+data.put(7, new double[] {-1.58812173, -0.73216803, -2.15670676, 
-1.03195988, -247.23559889});
+data.put(8, new double[] {0.20702671, 0.92864654, 0.32721202, 
-0.09047503, 31.61484949});
+data.put(9, new double[] {-0.37890345, -0.04846179, -0.84122753, 
-1.14667474, -124.92598583});
+
+LinearRegressionSGDTrainer trainer = new 
LinearRegressionSGDTrainer<>(new UpdatesStrategy<>(
+new RPropUpdateCalculator(),
+RPropParameterUpdate::sumLocal,
+RPropParameterUpdate::avg
+), 10,  10, 100, 123L);
+
+LinearRegressionModel mdl = trainer.fit(
+data,
+parts,
+(k, v) -> Arrays.copyOfRange(v, 0, v.length - 1),
+(k, v) -> v[4]
+);
+
+assertArrayEquals(
+new double[] {72.26948107, 15.95144674, 24.07403921, 66.73038781},
+mdl.getWeights().getStorage().data(),
+1e-1
+);
+
+assertEquals(2.8421709430404007e-14, mdl.getIntercept(), 1e-1);
+}
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/72259b01/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LocalLinearRegressionSGDTrainerTest.java
--
diff --git 

[1/2] ignite git commit: IGNITE-8176: Integrate gradient descent linear regression with partition based dataset

2018-04-12 Thread chief
Repository: ignite
Updated Branches:
  refs/heads/master 67023a88b -> df6356d5d


http://git-wip-us.apache.org/repos/asf/ignite/blob/df6356d5/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
--
diff --git 
a/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
 
b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
new file mode 100644
index 000..fa8fac4
--- /dev/null
+++ 
b/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LinearRegressionSGDTrainerTest.java
@@ -0,0 +1,94 @@
+/*
+ * 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.linear;
+
+import 
org.apache.ignite.ml.optimization.updatecalculators.RPropParameterUpdate;
+import 
org.apache.ignite.ml.optimization.updatecalculators.RPropUpdateCalculator;
+import org.apache.ignite.ml.trainers.group.UpdatesStrategy;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for {@link LinearRegressionSGDTrainer}.
+ */
+@RunWith(Parameterized.class)
+public class LinearRegressionSGDTrainerTest {
+/** Parameters. */
+@Parameterized.Parameters(name = "Data divided on {0} partitions")
+public static Iterable data() {
+return Arrays.asList(
+new Integer[] {1},
+new Integer[] {2},
+new Integer[] {3},
+new Integer[] {5},
+new Integer[] {7},
+new Integer[] {100}
+);
+}
+
+/** Number of partitions. */
+@Parameterized.Parameter
+public int parts;
+
+/**
+ * Tests {@code fit()} method on a simple small dataset.
+ */
+@Test
+public void testSmallDataFit() {
+Map data = new HashMap<>();
+data.put(0, new double[] {-1.0915526, 1.81983527, -0.91409478, 
0.70890712, -24.55724107});
+data.put(1, new double[] {-0.61072904, 0.37545517, 0.21705352, 
0.09516495, -26.57226867});
+data.put(2, new double[] {0.05485406, 0.88219898, -0.80584547, 
0.94668307, 61.80919728});
+data.put(3, new double[] {-0.24835094, -0.3453, -1.69984651, 
-1.45902635, -161.65525991});
+data.put(4, new double[] {0.63675392, 0.31675535, 0.38837437, 
-1.1221971, -14.46432611});
+data.put(5, new double[] {0.14194017, 2.18158997, -0.28397346, 
-0.62090588, -3.2122197});
+data.put(6, new double[] {-0.53487507, 1.4454797, 0.21570443, 
-0.54161422, -46.5469012});
+data.put(7, new double[] {-1.58812173, -0.73216803, -2.15670676, 
-1.03195988, -247.23559889});
+data.put(8, new double[] {0.20702671, 0.92864654, 0.32721202, 
-0.09047503, 31.61484949});
+data.put(9, new double[] {-0.37890345, -0.04846179, -0.84122753, 
-1.14667474, -124.92598583});
+
+LinearRegressionSGDTrainer trainer = new 
LinearRegressionSGDTrainer<>(new UpdatesStrategy<>(
+new RPropUpdateCalculator(),
+RPropParameterUpdate::sumLocal,
+RPropParameterUpdate::avg
+), 10,  10, 100, 123L);
+
+LinearRegressionModel mdl = trainer.fit(
+data,
+parts,
+(k, v) -> Arrays.copyOfRange(v, 0, v.length - 1),
+(k, v) -> v[4]
+);
+
+assertArrayEquals(
+new double[] {72.26948107, 15.95144674, 24.07403921, 66.73038781},
+mdl.getWeights().getStorage().data(),
+1e-1
+);
+
+assertEquals(2.8421709430404007e-14, mdl.getIntercept(), 1e-1);
+}
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/df6356d5/modules/ml/src/test/java/org/apache/ignite/ml/regressions/linear/LocalLinearRegressionSGDTrainerTest.java
--
diff --git