AI avec Python - Préparation des données

Nous avons déjà étudié des algorithmes d'apprentissage automatique supervisés et non supervisés. Ces algorithmes nécessitent des données formatées pour démarrer le processus de formation. Nous devons préparer ou formater les données d'une certaine manière afin qu'elles puissent être fournies en tant qu'entrée d'algorithmes de ML.

Ce chapitre se concentre sur la préparation des données pour les algorithmes d'apprentissage automatique.

Prétraitement des données

Dans notre vie quotidienne, nous traitons beaucoup de données mais ces données sont sous forme brute. Pour fournir les données en tant qu'entrée d'algorithmes d'apprentissage automatique, nous devons les convertir en données significatives. C'est là que le prétraitement des données entre en scène. En d'autres termes simples, nous pouvons dire qu'avant de fournir les données aux algorithmes d'apprentissage automatique, nous devons prétraiter les données.

Étapes de prétraitement des données

Suivez ces étapes pour prétraiter les données en Python -

Step 1 − Importing the useful packages - Si nous utilisons Python, ce serait la première étape pour convertir les données dans un certain format, c'est-à-dire le prétraitement. Cela peut être fait comme suit -

import numpy as np
import sklearn.preprocessing

Ici, nous avons utilisé les deux packages suivants -

  • NumPy - Fondamentalement, NumPy est un package de traitement de tableau à usage général conçu pour manipuler efficacement de grands tableaux multidimensionnels d'enregistrements arbitraires sans sacrifier trop de vitesse pour de petits tableaux multidimensionnels.

  • Sklearn.preprocessing - Ce package fournit de nombreuses fonctions utilitaires et classes de transformateurs communes pour changer les vecteurs de caractéristiques bruts en une représentation plus adaptée aux algorithmes d'apprentissage automatique.

Step 2 − Defining sample data - Après avoir importé les packages, nous devons définir des exemples de données afin de pouvoir appliquer des techniques de prétraitement à ces données. Nous allons maintenant définir les exemples de données suivants -

input_data = np.array([2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8])

Step3 − Applying preprocessing technique - Dans cette étape, nous devons appliquer l'une des techniques de prétraitement.

La section suivante décrit les techniques de prétraitement des données.

Techniques de prétraitement des données

Les techniques de prétraitement des données sont décrites ci-dessous -

Binarisation

C'est la technique de prétraitement qui est utilisée lorsque nous devons convertir nos valeurs numériques en valeurs booléennes. Nous pouvons utiliser une méthode intégrée pour binariser les données d'entrée, par exemple en utilisant 0,5 comme valeur de seuil de la manière suivante -

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

Maintenant, après avoir exécuté le code ci-dessus, nous obtiendrons la sortie suivante, toutes les valeurs supérieures à 0,5 (valeur seuil) seraient converties en 1 et toutes les valeurs inférieures à 0,5 seraient converties en 0.

Binarized data

[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]

Élimination moyenne

C'est une autre technique de prétraitement très courante qui est utilisée dans l'apprentissage automatique. Fondamentalement, il est utilisé pour éliminer la moyenne du vecteur d'entités de sorte que chaque entité soit centrée sur zéro. Nous pouvons également supprimer le biais des entités dans le vecteur de caractéristiques. Pour appliquer la technique de prétraitement de suppression moyenne sur les exemples de données, nous pouvons écrire le code Python ci-dessous. Le code affichera la moyenne et l'écart type des données d'entrée -

print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))

Nous obtiendrons la sortie suivante après avoir exécuté les lignes de code ci-dessus -

Mean = [ 1.75       -1.275       2.2]
Std deviation = [ 2.71431391  4.20022321  4.69414529]

Maintenant, le code ci-dessous supprimera la moyenne et l'écart type des données d'entrée -

data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))

Nous obtiendrons la sortie suivante après avoir exécuté les lignes de code ci-dessus -

Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1.             1.             1.]

Mise à l'échelle

Il s'agit d'une autre technique de prétraitement des données utilisée pour mettre à l'échelle les vecteurs de caractéristiques. La mise à l'échelle des vecteurs d'entités est nécessaire car les valeurs de chaque entité peuvent varier entre de nombreuses valeurs aléatoires. En d'autres termes, nous pouvons dire que la mise à l'échelle est importante car nous ne voulons pas qu'une fonctionnalité soit synthétiquement grande ou petite. Avec l'aide du code Python suivant, nous pouvons faire la mise à l'échelle de nos données d'entrée, c'est-à-dire, vecteur de caractéristiques -

# Min max scaling

data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)

Nous obtiendrons la sortie suivante après avoir exécuté les lignes de code ci-dessus -

Min max scaled data

[ [ 0.48648649  0.58252427   0.99122807]
[   0.          1.           0.81578947]
[   0.27027027  0.           1.        ]
[   1.          0. 99029126  0.        ]]

Normalisation

