У меня есть несбалансированные данные, которые я передаю через сеть LSTM.
Вот часть моего кода:
weights = class_weight.compute_class_weight('balanced',np.unique(trainY),trainY)
print (weights)
model = Sequential()
model.add(LSTM(64, input_shape=(look_back, trainX.shape[2]), recurrent_dropout=0.3, return_sequences=True)) #
model.add(Dropout(0.3))
model.add(LSTM(32, recurrent_dropout=0.3))
model.add(Dense(1, activation='sigmoid'))
print (model.summary())
model.compile(loss='binary_crossentropy', optimizer='adam',metrics=['accuracy'])
model.fit(trainX, trainY, validation_data=(validX, validY), epochs=100, batch_size=16, class_weight=weights, verbose=1 , callbacks=callbacks_list, shuffle=True)
Веса [0.6147541 2.67857143]
видят хороший дисбаланс.
Однако, когда я печатаю матрицы путаницы (для каждого набора), я только предсказываю 0
.
Как формируются мои данные.На самом деле каждая двумерная последовательность на входе LSTM имеет размер (time_step, features)
верно?Здесь я использую time_step
из 1 (и features
= 22, не имеет значения).Это означает, что это то же самое, что если бы я брал каждую семпл моей серии времени один за другим.
Когда я увеличиваю time_step
примерно до 5, это работает немного лучше, но я все равно получаю слишком высокуючисло "false 0" (0 - самый большой представленный класс), хотя MLP с несколькими слоями очень хорошо работает с теми же данными с параметром class_weight
.Я делаю что-то не так с LSTM?
Вот как строятся последовательности: look_back
- это размер скользящего окна моментов, центрированных вокруг текущего шага по времени, который я делаю, и окна перекрываются:
def create_dataset(feat,targ, look_back=2):
semi_window=math.floor(look_back/2)
dataX, dataY = [], []
for i in range(semi_window,len(targ)-semi_window):
a = feat[i-semi_window:(i+semi_window+1), :]
dataX.append(a)
dataY.append(targ[i])
return np.array(dataX), np.array(dataY)
Я действительно жду помощи, потому что, кажется, он дает характеристики под простым MLP, например, в то время как он предназначен для изучения временных зависимостей от временных рядов ...