J'essaie de former un modèle pour prédire le délai de départ basé sur la compagnie aérienne, la journée du mois, des devises et d'origine. J'ai essayé plusieurs approches, mais la précision est très faible. Entrez la description de l'image ici Fist J'ai utilisé les étiquettes de retardaire directement à partir de -20 à +20 min, j'ai essayé de faciliter la définition de la tâche en définissant les intervalles suivants: pour les retards dans [0 5 [=> 0 [5 10] => 1 ..etc
Mais toujours la précision est mauvaise et j'ai essayé plusieurs approches; P>
Changer les couches
Ne pas normaliser les caractéristiques
Suppression et ajout de nouvelles fonctionnalités p>
mais je ne trouve toujours pas quelque chose qui fonctionne p>
#################### Chargez le jeu de données
p>
################ Valeurs de retard de masque
p>
################ Divisez des étiquettes et des fonctionnalités
p>
################# Remplacement des valeurs de caractères
p>
########################### NORMALISATION
p>
########################## Le modèle
P> import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from keras.models import Sequential
from keras.layers import Dense, Dropout
import matplotlib.pyplot as plt
import numpy
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = []
def on_batch_end(self, batch, logs={}):
self.losses.append(logs.get('loss'))
model = Sequential()
model.add(Dense(64, input_dim=4, activation='relu'))
model.add(Dense(30, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(1))
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam', metrics=
['accuracy'])
# Fit the model
history = LossHistory()
model.fit(df, y, validation_split=0.33, epochs=1000,
batch_size=50,verbose=1, callbacks=[history])
print(history.losses)
3 Réponses :
Lorsque vous utilisez Malheureusement, Keras ne "protégera" pas dans un tel cas, insistant En informatique et rapportant une "précision", malgré le fait qu'il n'a pas de sens et inapproprié pour votre problème - voir ma réponse dans Quelle fonction définit la précision dans KERAS lorsque la perte est une erreur carrée moyenne (MSE)? p> Si vous souhaitez coller à un réglage de régression, vous devez simplement supprimer Si vous souhaitez prédire les intervalles binifiés comme p> etc., c.-à-d. Travailler dans un paramètre classification em>, vous devez modifier votre perte sur où perte = 'méthandre_squared_error' code> et aucune activation (c.-à-d. La valeur linéaire par défaut) dans une couche finale à un seul nœud, comme vous le faites ici, vous êtes dans une régression EM> Cadre, où
métrique = ["précision"] code> de votre compilation modèle et ne vous dérange pas - dans les paramètres de régression, MSE elle-même peut (et habituellement) servir aussi comme la performance m cétrique. Mais cela signifie que vous allez essayer de prédire directement valeurs numériques em>, pas des "étiquettes" provenant du binning, comme vous le décrivez. P>
Catégorical_cross_tropy code> et conserver la précision de votre métrique . N'oubliez pas que vous devriez également convertir vos étiquettes en une-codées à une fois à chaud (voir Keras
to_catégorique code >
) et remplacez votre couche finale avec p> num_classes code> est le nombre de classes résultant de votre procédure binning. p> p>
Ok merci je vais essayer de métrique la performance après la formation de la formation à l'aide de la traçabilité manuelle
En regardant votre ensemble de données, vous avez un mélange de problèmes de classification et de régression. Comme vous pourriez très bien pouvoir utiliser Keras pour modéliser, mais si votre cas est une régression, la classification devient sans signification. D'autre part, ma suggestion tente d'utiliser des arbres de décision. p>
Dans de tels cas, on peut être dans un contexte de régression ou dans une classification, il n'y a pas de "mélanges" ...
En fait, j'ai décidé de changer le problème à un problème de classification, en utilisant les intervalles comme étiquettes multiclass. J'espère que ça fonctionnera mieux
Mon expérience (E.G. Estimation de l'âge) dit qu'il sera toujours préférable de former le réseau avec une perte combinée, c'est-à-dire la régression + classification.
Je pense que vous avez déjà compris comment faire le problème de la classification, ce qui consiste à quantifier vos sorties cible dans des bacs prédéfinis. En conséquence, la sortie de votre classification prédira la probabilité d'un échantillon appartenant à une corbeille. p>
sans perte de généralité, disons que vous avez Un moyen simple d'estimer le délai de vol ( où Bien sûr, il existe d'autres moyens que vous pouvez utiliser pendant le temps d'inférence, mais utilisons simplement cela un comme exemple. Maintenant, la question est J'espère que vous avez déjà reçu la réponse, qui est juste pour calculer la perte entre suppose que vous avez un modèle code> keras code> qui effectue la tâche de classification, ci-dessous est un exemple pour l'entraîner avec Les pertes de régression p> Vous pouvez désormais former le même modèle avec une nouvelle perte de régression. P> Comme je l'ai mentionné plus tôt, il sera préférable de faire à la fois la régression et la perte de classification. Parce que les utiliser ensemble vous aidera à optimiser le réseau de manière meilleure. Pourquoi? P> Parce que lorsqu'il utilise une perte de classification, donné p> vous aurez Dans le même temps, le problème de l'utilisation de la perte de régression uniquement est que vous ne savez vraiment pas quelles sont les significations physiques des fonctionnalités pour prédire la valeur cible, mais que vous savez si l'un d'entre eux répond à une valeur aberrante , vous gâchez votre prédiction. Avec la perte de classification, vous savez que la fonctionnalité directe utilisée pour la régression est la composition des bacs. p> p> n code> bacs et la valeur centrale du
k code> th bin est
c [k] < / code>. Maintenant, la question est de savoir comment allez-vous inférence, c'est-à-dire un échantillon de test, comment estimer le retard de vol
fd code>) est de prendre la moyenne pondérée de vos résultats de classification de bac, c'est-à-dire p>
proba code> est la probabilité bin de
clf.predict (échantillon) code> et
centres code> est la valeur centrale de vos bacs, c'est-à-dire
centres = [c [k] pour k dans la plage (n)] code>. p>
FD < / code> infercé à l'aide de la formule ci-dessus et que de la vérité au sol. p>
l (gt, p1) = L (gt, p2 ) code>. Cependant, lorsque vous pensez de votre problème, ce que nous voulons vraiment, c'est
L (GT, P1)
Merci Monsieur !! Cela m'a aidé même je l'ai vu tard.