C'est une autre technique de prétraitement des données utilisée pour modifier les vecteurs de caractéristiques. Un tel type de modification est nécessaire pour mesurer les vecteurs de caractéristiques à une échelle commune. Les éléments suivants sont deux types de normalisation qui peuvent être utilisés dans l'apprentissage automatique -

L1 Normalization

Il est également appelé Least Absolute Deviations. Ce type de normalisation modifie les valeurs de sorte que la somme des valeurs absolues soit toujours jusqu'à 1 dans chaque ligne. Il peut être implémenté sur les données d'entrée à l'aide du code Python suivant -

# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)

La ligne de code ci-dessus génère la sortie suivante & miuns;

L1 normalized data:
[[ 0.22105263  -0.2          0.57894737]
[ -0.2027027    0.32432432   0.47297297]
[  0.03571429  -0.56428571   0.4       ]
[  0.42142857   0.16428571  -0.41428571]]

L2 Normalization

Il est également appelé least squares. Ce type de normalisation modifie les valeurs de sorte que la somme des carrés soit toujours jusqu'à 1 dans chaque ligne. Il peut être implémenté sur les données d'entrée à l'aide du code Python suivant -

# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)

La ligne de code ci-dessus générera la sortie suivante -

L2 normalized data:
[[ 0.33946114  -0.30713151   0.88906489]
[ -0.33325106   0.53320169   0.7775858 ]
[  0.05156558  -0.81473612   0.57753446]
[  0.68706914   0.26784051  -0.6754239 ]]

Étiquetage des données

Nous savons déjà que des données dans un certain format sont nécessaires pour les algorithmes d'apprentissage automatique. Une autre exigence importante est que les données doivent être correctement étiquetées avant de les envoyer en tant qu'entrée d'algorithmes d'apprentissage automatique. Par exemple, si nous parlons de classification, il y a beaucoup d'étiquettes sur les données. Ces étiquettes se présentent sous la forme de mots, de nombres, etc. Fonctions liées à l'apprentissage automatiquesklearnattendez-vous à ce que les données aient des étiquettes numériques. Par conséquent, si les données sont sous une autre forme, elles doivent être converties en nombres. Ce processus de transformation des étiquettes de mots en forme numérique est appelé encodage d'étiquettes.

Étapes de codage des étiquettes

Suivez ces étapes pour encoder les étiquettes de données en Python -

Step1 − Importing the useful packages

Si nous utilisons Python, ce serait la première étape pour convertir les données dans un certain format, c'est-à-dire le prétraitement. Cela peut être fait comme suit -

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Après avoir importé les packages, nous devons définir des exemples d'étiquettes afin de pouvoir créer et entraîner l'encodeur d'étiquettes. Nous allons maintenant définir les exemples d'étiquettes suivantes -

# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']

Step 3 − Creating & training of label encoder object

Dans cette étape, nous devons créer l'encodeur d'étiquette et l'entraîner. Le code Python suivant vous aidera à faire cela -

# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

Voici la sortie après l'exécution du code Python ci-dessus -

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Cette étape peut être utilisée pour vérifier les performances en codant la liste ordonnée aléatoire. Le code Python suivant peut être écrit pour faire de même -

# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)

Les étiquettes seraient imprimées comme suit -

Labels = ['green', 'red', 'black']

Maintenant, nous pouvons obtenir la liste des valeurs encodées, c'est-à-dire les étiquettes de mots converties en nombres comme suit -

print("Encoded values =", list(encoded_values))

Les valeurs encodées seraient imprimées comme suit -

Encoded values = [1, 2, 0]

Step 5 − Checking the performance by decoding a random set of numbers −

Cette étape peut être utilisée pour vérifier les performances en décodant l'ensemble aléatoire de nombres. Le code Python suivant peut être écrit pour faire de même -

# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)

Maintenant, les valeurs encodées seraient imprimées comme suit -

Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))

Maintenant, les valeurs décodées seraient imprimées comme suit -

Decoded labels = ['white', 'black', 'yellow', 'green']

Données v / s étiquetées sans étiquette

Les données non étiquetées consistent principalement en des échantillons d'objets naturels ou créés par l'homme qui peuvent facilement être obtenus dans le monde. Ils comprennent, audio, vidéo, photos, articles de presse, etc.

D'autre part, les données étiquetées prennent un ensemble de données non étiquetées et augmentent chaque élément de ces données non étiquetées avec une étiquette, une étiquette ou une classe qui est significative. Par exemple, si nous avons une photo, l'étiquette peut être apposée en fonction du contenu de la photo, c'est-à-dire qu'il s'agit d'une photo d'un garçon ou d'une fille ou d'un animal ou autre. L'étiquetage des données nécessite une expertise humaine ou un jugement sur un élément donné de données non étiquetées.

Il existe de nombreux scénarios où les données non étiquetées sont abondantes et faciles à obtenir, mais les données étiquetées nécessitent souvent un homme / un expert pour les annoter. L'apprentissage semi-supervisé tente de combiner des données étiquetées et non étiquetées pour créer de meilleurs modèles.