import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as img
from sklearn.datasets import fetch_openml
X,y = fetch_openml(name = 'MNIST_784' , version =1 , return_X_y = True)
X = X.to_numpy()
y = y.to_numpy()
- Extraire et afficher une ligne i_ième de la matrice X
ligne_1 = np.array(X[0])
print(y[0]) #Vérifier que l'image correspond à l'étiquette
new = ligne_1.reshape(28,28)
plt.imshow(new, cmap='gray')
- Vérifier que la base de données est équilibrée
for i in range(0,10):
print("Nombre d'images ayant pour étiquette", str(i),":", ((X[(y == str(i))]).shape)[0])
- Créer une matrice constituée des images ayant pour étiquette 0 et 1
X_bin = np.array(X[(y == "0") + (y =='1')])
X_new = []
for i in X_bin:
X_new.append(i.reshape(28,28))
fig, (ax1,ax2,ax3,ax4 ) = plt.subplots(1, 4, figsize=(16, 4))
ax1.imshow(X_new[0])
ax1.set_title('Image 1')
ax2.imshow(X_new[1])
ax2.set_title('Image 2')
ax3.imshow(X_new[2])
ax3.set_title('Image 3')
ax4.imshow (X_new[3])
ax4.set_title('Image 4')
- Séparer la base de données en deux bases: une d'entraînement très grande (69900 images), et une autre de test plus petite (100 images).
X_train, y_train = X[0:69900], y[0:69900]
X_test, y_test = X[69901:70000], y[69901:70000]
- Décaler l'image d'une certaine valeur shift (ici shift = 250)
r = np.roll(ligne_1,250)
new = r.reshape(28,28)
plt.imshow(new, cmap='gray')
X_zero, y_zero = np.array(X[(y=='0')]), np.array(y[(y=='0')])
X_un, y_un = np.array(X[(y=='1')]), np.array(y[(y=='1')])
z, z_y = ['z']*7000, ['z']*7000
for i in range(0,7000):
z[i] = np.roll(X_bin[i], 250)
z_y[i] = y[i]
- Création de la nouvelle base de données B composée des chiffres 0, des chiffres 1 et de chiffres 0 et 1 mal centrés
B,y = np.concatenate([X_zero, X_un, z]), np.concatenate([y_zero, y_un, z_y])