Trendvorhersage, Stock market prediction

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
greetings1
User
Beiträge: 51
Registriert: Donnerstag 22. Oktober 2020, 18:19

Hallo, kennt sich hier jemand gut mit KI/Neuronalen Netzen aus, und kann mir sagen, wieso das folgende Script NICHT funktioniert, oder welchen grundlegenden Denkfehler ich gemacht habe?

Das LSTM NN wird mit 500 Eingabedaten gespeist und soll dann eine Vorhersage für 600 Daten machen.

Um das auszuprobieren, müsstet ihr tensorflow, numpy, keras, sklearn sowie matplotlib.pyplot installieren. Außerdem bräuchtet ihr eine CSV-Datei mit Eingabedaten (irgendein Kursverlauf).

Vielen Dank

Code: Alles auswählen

import numpy as np
import tensorflow as tf
from tensorflow import keras

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout

from sklearn.preprocessing import MinMaxScaler

import matplotlib.pyplot as plt

import sys
import random
import datetime
import matplotlib

data = []
with open(sys.argv[1]) as fp:
    lines = fp.readlines()
    for c, line in enumerate(lines):
        x = line.split(";")
        data.append((float(x[1]) + float(x[2])) / 2.0)

data2 = []
for i in range(9):
    temp = []
    for j in range(i * 50, i * 50 + 100):
        temp.append(data[j])
    data2.append(temp)

sc_x = MinMaxScaler()
sc_y = MinMaxScaler()

train_data_x = sc_x.fit_transform(data2).reshape(-1, 1, 1)
train_data_y = []
for i in range(9):
    for j in range(i * 50, i * 50 + 100):
        train_data_y.append(j)
train_data_y = sc_y.fit_transform(np.reshape(train_data_y, (-1, 1)))

print(train_data_x.shape, train_data_y.shape)

units_c = 100

regressor = Sequential()

regressor.add(
    LSTM(units=units_c, return_sequences=True, input_shape=(train_data_x.shape[1], 1))
)
regressor.add(Dropout(0.2))

regressor.add(LSTM(units=units_c, return_sequences=True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units=units_c, return_sequences=True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units=units_c))
regressor.add(Dropout(0.2))

regressor.add(Dense(units=1))

regressor.compile(optimizer="adam", loss="mean_squared_error")

regressor.fit(train_data_x, train_data_y, epochs=20, batch_size=16)

data3 = []
for i in range(500):
    data3.append(data[i])
for i in range(100):
    data3.append((1.01 - random.random() * 0.02) * data[-1])
test_data_x = sc_x.fit_transform([data3]).reshape(-1, 1, 1)
pre = regressor.predict(test_data_x)
pre = sc_x.inverse_transform(pre.reshape(1, -1)).reshape(-1)

xs1 = []
for i in range(500):
    xs1.append(data[i])
for i in range(100):
    xs1.append(data[-1])
xs2 = []
for i in range(600):
    xs2.append(pre[i])

nowy = datetime.datetime.now()
ys = []
for i in range(600):
    ys.append(nowy + datetime.timedelta(0, 300 * (i - 500)))
dates = matplotlib.dates.date2num(ys)

print(len(xs1), len(xs2), len(ys))
plt.plot_date(dates, xs1, label="data", linestyle="solid")
plt.plot_date(dates, xs2, label="data2", linestyle="solid")
plt.legend()
plt.show()
Antworten