У меня есть набор данных прогнозов погоды, и я пытаюсь создать модель, которая предсказывает, какой прогноз будет более точным на следующий день.
Для этого мои выходные данные y имеют форму y = [1,0,1,0], потому что у меня есть прогнозы 4 разных организаций. 1 означает, что это лучший прогноз для текущей записи, а большее количество «единиц» означает, что несколько прогнозов имели один и тот же лучший прогноз.
Моя проблема в том, что я хочу создать модель, которая обучается на этих данных, но также узнает, что правильное предсказание только одного значения - это 100% правильный ответ, поскольку мне нужно только получить в результате один из лучших и равных прогнозов. Я считаю, что то, как я это делаю, «снижает» точность моей оценки. Есть ли способ реализовать это в keras? Архитектура нейронной сети полностью экспериментальная, и нет никаких конкретных c причин, по которым я ее выбрал. Это код, который я написал. Мой набор данных поезда состоит из 6463 строк × 505 столбцов.
model = Sequential()
model.add(LSTM(150, activation='relu',activity_regularizer=regularizers.l2(l=0.0001)))
model.add(Dense(100, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(24, activation='relu'))
model.add(Dense(4, activation='softmax'))
#LSTM
# reshape input to be 3D [samples, timesteps, features]
X_train_sc =X_train_sc.reshape((X_train_sc.shape[0], 1, X_train_sc.shape[1]))
X_test_sc = X_test_sc.reshape((X_test_sc.shape[0], 1,X_test_sc.shape[1]))
#validation set
x_val=X_train.iloc[-2000:-1300,0:505]
y_val=y_train[-2000:-1300]
x_val_sc=scaler.transform(x_val)
# reshape input to be 3D for LSTM[samples, timesteps, features]
x_val_sc =x_val_sc.reshape((x_val_sc.shape[0], 1, x_val_sc.shape[1]))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['categorical_accuracy'])
history= model.fit(x=X_train_sc, y=y_train ,validation_data=(x_val_sc,y_val), epochs=300, batch_size=24)
print(model.evaluate(X_test_sc,y_test))
yhat= model.predict(X_test_sc)
Моя точность составляет ~ 44%