IA con Python: preparación de datos

Ya hemos estudiado algoritmos de aprendizaje automático supervisados ​​y no supervisados. Estos algoritmos requieren datos formateados para iniciar el proceso de entrenamiento. Debemos preparar o formatear los datos de cierta manera para que se puedan suministrar como entrada a los algoritmos de ML.

Este capítulo se centra en la preparación de datos para algoritmos de aprendizaje automático.

Procesamiento previo de los datos

En nuestra vida diaria, tratamos con una gran cantidad de datos, pero estos datos están en forma cruda. Para proporcionar los datos como entrada de los algoritmos de aprendizaje automático, debemos convertirlos en datos significativos. Ahí es donde entra en escena el preprocesamiento de datos. En otras palabras simples, podemos decir que antes de proporcionar los datos a los algoritmos de aprendizaje automático, necesitamos preprocesar los datos.

Pasos de procesamiento previo de datos

Siga estos pasos para preprocesar los datos en Python:

Step 1 − Importing the useful packages - Si usamos Python, este sería el primer paso para convertir los datos a un formato determinado, es decir, preprocesar. Se puede hacer de la siguiente manera:

import numpy as np
import sklearn.preprocessing

Aquí hemos utilizado los siguientes dos paquetes:

  • NumPy - Básicamente, NumPy es un paquete de procesamiento de matrices de propósito general diseñado para manipular de manera eficiente matrices multidimensionales de registros arbitrarios sin sacrificar demasiada velocidad para matrices multidimensionales pequeñas.

  • Sklearn.preprocessing - Este paquete proporciona muchas funciones de utilidad comunes y clases de transformadores para cambiar los vectores de características sin procesar en una representación más adecuada para los algoritmos de aprendizaje automático.

Step 2 − Defining sample data - Después de importar los paquetes, necesitamos definir algunos datos de muestra para que podamos aplicar técnicas de preprocesamiento en esos datos. Ahora definiremos los siguientes datos de muestra:

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 - En este paso, necesitamos aplicar alguna de las técnicas de preprocesamiento.

La siguiente sección describe las técnicas de preprocesamiento de datos.

Técnicas para el preprocesamiento de datos

Las técnicas para el preprocesamiento de datos se describen a continuación:

Binarización

Esta es la técnica de preprocesamiento que se utiliza cuando necesitamos convertir nuestros valores numéricos en valores booleanos. Podemos usar un método incorporado para binarizar los datos de entrada, digamos, usando 0.5 como el valor umbral de la siguiente manera:

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

Ahora, después de ejecutar el código anterior, obtendremos el siguiente resultado, todos los valores por encima de 0.5 (valor de umbral) se convertirían a 1 y todos los valores por debajo de 0.5 se convertirían a 0.

Binarized data

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

Eliminación media

Es otra técnica de preprocesamiento muy común que se utiliza en el aprendizaje automático. Básicamente, se utiliza para eliminar la media del vector de características de modo que cada característica esté centrada en cero. También podemos eliminar el sesgo de las características en el vector de características. Para aplicar la técnica de preprocesamiento de eliminación media en los datos de muestra, podemos escribir el código Python que se muestra a continuación. El código mostrará la desviación media y estándar de los datos de entrada:

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

Obtendremos el siguiente resultado después de ejecutar las líneas de código anteriores:

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

Ahora, el siguiente código eliminará la desviación media y estándar de los datos de entrada:

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

Obtendremos el siguiente resultado después de ejecutar las líneas de código anteriores:

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

Escalada

Es otra técnica de preprocesamiento de datos que se utiliza para escalar los vectores de características. Es necesario escalar los vectores de características porque los valores de cada característica pueden variar entre muchos valores aleatorios. En otras palabras, podemos decir que la escala es importante porque no queremos que ninguna característica sea sintéticamente grande o pequeña. Con la ayuda del siguiente código de Python, podemos escalar nuestros datos de entrada, es decir, vector de características -

# 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)

Obtendremos el siguiente resultado después de ejecutar las líneas de código anteriores:

Min max scaled data

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

Normalización

