├── .gitignore
├── README.md
├── input
├── rawTestingData.csv
└── rawTrainingData.csv
├── pom.xml
└── src
├── main
└── java
│ └── com
│ └── technobium
│ └── NeuralNetworkStockPredictor.java
└── test
└── java
└── com
└── technobium
└── AppTest.java
/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 |
3 | # Mobile Tools for Java (J2ME)
4 | .mtj.tmp/
5 |
6 | # Package Files #
7 | *.jar
8 | *.war
9 | *.ear
10 |
11 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
12 | hs_err_pid*
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # neuroph-neural-network
2 | Neuroph neural network demo. Code explained here:
3 | http://technobium.com/stock-market-prediction-using-neuroph-neural-networks/
4 |
--------------------------------------------------------------------------------
/input/rawTestingData.csv:
--------------------------------------------------------------------------------
1 | 1/2/2015,2058.2
2 | 1/5/2015,2020.58
3 | 1/6/2015,2002.61
4 | 1/7/2015,2025.9
5 | 1/8/2015,2062.14
6 | 1/9/2015,2044.81
7 | 1/12/2015,2028.26
8 | 1/13/2015,2023.03
9 | 1/14/2015,2011.27
10 | 1/15/2015,1992.67
11 | 1/16/2015,2019.42
12 | 1/20/2015,2022.55
13 | 1/21/2015,2032.12
14 | 1/22/2015,2063.15
15 | 1/23/2015,2051.82
16 | 1/26/2015,2057.09
17 | 1/27/2015,2029.55
18 | 1/28/2015,2002.16
19 | 1/29/2015,2021.25
20 | 1/30/2015,1994.99
21 | 2/2/2015,2020.85
22 | 2/3/2015,2050.03
23 | 2/4/2015,2041.51
24 | 2/5/2015,2062.52
25 | 2/6/2015,2055.47
26 | 2/9/2015,2046.74
27 | 2/10/2015,2068.59
28 | 2/11/2015,2068.53
29 | 2/12/2015,2088.48
30 | 2/13/2015,2096.99
31 | 2/17/2015,2100.34
32 | 2/18/2015,2099.68
33 | 2/19/2015,2097.45
34 | 2/20/2015,2110.3
35 | 2/23/2015,2109.66
36 | 2/24/2015,2115.48
37 | 2/25/2015,2113.86
38 | 2/26/2015,2110.74
39 | 2/27/2015,2104.5
40 | 3/2/2015,2117.39
41 | 3/3/2015,2107.78
42 | 3/4/2015,2098.53
43 | 3/5/2015,2101.04
44 | 3/6/2015,2071.26
45 | 3/9/2015,2079.43
46 | 3/10/2015,2044.16
47 | 3/11/2015,2040.24
48 | 3/12/2015,2065.95
49 | 3/13/2015,2053.4
50 | 3/16/2015,2081.19
51 | 3/17/2015,2074.28
52 | 3/18/2015,2099.5
53 | 3/19/2015,2089.27
54 | 3/20/2015,2108.1
55 | 3/23/2015,2104.42
56 | 3/24/2015,2091.5
57 | 3/25/2015,2061.05
58 | 3/26/2015,2056.15
59 | 3/27/2015,2061.02
60 | 3/30/2015,2086.24
61 | 3/31/2015,2067.89
62 | 4/1/2015,2059.69
63 | 4/2/2015,2066.96
64 |
--------------------------------------------------------------------------------
/input/rawTrainingData.csv:
--------------------------------------------------------------------------------
1 | 4/2/2012,1419.04
2 | 4/3/2012,1413.38
3 | 4/4/2012,1398.96
4 | 4/5/2012,1398.08
5 | 4/9/2012,1382.2
6 | 4/10/2012,1358.59
7 | 4/11/2012,1368.71
8 | 4/12/2012,1387.57
9 | 4/13/2012,1370.26
10 | 4/16/2012,1369.57
11 | 4/17/2012,1390.78
12 | 4/18/2012,1385.14
13 | 4/19/2012,1376.92
14 | 4/20/2012,1378.53
15 | 4/23/2012,1366.94
16 | 4/24/2012,1371.97
17 | 4/25/2012,1390.69
18 | 4/26/2012,1399.98
19 | 4/27/2012,1403.36
20 | 4/30/2012,1397.91
21 | 5/1/2012,1405.82
22 | 5/2/2012,1402.31
23 | 5/3/2012,1391.57
24 | 5/4/2012,1369.1
25 | 5/7/2012,1369.58
26 | 5/8/2012,1363.72
27 | 5/9/2012,1354.58
28 | 5/10/2012,1357.99
29 | 5/11/2012,1353.39
30 | 5/14/2012,1338.35
31 | 5/15/2012,1330.66
32 | 5/16/2012,1324.8
33 | 5/17/2012,1304.86
34 | 5/18/2012,1295.22
35 | 5/21/2012,1315.99
36 | 5/22/2012,1316.63
37 | 5/23/2012,1318.86
38 | 5/24/2012,1320.68
39 | 5/25/2012,1317.82
40 | 5/29/2012,1332.42
41 | 5/30/2012,1313.32
42 | 5/31/2012,1310.33
43 | 6/1/2012,1278.04
44 | 6/4/2012,1278.18
45 | 6/5/2012,1285.5
46 | 6/6/2012,1315.13
47 | 6/7/2012,1314.99
48 | 6/8/2012,1325.66
49 | 6/11/2012,1308.93
50 | 6/12/2012,1324.18
51 | 6/13/2012,1314.88
52 | 6/14/2012,1329.1
53 | 6/15/2012,1342.84
54 | 6/18/2012,1344.78
55 | 6/19/2012,1357.98
56 | 6/20/2012,1355.69
57 | 6/21/2012,1325.51
58 | 6/22/2012,1335.02
59 | 6/25/2012,1313.72
60 | 6/26/2012,1319.99
61 | 6/27/2012,1331.85
62 | 6/28/2012,1329.04
63 | 6/29/2012,1362.16
64 | 7/2/2012,1365.51
65 | 7/3/2012,1374.02
66 | 7/5/2012,1367.58
67 | 7/6/2012,1354.68
68 | 7/9/2012,1352.46
69 | 7/10/2012,1341.47
70 | 7/11/2012,1341.45
71 | 7/12/2012,1334.76
72 | 7/13/2012,1356.78
73 | 7/16/2012,1353.64
74 | 7/17/2012,1363.67
75 | 7/18/2012,1372.78
76 | 7/19/2012,1376.51
77 | 7/20/2012,1362.66
78 | 7/23/2012,1350.52
79 | 7/24/2012,1338.31
80 | 7/25/2012,1337.89
81 | 7/26/2012,1360.02
82 | 7/27/2012,1385.97
83 | 7/30/2012,1385.3
84 | 7/31/2012,1379.32
85 | 8/1/2012,1375.14
86 | 8/2/2012,1365
87 | 8/3/2012,1390.99
88 | 8/6/2012,1394.23
89 | 8/7/2012,1401.35
90 | 8/8/2012,1402.22
91 | 8/9/2012,1402.8
92 | 8/10/2012,1405.87
93 | 8/13/2012,1404.11
94 | 8/14/2012,1403.93
95 | 8/15/2012,1405.53
96 | 8/16/2012,1415.51
97 | 8/17/2012,1418.16
98 | 8/20/2012,1418.13
99 | 8/21/2012,1413.17
100 | 8/22/2012,1413.49
101 | 8/23/2012,1402.08
102 | 8/24/2012,1411.13
103 | 8/27/2012,1410.44
104 | 8/28/2012,1409.3
105 | 8/29/2012,1410.49
106 | 8/30/2012,1399.48
107 | 8/31/2012,1406.58
108 | 9/4/2012,1404.94
109 | 9/5/2012,1403.44
110 | 9/6/2012,1432.12
111 | 9/7/2012,1437.92
112 | 9/10/2012,1429.08
113 | 9/11/2012,1433.56
114 | 9/12/2012,1436.56
115 | 9/13/2012,1459.99
116 | 9/14/2012,1465.77
117 | 9/17/2012,1461.19
118 | 9/18/2012,1459.32
119 | 9/19/2012,1461.05
120 | 9/20/2012,1460.26
121 | 9/21/2012,1460.15
122 | 9/24/2012,1456.89
123 | 9/25/2012,1441.59
124 | 9/26/2012,1433.32
125 | 9/27/2012,1447.15
126 | 9/28/2012,1440.67
127 | 10/1/2012,1444.49
128 | 10/2/2012,1445.75
129 | 10/3/2012,1450.99
130 | 10/4/2012,1461.4
131 | 10/5/2012,1460.93
132 | 10/8/2012,1455.88
133 | 10/9/2012,1441.48
134 | 10/10/2012,1432.56
135 | 10/11/2012,1432.84
136 | 10/12/2012,1428.59
137 | 10/15/2012,1440.13
138 | 10/16/2012,1454.92
139 | 10/17/2012,1460.91
140 | 10/18/2012,1457.34
141 | 10/19/2012,1433.19
142 | 10/22/2012,1433.82
143 | 10/23/2012,1413.11
144 | 10/24/2012,1408.75
145 | 10/25/2012,1412.97
146 | 10/26/2012,1411.94
147 | 10/31/2012,1412.16
148 | 11/1/2012,1427.59
149 | 11/2/2012,1414.2
150 | 11/5/2012,1417.26
151 | 11/6/2012,1428.39
152 | 11/7/2012,1394.53
153 | 11/8/2012,1377.51
154 | 11/9/2012,1379.85
155 | 11/12/2012,1380.03
156 | 11/13/2012,1374.53
157 | 11/14/2012,1355.49
158 | 11/15/2012,1353.33
159 | 11/16/2012,1359.88
160 | 11/19/2012,1386.89
161 | 11/20/2012,1387.81
162 | 11/21/2012,1391.03
163 | 11/23/2012,1409.15
164 | 11/26/2012,1406.29
165 | 11/27/2012,1398.94
166 | 11/28/2012,1409.93
167 | 11/29/2012,1415.95
168 | 11/30/2012,1416.18
169 | 12/3/2012,1409.46
170 | 12/4/2012,1407.05
171 | 12/5/2012,1409.28
172 | 12/6/2012,1413.94
173 | 12/7/2012,1418.07
174 | 12/10/2012,1418.55
175 | 12/11/2012,1427.84
176 | 12/12/2012,1428.48
177 | 12/13/2012,1419.45
178 | 12/14/2012,1413.58
179 | 12/17/2012,1430.36
180 | 12/18/2012,1446.79
181 | 12/19/2012,1435.81
182 | 12/20/2012,1443.69
183 | 12/21/2012,1430.15
184 | 12/24/2012,1426.66
185 | 12/26/2012,1419.83
186 | 12/27/2012,1418.1
187 | 12/28/2012,1402.43
188 | 12/31/2012,1426.19
189 | 1/2/2013,1462.42
190 | 1/3/2013,1459.37
191 | 1/4/2013,1466.47
192 | 1/7/2013,1461.89
193 | 1/8/2013,1457.15
194 | 1/9/2013,1461.02
195 | 1/10/2013,1472.12
196 | 1/11/2013,1472.05
197 | 1/14/2013,1470.68
198 | 1/15/2013,1472.34
199 | 1/16/2013,1472.63
200 | 1/17/2013,1480.94
201 | 1/18/2013,1485.98
202 | 1/22/2013,1492.56
203 | 1/23/2013,1494.81
204 | 1/24/2013,1494.82
205 | 1/25/2013,1502.96
206 | 1/28/2013,1500.18
207 | 1/29/2013,1507.84
208 | 1/30/2013,1501.96
209 | 1/31/2013,1498.11
210 | 2/1/2013,1513.17
211 | 2/4/2013,1495.71
212 | 2/5/2013,1511.29
213 | 2/6/2013,1512.12
214 | 2/7/2013,1509.39
215 | 2/8/2013,1517.93
216 | 2/11/2013,1517.01
217 | 2/12/2013,1519.43
218 | 2/13/2013,1520.33
219 | 2/14/2013,1521.38
220 | 2/15/2013,1519.79
221 | 2/19/2013,1530.94
222 | 2/20/2013,1511.95
223 | 2/21/2013,1502.42
224 | 2/22/2013,1515.6
225 | 2/25/2013,1487.85
226 | 2/26/2013,1496.94
227 | 2/27/2013,1515.99
228 | 2/28/2013,1514.68
229 | 3/1/2013,1518.2
230 | 3/4/2013,1525.2
231 | 3/5/2013,1539.79
232 | 3/6/2013,1541.46
233 | 3/7/2013,1544.26
234 | 3/8/2013,1551.18
235 | 3/11/2013,1556.22
236 | 3/12/2013,1552.48
237 | 3/13/2013,1554.52
238 | 3/14/2013,1563.23
239 | 3/15/2013,1560.7
240 | 3/18/2013,1552.1
241 | 3/19/2013,1548.34
242 | 3/20/2013,1558.71
243 | 3/21/2013,1545.8
244 | 3/22/2013,1556.89
245 | 3/25/2013,1551.69
246 | 3/26/2013,1563.77
247 | 3/27/2013,1562.85
248 | 3/28/2013,1569.19
249 | 4/1/2013,1562.17
250 | 4/2/2013,1570.25
251 | 4/3/2013,1553.69
252 | 4/4/2013,1559.98
253 | 4/5/2013,1553.28
254 | 4/8/2013,1563.07
255 | 4/9/2013,1568.61
256 | 4/10/2013,1587.73
257 | 4/11/2013,1593.37
258 | 4/12/2013,1588.85
259 | 4/15/2013,1552.36
260 | 4/16/2013,1574.57
261 | 4/17/2013,1552.01
262 | 4/18/2013,1541.61
263 | 4/19/2013,1555.25
264 | 4/22/2013,1562.5
265 | 4/23/2013,1578.78
266 | 4/24/2013,1578.79
267 | 4/25/2013,1585.16
268 | 4/26/2013,1582.24
269 | 4/29/2013,1593.61
270 | 4/30/2013,1597.57
271 | 5/1/2013,1582.7
272 | 5/2/2013,1597.59
273 | 5/3/2013,1614.42
274 | 5/6/2013,1617.5
275 | 5/7/2013,1625.96
276 | 5/8/2013,1632.69
277 | 5/9/2013,1626.67
278 | 5/10/2013,1633.7
279 | 5/13/2013,1633.77
280 | 5/14/2013,1650.34
281 | 5/15/2013,1658.78
282 | 5/16/2013,1650.47
283 | 5/17/2013,1667.47
284 | 5/20/2013,1666.29
285 | 5/21/2013,1669.16
286 | 5/22/2013,1655.35
287 | 5/23/2013,1650.51
288 | 5/24/2013,1649.6
289 | 5/28/2013,1660.06
290 | 5/29/2013,1648.36
291 | 5/30/2013,1654.41
292 | 5/31/2013,1630.74
293 | 6/3/2013,1640.42
294 | 6/4/2013,1631.38
295 | 6/5/2013,1608.9
296 | 6/6/2013,1622.56
297 | 6/7/2013,1643.38
298 | 6/10/2013,1642.81
299 | 6/11/2013,1626.13
300 | 6/12/2013,1612.52
301 | 6/13/2013,1636.36
302 | 6/14/2013,1626.73
303 | 6/17/2013,1639.04
304 | 6/18/2013,1651.81
305 | 6/19/2013,1628.93
306 | 6/20/2013,1588.19
307 | 6/21/2013,1592.43
308 | 6/24/2013,1573.09
309 | 6/25/2013,1588.03
310 | 6/26/2013,1603.26
311 | 6/27/2013,1613.2
312 | 6/28/2013,1606.28
313 | 7/1/2013,1614.96
314 | 7/2/2013,1614.08
315 | 7/3/2013,1615.41
316 | 7/5/2013,1631.89
317 | 7/8/2013,1640.46
318 | 7/9/2013,1652.32
319 | 7/10/2013,1652.62
320 | 7/11/2013,1675.02
321 | 7/12/2013,1680.19
322 | 7/15/2013,1682.5
323 | 7/16/2013,1676.26
324 | 7/17/2013,1680.91
325 | 7/18/2013,1689.37
326 | 7/19/2013,1692.09
327 | 7/22/2013,1695.53
328 | 7/23/2013,1692.39
329 | 7/24/2013,1685.94
330 | 7/25/2013,1690.25
331 | 7/26/2013,1691.65
332 | 7/29/2013,1685.33
333 | 7/30/2013,1685.96
334 | 7/31/2013,1685.73
335 | 8/1/2013,1706.87
336 | 8/2/2013,1709.67
337 | 8/5/2013,1707.14
338 | 8/6/2013,1697.37
339 | 8/7/2013,1690.91
340 | 8/8/2013,1697.48
341 | 8/9/2013,1691.42
342 | 8/12/2013,1689.47
343 | 8/13/2013,1694.16
344 | 8/14/2013,1685.39
345 | 8/15/2013,1661.32
346 | 8/16/2013,1655.83
347 | 8/19/2013,1646.06
348 | 8/20/2013,1652.35
349 | 8/21/2013,1642.8
350 | 8/22/2013,1656.96
351 | 8/23/2013,1663.5
352 | 8/26/2013,1656.78
353 | 8/27/2013,1630.48
354 | 8/28/2013,1634.96
355 | 8/29/2013,1638.17
356 | 8/30/2013,1632.97
357 | 9/3/2013,1639.77
358 | 9/4/2013,1653.08
359 | 9/5/2013,1655.08
360 | 9/6/2013,1655.17
361 | 9/9/2013,1671.71
362 | 9/10/2013,1683.99
363 | 9/11/2013,1689.13
364 | 9/12/2013,1683.42
365 | 9/13/2013,1687.99
366 | 9/16/2013,1697.6
367 | 9/17/2013,1704.76
368 | 9/18/2013,1725.52
369 | 9/19/2013,1722.34
370 | 9/20/2013,1709.91
371 | 9/23/2013,1701.84
372 | 9/24/2013,1697.42
373 | 9/25/2013,1692.77
374 | 9/26/2013,1698.67
375 | 9/27/2013,1691.75
376 | 9/30/2013,1681.55
377 | 10/1/2013,1695
378 | 10/2/2013,1693.87
379 | 10/3/2013,1678.66
380 | 10/4/2013,1690.5
381 | 10/7/2013,1676.12
382 | 10/8/2013,1655.45
383 | 10/9/2013,1656.4
384 | 10/10/2013,1692.56
385 | 10/11/2013,1703.2
386 | 10/14/2013,1710.14
387 | 10/15/2013,1698.06
388 | 10/16/2013,1721.54
389 | 10/17/2013,1733.15
390 | 10/18/2013,1744.5
391 | 10/21/2013,1744.66
392 | 10/22/2013,1754.67
393 | 10/23/2013,1746.38
394 | 10/24/2013,1752.07
395 | 10/25/2013,1759.77
396 | 10/28/2013,1762.11
397 | 10/29/2013,1771.95
398 | 10/30/2013,1763.31
399 | 10/31/2013,1756.54
400 | 11/1/2013,1761.64
401 | 11/4/2013,1767.93
402 | 11/5/2013,1762.97
403 | 11/6/2013,1770.49
404 | 11/7/2013,1747.15
405 | 11/8/2013,1770.61
406 | 11/11/2013,1771.89
407 | 11/12/2013,1767.69
408 | 11/13/2013,1782
409 | 11/14/2013,1790.62
410 | 11/15/2013,1798.18
411 | 11/18/2013,1791.53
412 | 11/19/2013,1787.87
413 | 11/20/2013,1781.37
414 | 11/21/2013,1795.85
415 | 11/22/2013,1804.76
416 | 11/25/2013,1802.48
417 | 11/26/2013,1802.75
418 | 11/27/2013,1807.23
419 | 11/29/2013,1805.81
420 | 12/2/2013,1800.9
421 | 12/3/2013,1795.15
422 | 12/4/2013,1792.81
423 | 12/5/2013,1785.03
424 | 12/6/2013,1805.09
425 | 12/9/2013,1808.37
426 | 12/10/2013,1802.62
427 | 12/11/2013,1782.22
428 | 12/12/2013,1775.5
429 | 12/13/2013,1775.32
430 | 12/16/2013,1786.54
431 | 12/17/2013,1781
432 | 12/18/2013,1810.65
433 | 12/19/2013,1809.6
434 | 12/20/2013,1818.32
435 | 12/23/2013,1827.99
436 | 12/24/2013,1833.32
437 | 12/26/2013,1842.02
438 | 12/27/2013,1841.4
439 | 12/30/2013,1841.07
440 | 12/31/2013,1848.36
441 | 1/2/2014,1831.98
442 | 1/3/2014,1831.37
443 | 1/6/2014,1826.77
444 | 1/7/2014,1837.88
445 | 1/8/2014,1837.49
446 | 1/9/2014,1838.13
447 | 1/10/2014,1842.37
448 | 1/13/2014,1819.2
449 | 1/14/2014,1838.88
450 | 1/15/2014,1848.38
451 | 1/16/2014,1845.89
452 | 1/17/2014,1838.7
453 | 1/21/2014,1843.8
454 | 1/22/2014,1844.86
455 | 1/23/2014,1828.46
456 | 1/24/2014,1790.29
457 | 1/27/2014,1781.56
458 | 1/28/2014,1792.5
459 | 1/29/2014,1774.2
460 | 1/30/2014,1794.19
461 | 1/31/2014,1782.59
462 | 2/3/2014,1741.89
463 | 2/4/2014,1755.2
464 | 2/5/2014,1751.64
465 | 2/6/2014,1773.43
466 | 2/7/2014,1797.02
467 | 2/10/2014,1799.84
468 | 2/11/2014,1819.75
469 | 2/12/2014,1819.26
470 | 2/13/2014,1829.83
471 | 2/14/2014,1838.63
472 | 2/18/2014,1840.76
473 | 2/19/2014,1828.75
474 | 2/20/2014,1839.78
475 | 2/21/2014,1836.25
476 | 2/24/2014,1847.61
477 | 2/25/2014,1845.12
478 | 2/26/2014,1845.16
479 | 2/27/2014,1854.29
480 | 2/28/2014,1859.45
481 | 3/3/2014,1845.73
482 | 3/4/2014,1873.91
483 | 3/5/2014,1873.81
484 | 3/6/2014,1877.03
485 | 3/7/2014,1878.04
486 | 3/10/2014,1877.17
487 | 3/11/2014,1867.63
488 | 3/12/2014,1868.2
489 | 3/13/2014,1846.34
490 | 3/14/2014,1841.13
491 | 3/17/2014,1858.83
492 | 3/18/2014,1872.25
493 | 3/19/2014,1860.77
494 | 3/20/2014,1872.01
495 | 3/21/2014,1866.52
496 | 3/24/2014,1857.44
497 | 3/25/2014,1865.62
498 | 3/26/2014,1852.56
499 | 3/27/2014,1849.04
500 | 3/28/2014,1857.62
501 | 3/31/2014,1872.34
502 | 4/1/2014,1885.52
503 | 4/2/2014,1890.9
504 | 4/3/2014,1888.77
505 | 4/4/2014,1865.09
506 | 4/7/2014,1845.04
507 | 4/8/2014,1851.96
508 | 4/9/2014,1872.18
509 | 4/10/2014,1833.08
510 | 4/11/2014,1815.69
511 | 4/14/2014,1830.61
512 | 4/15/2014,1842.98
513 | 4/16/2014,1862.31
514 | 4/17/2014,1864.85
515 | 4/21/2014,1871.89
516 | 4/22/2014,1879.55
517 | 4/23/2014,1875.39
518 | 4/24/2014,1878.61
519 | 4/25/2014,1863.4
520 | 4/28/2014,1869.43
521 | 4/29/2014,1878.33
522 | 4/30/2014,1883.95
523 | 5/1/2014,1883.68
524 | 5/2/2014,1881.14
525 | 5/5/2014,1884.66
526 | 5/6/2014,1867.72
527 | 5/7/2014,1878.21
528 | 5/8/2014,1875.63
529 | 5/9/2014,1878.48
530 | 5/12/2014,1896.65
531 | 5/13/2014,1897.45
532 | 5/14/2014,1888.53
533 | 5/15/2014,1870.85
534 | 5/16/2014,1877.86
535 | 5/19/2014,1885.08
536 | 5/20/2014,1872.83
537 | 5/21/2014,1888.03
538 | 5/22/2014,1892.49
539 | 5/23/2014,1900.53
540 | 5/27/2014,1911.91
541 | 5/28/2014,1909.78
542 | 5/29/2014,1920.03
543 | 5/30/2014,1923.57
544 | 6/2/2014,1924.97
545 | 6/3/2014,1924.24
546 | 6/4/2014,1927.88
547 | 6/5/2014,1940.46
548 | 6/6/2014,1949.44
549 | 6/9/2014,1951.27
550 | 6/10/2014,1950.79
551 | 6/11/2014,1943.89
552 | 6/12/2014,1930.11
553 | 6/13/2014,1936.16
554 | 6/16/2014,1937.78
555 | 6/17/2014,1941.99
556 | 6/18/2014,1956.98
557 | 6/19/2014,1959.48
558 | 6/20/2014,1962.87
559 | 6/23/2014,1962.61
560 | 6/24/2014,1949.98
561 | 6/25/2014,1959.53
562 | 6/26/2014,1957.22
563 | 6/27/2014,1960.96
564 | 6/30/2014,1960.23
565 | 7/1/2014,1973.32
566 | 7/2/2014,1974.62
567 | 7/3/2014,1985.44
568 | 7/7/2014,1977.65
569 | 7/8/2014,1963.71
570 | 7/9/2014,1972.83
571 | 7/10/2014,1964.68
572 | 7/11/2014,1967.57
573 | 7/14/2014,1977.1
574 | 7/15/2014,1973.28
575 | 7/16/2014,1981.57
576 | 7/17/2014,1958.12
577 | 7/18/2014,1978.22
578 | 7/21/2014,1973.63
579 | 7/22/2014,1983.53
580 | 7/23/2014,1987.01
581 | 7/24/2014,1987.98
582 | 7/25/2014,1978.34
583 | 7/28/2014,1978.91
584 | 7/29/2014,1969.95
585 | 7/30/2014,1970.07
586 | 7/31/2014,1930.67
587 | 8/1/2014,1925.15
588 | 8/4/2014,1938.99
589 | 8/5/2014,1920.21
590 | 8/6/2014,1920.24
591 | 8/7/2014,1909.57
592 | 8/8/2014,1931.59
593 | 8/11/2014,1936.92
594 | 8/12/2014,1933.75
595 | 8/13/2014,1946.72
596 | 8/14/2014,1955.18
597 | 8/15/2014,1955.06
598 | 8/18/2014,1971.74
599 | 8/19/2014,1981.6
600 | 8/20/2014,1986.51
601 | 8/21/2014,1992.37
602 | 8/22/2014,1988.4
603 | 8/25/2014,1997.92
604 | 8/26/2014,2000.02
605 | 8/27/2014,2000.12
606 | 8/28/2014,1996.74
607 | 8/29/2014,2003.37
608 | 9/2/2014,2002.28
609 | 9/3/2014,2000.72
610 | 9/4/2014,1997.65
611 | 9/5/2014,2007.71
612 | 9/8/2014,2001.54
613 | 9/9/2014,1988.44
614 | 9/10/2014,1995.69
615 | 9/11/2014,1997.45
616 | 9/12/2014,1985.54
617 | 9/15/2014,1984.13
618 | 9/16/2014,1998.98
619 | 9/17/2014,2001.57
620 | 9/18/2014,2011.36
621 | 9/19/2014,2010.4
622 | 9/22/2014,1994.29
623 | 9/23/2014,1982.77
624 | 9/24/2014,1998.3
625 | 9/25/2014,1965.99
626 | 9/26/2014,1982.85
627 | 9/29/2014,1977.8
628 | 9/30/2014,1972.29
629 | 10/1/2014,1946.16
630 | 10/2/2014,1946.17
631 | 10/3/2014,1967.9
632 | 10/6/2014,1964.82
633 | 10/7/2014,1935.1
634 | 10/8/2014,1968.89
635 | 10/9/2014,1928.21
636 | 10/10/2014,1906.13
637 | 10/13/2014,1874.74
638 | 10/14/2014,1877.7
639 | 10/15/2014,1862.49
640 | 10/16/2014,1862.76
641 | 10/17/2014,1886.76
642 | 10/20/2014,1904.01
643 | 10/21/2014,1941.28
644 | 10/22/2014,1927.11
645 | 10/23/2014,1950.82
646 | 10/24/2014,1964.58
647 | 10/27/2014,1961.63
648 | 10/28/2014,1985.05
649 | 10/29/2014,1982.3
650 | 10/30/2014,1994.65
651 | 10/31/2014,2018.05
652 | 11/3/2014,2017.81
653 | 11/4/2014,2012.1
654 | 11/5/2014,2023.57
655 | 11/6/2014,2031.21
656 | 11/7/2014,2031.92
657 | 11/10/2014,2038.26
658 | 11/11/2014,2039.68
659 | 11/12/2014,2038.25
660 | 11/13/2014,2039.33
661 | 11/14/2014,2039.82
662 | 11/17/2014,2041.32
663 | 11/18/2014,2051.8
664 | 11/19/2014,2048.72
665 | 11/20/2014,2052.75
666 | 11/21/2014,2063.5
667 | 11/24/2014,2069.41
668 | 11/25/2014,2067.03
669 | 11/26/2014,2072.83
670 | 11/28/2014,2067.56
671 | 12/1/2014,2053.44
672 | 12/2/2014,2066.55
673 | 12/3/2014,2074.33
674 | 12/4/2014,2071.92
675 | 12/5/2014,2075.37
676 | 12/8/2014,2060.31
677 | 12/9/2014,2059.82
678 | 12/10/2014,2026.14
679 | 12/11/2014,2035.33
680 | 12/12/2014,2002.33
681 | 12/15/2014,1989.63
682 | 12/16/2014,1972.74
683 | 12/17/2014,2012.89
684 | 12/18/2014,2061.23
685 | 12/19/2014,2070.65
686 | 12/22/2014,2078.54
687 | 12/23/2014,2082.17
688 | 12/24/2014,2081.88
689 | 12/26/2014,2088.77
690 | 12/29/2014,2090.57
691 | 12/30/2014,2080.35
692 | 12/31/2014,2058.9
693 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | com.technobium
5 | neuroph-neural-network
6 | jar
7 | 1.0-SNAPSHOT
8 | neuroph-neural-network
9 | http://maven.apache.org
10 |
11 |
12 | neuroph.sourceforge.net
13 | http://neuroph.sourceforge.net/maven2/
14 |
15 |
16 |
17 |
18 | junit
19 | junit
20 | 3.8.1
21 | test
22 |
23 |
24 | org.neuroph
25 | neuroph-core
26 | 2.8
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/main/java/com/technobium/NeuralNetworkStockPredictor.java:
--------------------------------------------------------------------------------
1 | package com.technobium;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.BufferedWriter;
5 | import java.io.FileReader;
6 | import java.io.FileWriter;
7 | import java.io.IOException;
8 | import java.util.LinkedList;
9 |
10 | import org.neuroph.core.NeuralNetwork;
11 | import org.neuroph.core.data.DataSet;
12 | import org.neuroph.core.data.DataSetRow;
13 | import org.neuroph.core.events.LearningEvent;
14 | import org.neuroph.core.events.LearningEventListener;
15 | import org.neuroph.core.learning.SupervisedLearning;
16 | import org.neuroph.nnet.MultiLayerPerceptron;
17 | import org.neuroph.nnet.learning.BackPropagation;
18 |
19 | public class NeuralNetworkStockPredictor {
20 |
21 | private int slidingWindowSize;
22 | private double max = 0;
23 | private double min = Double.MAX_VALUE;
24 | private String rawDataFilePath;
25 |
26 | private String learningDataFilePath = "input/learningData.csv";
27 | private String neuralNetworkModelFilePath = "stockPredictor.nnet";
28 |
29 | public static void main(String[] args) throws IOException {
30 |
31 | NeuralNetworkStockPredictor predictor = new NeuralNetworkStockPredictor(5, "input/rawTrainingData.csv");
32 | predictor.prepareData();
33 |
34 | System.out.println("Training starting");
35 | predictor.trainNetwork();
36 |
37 | System.out.println("Testing network");
38 | predictor.testNetwork();
39 | }
40 |
41 | public NeuralNetworkStockPredictor(int slidingWindowSize, String rawDataFilePath) {
42 | this.rawDataFilePath = rawDataFilePath;
43 | this.slidingWindowSize = slidingWindowSize;
44 | }
45 |
46 | void prepareData() throws IOException {
47 | BufferedReader reader = new BufferedReader(new FileReader(rawDataFilePath));
48 | // Find the minimum and maximum values - needed for normalization
49 | try {
50 | String line;
51 | while ((line = reader.readLine()) != null) {
52 | String[] tokens = line.split(",");
53 | double crtValue = Double.valueOf(tokens[1]);
54 | if (crtValue > max) {
55 | max = crtValue;
56 | }
57 | if (crtValue < min) {
58 | min = crtValue;
59 | }
60 | }
61 | } finally {
62 | reader.close();
63 | }
64 |
65 | reader = new BufferedReader(new FileReader(rawDataFilePath));
66 | BufferedWriter writer = new BufferedWriter(new FileWriter(learningDataFilePath));
67 |
68 | // Keep a queue with slidingWindowSize + 1 values
69 | LinkedList valuesQueue = new LinkedList();
70 | try {
71 | String line;
72 | while ((line = reader.readLine()) != null) {
73 | double crtValue = Double.valueOf(line.split(",")[1]);
74 | // Normalize values and add it to the queue
75 | double normalizedValue = normalizeValue(crtValue);
76 | valuesQueue.add(normalizedValue);
77 |
78 | if (valuesQueue.size() == slidingWindowSize + 1) {
79 | String valueLine = valuesQueue.toString().replaceAll("\\[|\\]", "");
80 | writer.write(valueLine);
81 | writer.newLine();
82 | // Remove the first element in queue to make place for a new
83 | // one
84 | valuesQueue.removeFirst();
85 | }
86 | }
87 | } finally {
88 | reader.close();
89 | writer.close();
90 | }
91 | }
92 |
93 | double normalizeValue(double input) {
94 | return (input - min) / (max - min) * 0.8 + 0.1;
95 | }
96 |
97 | double deNormalizeValue(double input) {
98 | return min + (input - 0.1) * (max - min) / 0.8;
99 | }
100 |
101 | void trainNetwork() throws IOException {
102 | NeuralNetwork neuralNetwork = new MultiLayerPerceptron(slidingWindowSize,
103 | 2 * slidingWindowSize + 1, 1);
104 |
105 | int maxIterations = 1000;
106 | double learningRate = 0.5;
107 | double maxError = 0.00001;
108 | SupervisedLearning learningRule = neuralNetwork.getLearningRule();
109 | learningRule.setMaxError(maxError);
110 | learningRule.setLearningRate(learningRate);
111 | learningRule.setMaxIterations(maxIterations);
112 | learningRule.addListener(new LearningEventListener() {
113 | public void handleLearningEvent(LearningEvent learningEvent) {
114 | SupervisedLearning rule = (SupervisedLearning) learningEvent.getSource();
115 | System.out.println("Network error for interation " + rule.getCurrentIteration() + ": "
116 | + rule.getTotalNetworkError());
117 | }
118 | });
119 |
120 | DataSet trainingSet = loadTraininigData(learningDataFilePath);
121 | neuralNetwork.learn(trainingSet);
122 | neuralNetwork.save(neuralNetworkModelFilePath);
123 | }
124 |
125 | DataSet loadTraininigData(String filePath) throws IOException {
126 | BufferedReader reader = new BufferedReader(new FileReader(filePath));
127 | DataSet trainingSet = new DataSet(slidingWindowSize, 1);
128 |
129 | try {
130 | String line;
131 | while ((line = reader.readLine()) != null) {
132 | String[] tokens = line.split(",");
133 |
134 | double trainValues[] = new double[slidingWindowSize];
135 | for (int i = 0; i < slidingWindowSize; i++) {
136 | trainValues[i] = Double.valueOf(tokens[i]);
137 | }
138 | double expectedValue[] = new double[] { Double.valueOf(tokens[slidingWindowSize]) };
139 | trainingSet.addRow(new DataSetRow(trainValues, expectedValue));
140 | }
141 | } finally {
142 | reader.close();
143 | }
144 | return trainingSet;
145 | }
146 |
147 | void testNetwork() {
148 | NeuralNetwork neuralNetwork = NeuralNetwork.createFromFile(neuralNetworkModelFilePath);
149 | neuralNetwork.setInput(normalizeValue(2056.15), normalizeValue(2061.02), normalizeValue(2086.24),
150 | normalizeValue(2067.89), normalizeValue(2059.69));
151 |
152 | neuralNetwork.calculate();
153 | double[] networkOutput = neuralNetwork.getOutput();
154 | System.out.println("Expected value : 2066.96");
155 | System.out.println("Predicted value : " + deNormalizeValue(networkOutput[0]));
156 |
157 | }
158 | }
--------------------------------------------------------------------------------
/src/test/java/com/technobium/AppTest.java:
--------------------------------------------------------------------------------
1 | package com.technobium;
2 |
3 | import junit.framework.Test;
4 | import junit.framework.TestCase;
5 | import junit.framework.TestSuite;
6 |
7 | /**
8 | * Unit test for simple App.
9 | */
10 | public class AppTest
11 | extends TestCase
12 | {
13 | /**
14 | * Create the test case
15 | *
16 | * @param testName name of the test case
17 | */
18 | public AppTest( String testName )
19 | {
20 | super( testName );
21 | }
22 |
23 | /**
24 | * @return the suite of tests being tested
25 | */
26 | public static Test suite()
27 | {
28 | return new TestSuite( AppTest.class );
29 | }
30 |
31 | /**
32 | * Rigourous Test :-)
33 | */
34 | public void testApp()
35 | {
36 | assertTrue( true );
37 | }
38 | }
39 |
--------------------------------------------------------------------------------