Ввод данных 5 строк, классификация (прогнозирование) 6-й строки в Keras LSTM - PullRequest
0 голосов
/ 12 июня 2018

Я хочу ввести 5 строк набора данных в LSTM и классифицировать 6-ю строку Y. Я сделал ввод, изменив форму данных:

X = X.reshape(6000,5,5)

Но как я могу предсказать Y из 6-й строки?Какую форму Y должен иметь?Я много читаю и много ищу в Google, но, честно говоря, я не мог понять код, потому что они настраивают свои данные перед их использованием.

Мой полный код:

import pandas as pd
from sklearn.preprocessing import LabelEncoder,MinMaxScaler
from keras.layers import Dense,RNN,LSTM,Activation,Dropout,SimpleRNN,Bidirectional
from keras.optimizers import RMSprop,Adam
from keras.wrappers.scikit_learn import KerasClassifier
from keras.models import Sequential
from sklearn.model_selection import train_test_split
import numpy as np

df = pd.read_csv('./EURUSD_DATAFRAME.csv')
BinEncoder = LabelEncoder()
scalar = MinMaxScaler()

df['pos'] = df['pos'].astype('int')
dat = df.values




X = dat[0:30000,0:5]
Y = dat[0:6000,5]


X[:,4]= BinEncoder.fit_transform(X[:,4])
X[:,0:4] = scalar.fit_transform(X[:,0:4])
X[:,4] = X[:,4].astype('int')
Y = BinEncoder.fit_transform(Y)

X = X.reshape(6000,5,5)
#MODEL 3
 model = Sequential()
 model.add(LSTM(1024,input_shape=(5,5),return_sequences=True,kernel_initializer='normal'))
 #model.add(Activation('tanh'))
 model.add(Dropout(0.2))
 model.add(LSTM(512))
 model.add(Dropout(0.3))
 model.add(Dense(1))
 model.add(Activation('sigmoid'))
 model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
 model.fit(X,Y,batch_size=100,epochs=10,validation_split=0.2)
 p = model.predict(X)
# print(classifier.score(X,Y))
# ----

Яклассифицирует Y, который закодирован как 1 или 0.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Извините, но я действительно не понимаю, что вы имеете в виду под этим?Ваша входная форма (6000, 5, 5) и ваша выходная форма (6000, 2)?Так что вы подразумеваете под шестым рядом?

0 голосов
/ 12 июня 2018

Это довольно просто.Используйте встроенную функцию keras: которая превратит его в одно горячее представление, например, [0, 1] и [1, 0]

 from keras.utils import to_categorical

 y = to_categorical(y, num_classes=2)

И измените количество единиц в последнем плотном слое на num_classes, 2 в вашем случае.И я думаю, что вы должны использовать softmax для классификации вместо сигмовидной.Также я бы посоветовал вам использовать активацию 'relu' между слоями lstm или более продвинутой LeakyRelu

...