├── .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 | --------------------------------------------------------------------------------