Partant du principe qu’il vaut mieux s’adresser à Dieu au’à ses Saints, après avoir étudié The Boston Housing Price dataset avec (JM) Jojo Moolayil, présentons ici la version de F. Chollet (FC), l’auteur de Keras. Si le code de JM est très intéressant d’un point de vue pédagogique, il ne l’est pas en termes d’efficacité et d’efficience.

Le code est ici. C’est celui du livre de F. Chollet : Deep Learning with Python.

Pour une description des données, voir Kaggle ici, ou ici.

Le but de l’exercice est de prédire le prix moyen d’une maison à Boston, dans les années 70. Nous sommes dans un cas typique de régression.

Lecture des données

Normalisation

Si les données sont toutes de type float, elles ne sont pas toutes dans le même intervalle. C »est pourquoi il est préférable de les normaliser. Notez que la moyenne et l’écart-type sont calculés sur les données d’apprentissage et utilisées sur celles-ci ainsi que sur les données de test.

Autre façon de normaliser (plus simple à mon avis)

Si on veut ensuite utiliser, le scaler calculé avec sckit-learn pour les données de test, c’est tout à fait possible. Voir ici.

Construction du réseau

Les différentes couches

Le modèle proposé par FC est différent de celui de JM puisque au lieu de 13/6/1 on a 64/64/1.

Par contre tous deux utilisent un ReLU.

Concernant l’optimizer, FC choisit rmsprop alors que JM préfère Adam.

La fonction de coût choisie par FC et JM est MSE, ce qui est presque systématique dans le cas d’une régression.

La métrique de FC est MAE (mean_absolute_error) et celle de JM MAPE (mean_absolute_percentage_error).

Pour rappel, la compétition Kaggle existe RMSE. Avec Keras, il est permis d’utiliser n’importe quelle fonction de coût comme métrique mais RMSE n’est pas implémenté. Il faut créer sa propre fonction.

La définition de RMSE est :

RMSE(y) = \sqrt{\sum_{i=1}^n (y_i - \hat{y}_i)^2}

Pour rappel, la métrique n’est pas utilisée pour les calculs du modèle.


K-fold

FC utilise cette technique pour tester différents paramètres car il n’y a pas beaucoup de données dans le dataset.

Il faut tester ici différentes valeurs pour num_epochs mais aussi différentes couches (nombre de neurones et nombre de couches)

evaluate :

Returns the loss value & metrics values for the model in test mode.

https://keras.io/models/model/#evaluate

affichage des données

Version finale du réseau

J’ai modifié la métrique afin de comparer les résultats avec la compétition Kaggle.

def build_model_rmse():
model = models.Sequential()
model.add(layers.Dense(64, activation=’relu’,input_shape=(train_data.shape[1],)))
model.add(layers.Dense(64, activation=’relu’))
model.add(layers.Dense(1))
model.compile(optimizer=’rmsprop’, loss=’mse’, metrics=[root_mean_squared_error])
return model

Avec un tel résultat on est 69ème dans la compétition, ce qui n’est pas terrible.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *