Machine Learning avec Python - Préparation des données

introduction

Les algorithmes d'apprentissage automatique sont complètement dépendants des données car c'est l'aspect le plus crucial qui rend possible l'apprentissage des modèles. D'un autre côté, si nous ne pouvons pas donner un sens à ces données, avant de les alimenter en algorithmes ML, une machine sera inutile. En termes simples, nous avons toujours besoin de fournir les bonnes données, c'est-à-dire les données à la bonne échelle, au format et contenant des caractéristiques significatives, pour le problème que nous voulons que la machine résolve.

Cela fait de la préparation des données l'étape la plus importante du processus de ML. La préparation des données peut être définie comme la procédure qui rend notre ensemble de données plus approprié pour le processus de ML.

Pourquoi le prétraitement des données?

Après avoir sélectionné les données brutes pour la formation ML, la tâche la plus importante est le prétraitement des données. Au sens large, le prétraitement des données convertira les données sélectionnées dans une forme avec laquelle nous pouvons travailler ou alimenter des algorithmes ML. Nous devons toujours prétraiter nos données afin qu'elles soient conformes aux attentes de l'algorithme d'apprentissage automatique.

Techniques de prétraitement des données

Nous avons les techniques de prétraitement des données suivantes qui peuvent être appliquées sur un ensemble de données pour produire des données pour les algorithmes ML -

Mise à l'échelle

Très probablement, notre ensemble de données comprend des attributs avec une échelle variable, mais nous ne pouvons pas fournir de telles données à l'algorithme ML, par conséquent, il nécessite un redimensionnement. La remise à l'échelle des données garantit que les attributs sont à la même échelle. En général, les attributs sont redimensionnés dans la plage de 0 et 1. Les algorithmes ML comme la descente de gradient et les k-voisins les plus proches nécessitent des données mises à l'échelle. Nous pouvons redimensionner les données à l'aide de la classe MinMaxScaler de la bibliothèque Python scikit-learn.

Exemple

Dans cet exemple, nous redimensionnerons les données de l'ensemble de données Pima Indians Diabetes que nous avons utilisé précédemment. Tout d'abord, les données CSV seront chargées (comme cela a été fait dans les chapitres précédents), puis à l'aide de la classe MinMaxScaler, elles seront remises à l'échelle dans la plage de 0 et 1.

Les premières lignes du script suivant sont les mêmes que celles que nous avons écrites dans les chapitres précédents lors du chargement des données CSV.

from pandas import read_csv
from numpy import set_printoptions
from sklearn import preprocessing
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Maintenant, nous pouvons utiliser la classe MinMaxScaler pour redimensionner les données dans la plage de 0 et 1.

data_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
data_rescaled = data_scaler.fit_transform(array)

Nous pouvons également résumer les données pour la sortie selon notre choix. Ici, nous définissons la précision sur 1 et affichons les 10 premières lignes dans la sortie.

set_printoptions(precision=1)
print ("\nScaled data:\n", data_rescaled[0:10])

Production

Scaled data:
[
   [0.4 0.7 0.6 0.4 0.  0.5 0.2 0.5 1. ]
   [0.1 0.4 0.5 0.3 0.  0.4 0.1 0.2 0. ]
   [0.5 0.9 0.5 0.  0.  0.3 0.3 0.2 1. ]
   [0.1 0.4 0.5 0.2 0.1 0.4 0.  0.  0. ]
   [0.  0.7 0.3 0.4 0.2 0.6 0.9 0.2 1. ]
   [0.3 0.6 0.6 0.  0.  0.4 0.1 0.2 0. ]
   [0.2 0.4 0.4 0.3 0.1 0.5 0.1 0.1 1. ]
   [0.6 0.6 0.  0.  0.  0.5 0.  0.1 0. ]
   [0.1 1.  0.6 0.5 0.6 0.5 0.  0.5 1. ]
   [0.5 0.6 0.8 0.  0.  0.  0.1 0.6 1. ]
]

À partir de la sortie ci-dessus, toutes les données ont été remises à l'échelle dans la plage de 0 et 1.

Normalisation

La normalisation est une autre technique de prétraitement des données utile. Ceci est utilisé pour redimensionner chaque ligne de données pour avoir une longueur de 1. C'est principalement utile dans le jeu de données Sparse où nous avons beaucoup de zéros. Nous pouvons redimensionner les données à l'aide de la classe Normalizer de la bibliothèque Python scikit-learn.

Types de normalisation

Dans l'apprentissage automatique, il existe deux types de techniques de prétraitement de normalisation:

Normalisation L1

Elle peut être définie comme la technique de normalisation qui modifie les valeurs de l'ensemble de données de telle sorte que, dans chaque ligne, la somme des valeurs absolues sera toujours jusqu'à 1. Elle est également appelée écarts les moins absolus.

Example

Dans cet exemple, nous utilisons la technique de normalisation L1 pour normaliser les données de l'ensemble de données Pima Indians Diabetes que nous avons utilisé précédemment. Tout d'abord, les données CSV seront chargées, puis à l'aide de la classe Normalizer, elles seront normalisées.

Les premières lignes du script suivant sont les mêmes que celles que nous avons écrites dans les chapitres précédents lors du chargement des données CSV.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv (path, names=names)
array = dataframe.values

Maintenant, nous pouvons utiliser la classe Normalizer avec L1 pour normaliser les données.

Data_normalizer = Normalizer(norm='l1').fit(array)
Data_normalized = Data_normalizer.transform(array)

Nous pouvons également résumer les données pour la sortie selon notre choix. Ici, nous définissons la précision sur 2 et affichons les 3 premières lignes dans la sortie.

set_printoptions(precision=2)
print ("\nNormalized data:\n", Data_normalized [0:3])

Output

Normalized data:
[
   [0.02 0.43 0.21 0.1  0. 0.1  0. 0.14 0. ]
   [0.   0.36 0.28 0.12 0. 0.11 0. 0.13 0. ]
   [0.03 0.59 0.21 0.   0. 0.07 0. 0.1  0. ]
]

Normalisation L2

Elle peut être définie comme la technique de normalisation qui modifie les valeurs de l'ensemble de données de telle sorte que dans chaque ligne, la somme des carrés sera toujours jusqu'à 1. Elle est également appelée moindres carrés.

Example

Dans cet exemple, nous utilisons la technique de normalisation L2 pour normaliser les données de l'ensemble de données Pima Indians Diabetes que nous avons utilisé précédemment. Tout d'abord, les données CSV seront chargées (comme cela a été fait dans les chapitres précédents), puis à l'aide de la classe Normalizer, elles seront normalisées.

Les premières lignes du script suivant sont les mêmes que celles que nous avons écrites dans les chapitres précédents lors du chargement des données CSV.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv (path, names=names)
array = dataframe.values

Maintenant, nous pouvons utiliser la classe Normalizer avec L1 pour normaliser les données.

Data_normalizer = Normalizer(norm='l2').fit(array)
Data_normalized = Data_normalizer.transform(array)

Nous pouvons également résumer les données pour la sortie selon notre choix. Ici, nous définissons la précision sur 2 et affichons les 3 premières lignes dans la sortie.

set_printoptions(precision=2)
print ("\nNormalized data:\n", Data_normalized [0:3])

Output

Normalized data:
[
   [0.03 0.83 0.4  0.2  0. 0.19 0. 0.28 0.01]
   [0.01 0.72 0.56 0.24 0. 0.22 0. 0.26 0.  ]
   [0.04 0.92 0.32 0.   0. 0.12 0. 0.16 0.01]
]

Binarisation

Comme son nom l'indique, c'est la technique à l'aide de laquelle nous pouvons rendre nos données binaires. Nous pouvons utiliser un seuil binaire pour rendre nos données binaires. Les valeurs au-dessus de cette valeur de seuil seront converties en 1 et en dessous de ce seuil seront converties en 0. Par exemple, si nous choisissons la valeur de seuil = 0,5, alors la valeur de l'ensemble de données au-dessus deviendra 1 et en dessous de cela deviendra 0. C'est-à-dire pourquoi on peut l'appelerbinarizing les données ou thresholdingles données. Cette technique est utile lorsque nous avons des probabilités dans notre ensemble de données et que nous voulons les convertir en valeurs nettes.

Nous pouvons binariser les données à l'aide de la classe Binarizer de la bibliothèque Python scikit-learn.

Exemple

Dans cet exemple, nous redimensionnerons les données de l'ensemble de données Pima Indians Diabetes que nous avons utilisé précédemment. Tout d'abord, les données CSV seront chargées, puis à l'aide de la classe Binarizer, elles seront converties en valeurs binaires, c'est-à-dire 0 et 1 en fonction de la valeur de seuil. Nous prenons 0,5 comme valeur seuil.

Les premières lignes du script suivant sont les mêmes que celles que nous avons écrites dans les chapitres précédents lors du chargement des données CSV.

from pandas import read_csv
from sklearn.preprocessing import Binarizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Maintenant, nous pouvons utiliser la classe Binarize pour convertir les données en valeurs binaires.

binarizer = Binarizer(threshold=0.5).fit(array)
Data_binarized = binarizer.transform(array)

Ici, nous montrons les 5 premières lignes de la sortie.

