J'ai un ensemble de données de timeséries avec N observations et caractéristiques F. Chaque fonctionnalité peut soit manifester (1) soit ne pas se manifester (0). Ainsi, l'ensemble de données ressemblerait à ceci:Keras LSTM pour la prédiction de timesérie: prédire les vecteurs de caractéristiques
T F1 F2 F3 F4 F5 ... F
0 1 0 0 1 0 0
1 0 1 0 0 1 1
2 0 0 0 1 1 0
3 1 1 1 1 0 0
...
N 1 1 0 1 0 0
Je suis en train d'utiliser une architecture basée LSTM pour prédire qui dispose manifeste à l'instant T + 1 sur la base des observations TW - T, où W est la largeur de certains fenêtre de temps. Si W = 4, le LSTM 'voit' 4 pas dans le passé pour faire la prédiction. Le LSTM attend une entrée 3D, qui sera de la forme (number_batches, W, F). Une naïve mise en œuvre Keras pourrait ressembler à:
model = Sequential()
model.add(LSTM(128, stateful=True, batch_input_shape=(batch_size, W, F)))
model.add(Dense(F, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size, epochs=250, shuffle=False,
validation_data=(x_val, y_val))
Le principal problème que j'ai est ceci: l'ensemble des données a un grand nombre de fonctionnalités (> 200) et il est relativement rare que les caractéristiques de manifester, à savoir 0 est beaucoup plus commun que 1. Le réseau neuronal apprend simplement à mettre toutes les valeurs à 0 et obtient ainsi un degré élevé de «précision».
Essentiellement, je veux pondérer tous les 1 dans la matrice d'entrée par une valeur pour lui donner plus d'importance, mais je suis confus comment implémenter cela dans Keras. Je sais qu'il y a une option sample_weight
dans Keras, mais comment ça marche? Je ne saurais pas comment l'implémenter dans mon exemple, par exemple. Est-ce une solution raisonnable au problème que j'ai? Quelles fonctions d'optimisation et de perte sont couramment utilisées pour ce type de problème?
avez-vous essayé au lieu d'utiliser 0 = -1, 1 = 1 à la place? – DJK