Es otra técnica de preprocesamiento de datos que se utiliza para modificar los vectores de características. Este tipo de modificación es necesaria para medir los vectores de características en una escala común. Los siguientes son dos tipos de normalización que se pueden utilizar en el aprendizaje automático:

L1 Normalization

También se le conoce como Least Absolute Deviations. Este tipo de normalización modifica los valores de modo que la suma de los valores absolutos sea siempre hasta 1 en cada fila. Se puede implementar en los datos de entrada con la ayuda del siguiente código Python:

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

La línea de código anterior genera la siguiente salida & 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

También se le conoce como least squares. Este tipo de normalización modifica los valores para que la suma de los cuadrados sea siempre hasta 1 en cada fila. Se puede implementar en los datos de entrada con la ayuda del siguiente código Python:

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

La línea de código anterior generará el siguiente resultado:

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 ]]

Etiquetar los datos

Ya sabemos que los datos en un formato determinado son necesarios para los algoritmos de aprendizaje automático. Otro requisito importante es que los datos deben etiquetarse correctamente antes de enviarlos como entrada de algoritmos de aprendizaje automático. Por ejemplo, si hablamos de clasificación, hay muchas etiquetas en los datos. Esas etiquetas tienen forma de palabras, números, etc. Funciones relacionadas con el aprendizaje automático ensklearnEspere que los datos tengan etiquetas numéricas. Por lo tanto, si los datos están en otra forma, deben convertirse a números. Este proceso de transformar las etiquetas de palabras en forma numérica se denomina codificación de etiquetas.

Pasos de codificación de etiquetas

Siga estos pasos para codificar las etiquetas de datos en Python:

Step1 − Importing the useful packages

Si usamos Python, este sería el primer paso para convertir los datos a cierto formato, es decir, preprocesar. Se puede hacer de la siguiente manera:

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Después de importar los paquetes, necesitamos definir algunas etiquetas de muestra para que podamos crear y entrenar el codificador de etiquetas. Ahora definiremos las siguientes etiquetas de muestra:

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

Step 3 − Creating & training of label encoder object

En este paso, necesitamos crear el codificador de etiquetas y entrenarlo. El siguiente código de Python ayudará a hacer esto:

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

Lo siguiente sería el resultado después de ejecutar el código Python anterior:

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Este paso se puede utilizar para comprobar el rendimiento codificando la lista ordenada aleatoriamente. El siguiente código de Python se puede escribir para hacer lo mismo:

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

Las etiquetas se imprimirían de la siguiente manera:

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

Ahora, podemos obtener la lista de valores codificados, es decir, etiquetas de palabras convertidas en números de la siguiente manera:

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

Los valores codificados se imprimirían de la siguiente manera:

Encoded values = [1, 2, 0]

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

Este paso se puede utilizar para comprobar el rendimiento decodificando el conjunto aleatorio de números. El siguiente código de Python se puede escribir para hacer lo mismo:

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

Ahora, los valores codificados se imprimirían de la siguiente manera:

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

Ahora, los valores decodificados se imprimirían de la siguiente manera:

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

Datos etiquetados v / s sin etiqueta

Los datos sin etiquetar consisten principalmente en muestras de objetos naturales o creados por humanos que se pueden obtener fácilmente del mundo. Incluyen audio, video, fotos, artículos de noticias, etc.

Por otro lado, los datos etiquetados toman un conjunto de datos no etiquetados y aumentan cada parte de esos datos no etiquetados con alguna etiqueta o etiqueta o clase que sea significativa. Por ejemplo, si tenemos una foto, entonces la etiqueta se puede poner en función del contenido de la foto, es decir, es una foto de un niño o una niña o un animal o cualquier otra cosa. Etiquetar los datos requiere experiencia humana o juicio sobre un dato determinado sin etiquetar.

Hay muchos escenarios en los que los datos no etiquetados son abundantes y fáciles de obtener, pero los datos etiquetados a menudo requieren que un humano / experto los anote. El aprendizaje semi-supervisado intenta combinar datos etiquetados y no etiquetados para construir mejores modelos.