print ("\nBinary data:\n", Data_binarized [0:5])

Production

Binary data:
[
   [1. 1. 1. 1. 0. 1. 1. 1. 1.]
   [1. 1. 1. 1. 0. 1. 0. 1. 0.]
   [1. 1. 1. 0. 0. 1. 1. 1. 1.]
   [1. 1. 1. 1. 1. 1. 0. 1. 0.]
   [0. 1. 1. 1. 1. 1. 1. 1. 1.]
]

Standardisation

Une autre technique de prétraitement de données utile qui est essentiellement utilisée pour transformer les attributs de données avec une distribution gaussienne. Elle diffère la moyenne et l'écart-type (écart-type) d'une distribution gaussienne standard avec une moyenne de 0 et un écart-type de 1. Cette technique est utile dans les algorithmes ML comme la régression linéaire, la régression logistique qui suppose une distribution gaussienne dans l'ensemble de données d'entrée et produit mieux résultats avec des données redimensionnées. Nous pouvons standardiser les données (moyenne = 0 et SD = 1) à l'aide de la classe StandardScaler de la bibliothèque Python scikit-learn.

Exemple

Dans cet exemple, nous redimensionnerons les données de l'ensemble de données Pima Indians Diabetes que nous avons utilisé précédemment. Tout d'abord, les données CSV seront chargées, puis à l'aide de la classe StandardScaler, elles seront converties en distribution gaussienne avec moyenne = 0 et SD = 1.

Les premières lignes du script suivant sont les mêmes que celles que nous avons écrites dans les chapitres précédents lors du chargement des données CSV.

from sklearn.preprocessing import StandardScaler
from pandas import read_csv
from numpy import set_printoptions
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Maintenant, nous pouvons utiliser la classe StandardScaler pour redimensionner les données.

data_scaler = StandardScaler().fit(array)
data_rescaled = data_scaler.transform(array)

Nous pouvons également résumer les données pour la sortie selon notre choix. Ici, nous définissons la précision sur 2 et affichons les 5 premières lignes dans la sortie.

set_printoptions(precision=2)
print ("\nRescaled data:\n", data_rescaled [0:5])

Production

Rescaled data:
[
   [ 0.64  0.85  0.15  0.91 -0.69  0.2   0.47  1.43  1.37]
   [-0.84 -1.12 -0.16  0.53 -0.69 -0.68 -0.37 -0.19 -0.73]
   [ 1.23  1.94 -0.26 -1.29 -0.69 -1.1   0.6  -0.11  1.37]
   [-0.84 -1.   -0.16  0.15  0.12 -0.49 -0.92 -1.04 -0.73]
   [-1.14  0.5  -1.5   0.91  0.77  1.41  5.48 -0.02  1.37]
]

Étiquetage des données

Nous avons discuté de l'importance de bonnes fata pour les algorithmes ML ainsi que de certaines techniques pour pré-traiter les données avant de les envoyer aux algorithmes ML. Un autre aspect à cet égard est l'étiquetage des données. Il est également très important d'envoyer les données à des algorithmes de ML ayant un étiquetage approprié. Par exemple, en cas de problèmes de classification, de nombreuses étiquettes sous forme de mots, de nombres, etc. sont présentes sur les données.

Qu'est-ce que l'encodage d'étiquettes?

La plupart des fonctions sklearn s'attendent à ce que les données portent des étiquettes numériques plutôt que des étiquettes de mots. Par conséquent, nous devons convertir ces étiquettes en étiquettes numériques. Ce processus est appelé encodage d'étiquettes. Nous pouvons effectuer le codage d'étiquettes des données à l'aide de la fonction LabelEncoder () de la bibliothèque Python scikit-learn.

Exemple

Dans l'exemple suivant, le script Python effectuera le codage de l'étiquette.

Tout d'abord, importez les bibliothèques Python requises comme suit -

import numpy as np
from sklearn import preprocessing

Maintenant, nous devons fournir les étiquettes d'entrée comme suit -

input_labels = ['red','black','red','green','black','yellow','white']

La prochaine ligne de code créera l'encodeur d'étiquette et l'entraînera.

encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

Les prochaines lignes de script vérifieront les performances en encodant la liste ordonnée aléatoire -

test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
print("Encoded values =", list(encoded_values))
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)

Nous pouvons obtenir la liste des valeurs encodées à l'aide du script python suivant -

print("\nEncoded values =", encoded_values)
print("\nDecoded labels =", list(decoded_list))

Production

Labels = ['green', 'red', 'black']
Encoded values = [1, 2, 0]
Encoded values = [3, 0, 4, 1]
Decoded labels = ['white', 'black', 'yellow', 'green']