Ce tutoriel sur Keras reprend le très bon exemple : Keras Tutorial: Deep Learning in Python en apportant quelques commentaires, corrections et modifications mineures.

Il y a 2 à 3 erreurs dans le tutoriel de référence. Peut-être sont elles le fait d’une incompatibilité avec la version actuelle de Keras (2.1.5)

Je ne reviens pas sur ce qui marche bien dans le tutoriel.

Pour comprendre le tutoriel, il faut impérativement lire ensemble Keras Tutorial: Deep Learning in Python et cet article.

Mon code est visible ici : https://gist.github.com/boscherj/e3aeec66f367ff2bb2309c0def6a0e4a

Lecture des données

Si vous avez lu le tutoriel sur Tensorflow vous constaterez que nous utilisons ici aussi Pandas pour lire les données au format csv.

# Read in white wine data
white = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv", sep=';')

Description des données – représentation graphique

Cette partie n’est pas décrite ici car elle n’est pas spécifique à Keras.

note :

Matrice de corrélation

Pour afficher la matrice de corrélation, le code ci-dessous est proposé dans le tutoriel de référence.

La ligne sns.plt.show n’est pas correcte et elle ne sert à rien.

import seaborn as sns
corr = wines.corr()
sns.heatmap(corr,
xticklabels=corr.columns.values,
yticklabels=corr.columns.values)
sns.plt.show()

Apprentissage

Le code ci-dessous, proposé dans le tutoriel de référence dot être modifié.

La syntaxe X=wines.ix[:,0:11] est dépréciée.

# .ix is deprecated. Please use
# The recommended methods of indexing are:
# .loc if you want to label index
# .iloc if you want to positionally index.

Il faut désormais utiliser :

X=wines.iloc[:,0:11]

# Import `train_test_split` from `sklearn.model_selection`
from sklearn.model_selection import train_test_split

# Specify the data
# X=wines.ix[:,0:11] (déprécié)
X=wines.iloc[:,0:11]

# Specify the target labels and flatten the array
y=np.ravel(wines.type)

# Split the data up in train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

Prédiction

Le modèle se termine par une couche sigmoid.

Le résultat de notre classification est donc une probabilité.  C’est pourquoi, si on utilise le code ci-dessous pour effectuer nos prédictions, le résultat sera une probabilité.

# Predict Values
y_pred = model.predict(X_test)

Or ce que nous voulons est un résultat binaire (blanc ou rouge).

Pour obtenir le résultat que nous voulons, il faut corriger le code :

# Etant donné que la prédiction voulue est une classe et non une probabilité, il ne faut pas utiliser
# y_pred = model.predict(X_test)
# mais le code ci-dessous, qui retourne l'appartenance à une des deux classes (blanc, rouge)
y_classes = model.predict_classes(X_test)

Laisser un commentaire

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