Бинарная классификация в Керасе и LSTM - PullRequest
0 голосов
/ 13 июня 2018

У меня есть проблема бинарной классификации, которая меня очень смущает из-за ввода-вывода моделирования с помощью LSTM.Я хочу ввести 5 строк набора данных и получить цвет метки для 6-й строки.My X имеет 5 функций: rb, us, ls, Volume, pos My Y - это метка 1 или 0 Мой фрейм данных:

         rb        us        ls    Volume  pos  color
0  0.080071  1.000000  0.964286  0.020507    1      1
1  0.017798  0.857143  0.857143  0.017643    1      1
2  0.026698  0.642857  0.500000  0.031085    4      1
3  0.029666  0.833333  1.000000  0.011411    2      0
4  0.008899  0.500000  1.000000  0.008371    4      0

Я делаю последовательность из 5 строк, например:

[[1.77976353e-02 8.57142857e-01 8.57142857e-01 1.76426968e-02
   1.00000000e+00]
  [2.66977791e-02 6.42857143e-01 5.00000000e-01 3.10845400e-02
   4.00000000e+00]
  [2.96664095e-02 8.33333333e-01 1.00000000e+00 1.14109866e-02
   2.00000000e+00]
  [8.89918602e-03 5.00000000e-01 1.00000000e+00 8.37062257e-03
   4.00000000e+00]
  [1.48316083e-02 8.33333333e-01 1.00000000e+00 8.47275749e-03
   2.00000000e+00]]

Как классифицировать Y шестого ряда?Я имею в виду, как классифицировать 6-ю строку ИЛИ первый следующий элемент следующей последовательности?Нужно ли как-то объявить это в сети?Есть ли проблемы с моим вводом / выводом сети?Как я могу получить метку (двоичная классификация) цвета метки 6-го элемента?Мой код:

import pandas as pd
from Util import window_nd as Reshape
from keras.utils import to_categorical
from keras.layers import Dense,RNN,LSTM,Activation,Dropout
from keras.models import Sequential


df = pd.read_csv('./EURUSD_DATAFRAME.csv')
print(df.head())
df['pos'] = df['pos'].astype('int')
dat = df.values

X = dat[0:30004,0:5]
Y = dat[0:30000,5]
X = Reshape(X,5)  #It's a custom function which reshaped the X to serialized (5,5) 
#Shape of X is  (30000, 5, 5)

Y = to_categorical(Y,num_classes=2)

model = Sequential()
model.add(LSTM(25,input_shape=(5,5),return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(LSTM(1))
model.add(Activation('relu'))
model.add(Dense(2))
model.add(Activation('sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(X,Y,batch_size=5,epochs=10,validation_split=0.2)
p = model.predict(X)
print(p)

1 Ответ

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

Я не уверен, что вы подразумеваете под "как классифицировать 6-й ряд".Позвольте мне попытаться уточнить вещи в целом.Возможно, это поможет.

Вы вводите матрицу 5x5 (которая интерпретируется с 5 временными шагами по 5 объектов в каждой), а ваши выходные данные представляют собой логиты для 2 классов, которые вы пытаетесь классифицировать.Соответствует ли два класса «6-й строке» - решать вам.Точнее, вплоть до того, как вы настроили свой Y. Если ваш Y является классом «6-й строки», это то, что сеть научится предсказывать.

Вы также можете взглянуть на этот похожий вопрос: Общие сведения о LSTM Keras

...