Web Analytics
Avisos
Vaciar todo

¡Bienvenido a zonaia 😀!


Un foro de ayuda para aprender a crear chatbots.


Aprende ManyChat, Chatfuel y Dialogflow.


¡No esperes más y únete a nosotros hoy!


Preprocesamiento de datos, an谩lisis y visualizaci贸n  

 

Leonardo Mayorga
(@admin)
Miembro Admin
Registrado: hace 2 a帽os
Respuestas: 474
25/09/2018 8:46 pm  

En el mundo real, generalmente encontramos muchos datos en bruto que no son aptos para ser procesados 鈥嬧媐谩cilmente por algoritmos de aprendizaje autom谩tico. Necesitamos preprocesar los datos brutos antes de alimentarlos a varios algoritmos de aprendizaje autom谩tico. Este cap铆tulo analiza varias t茅cnicas para preprocesar datos en el aprendizaje autom谩tico con Python.

Preprocesamiento de datos

En esta secci贸n, d茅jenos explicarle c贸mo preprocesamos datos en Python.

Inicialmente, abra un archivo con una extensi贸n .py, por ejemplo, el archivo prefoo.py, en un editor de texto como el bloc de notas.

A continuaci贸n, agregue la siguiente pieza de c贸digo a este archivo:

import numpy as np

from sklearn import preprocessing

#Importamos un par de paquetes. Vamos a crear algunos datos de muestra y agregar la l铆nea a este archivo:

input_data = np.array([[3, -1.5, 3, -6.4], [0, 3, -1.3, 4.1], [1, 2.3, -2.9, -4.3]])

Ahora estamos listos para operar con estos datos.

T茅cnicas de preprocesamiento

Los datos pueden preprocesarse usando varias t茅cnicas, como se explica aqu铆:

Eliminaci贸n media

Implica eliminar la media de cada caracter铆stica para que se centre en cero. La eliminaci贸n promedio ayuda a eliminar cualquier sesgo de las caracter铆sticas.

Puede usar el siguiente c贸digo para eliminaci贸n promedio:

data_standardized = preprocessing.scale(input_data)
print "\nMean = ", data_standardized.mean(axis = 0)
print "Std deviation = ", data_standardized.std(axis = 0)

Ahora ejecuta el siguiente comando en la terminal:

$ python prefoo.py

Puede observar el siguiente resultado:

Mean = [ 5.55111512e-17 -3.70074342e-17 0.00000000e+00 -1.85037171e-17]
Std deviation = [1. 1. 1. 1.]

Observe que en la salida, la media es casi 0 y la desviaci贸n est谩ndar es 1.

Escalada

Los valores de cada caracter铆stica en un punto de datos pueden variar entre valores aleatorios. Entonces, es importante escalarlos para que coincida con las reglas especificadas.

Puede usar el siguiente c贸digo para escalar:

data_scaler = preprocessing.MinMaxScaler(feature_range = (0, 1))
data_scaled = data_scaler.fit_transform(input_data)
print "\nMin max scaled data = ", data_scaled

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

Min max scaled data = [ [ 1. 0. 1. 0. ]
[ 0. 1. 0.27118644 1. ]
[ 0.33333333 0.84444444 0. 0.2 ]
]

Tenga en cuenta que todos los valores se han escalado entre el rango dado.

Normalizaci贸n

La normalizaci贸n implica ajustar los valores en el vector de caracter铆sticas para medirlos en una escala com煤n. Aqu铆, los valores de un vector de caracter铆sticas se ajustan de modo que suman hasta 1. Agregamos las siguientes l铆neas al archivo prefoo.py, usando el siguiente c贸digo para la normalizaci贸n:

data_normalized = preprocessing.normalize(input_data, norm = 'l1')
print "\nL1 normalized data = ", data_normalized

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

L1 normalized data = [ [ 0.21582734 -0.10791367 0.21582734 -0.46043165]
[ 0. 0.35714286 -0.1547619 0.48809524]
[ 0.0952381 0.21904762 -0.27619048 -0.40952381]
]

La normalizaci贸n se utiliza para garantizar que los puntos de datos no se incrementen debido a la naturaleza de sus caracter铆sticas.

Binarizaci贸n

La binarizaci贸n se usa para convertir un vector de caracter铆sticas num茅ricas en un vector booleano. Puede usar el siguiente c贸digo para la binarizaci贸n:

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

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

Binarized data = [[ 1. 0. 1. 0.]
[ 0. 1. 0. 1.]
[ 0. 1. 0. 0.]
]

Esta t茅cnica es 煤til cuando tenemos conocimiento previo de los datos.

Una codificaci贸n caliente

Puede ser necesario tratar con valores num茅ricos que son pocos y dispersos, y es posible que no necesite almacenar estos valores. En tales situaciones, puede usar la t茅cnica One Hot Encoding.

Si el n煤mero de valores distintos es k, transformar谩 la caracter铆stica en un vector de k dimensiones donde solo un valor es 1 y todos los dem谩s valores son 0 .

Puede usar el siguiente c贸digo para una codificaci贸n en caliente:

encoder = preprocessing.OneHotEncoder()
encoder.fit([ [0, 2, 1, 12],
[1, 3, 5, 3],
[2, 3, 2, 12],
[1, 2, 4, 3]
])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print "\nEncoded vector =", encoded_vector

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

Encoded vector = [[ 0. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]]

En el ejemplo anterior, consideremos la tercera caracter铆stica en cada vector de caracter铆sticas. Los valores son 1, 5, 2 y 4.

Aqu铆 hay cuatro valores separados, lo que significa que el vector codificado en caliente ser谩 de longitud 4. Si queremos codificar el valor 5, ser谩 un vector [0, 1, 0, 0]. Solo un valor puede ser 1 en este vector. El segundo elemento es 1, lo que indica que el valor es 5.

Codificaci贸n de etiquetas

En el aprendizaje supervisado, en su mayor铆a nos encontramos con una variedad de etiquetas que pueden ser en forma de n煤meros o palabras. Si son n煤meros, entonces pueden ser utilizados directamente por el algoritmo. Sin embargo, muchas veces, las etiquetas deben estar en forma legible. Por lo tanto, los datos de entrenamiento generalmente est谩n etiquetados con palabras.

La codificaci贸n de etiquetas se refiere a cambiar las etiquetas de las palabras en n煤meros para que los algoritmos puedan entender c贸mo trabajar en ellas. Perm铆tanos entender en detalle c贸mo realizar la codificaci贸n de la etiqueta.

Cree un nuevo archivo de Python e importe el paquete de preprocesamiento:

from sklearn import preprocessing
label_encoder = preprocessing.LabelEncoder()
input_classes = ['suzuki', 'ford', 'suzuki', 'toyota', 'ford', 'bmw']
label_encoder.fit(input_classes)
print "\nClass mapping:"
for i, item in enumerate(label_encoder.classes_):
print item, '-->', i

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

Class mapping:
bmw --> 0
ford --> 1
suzuki --> 2
toyota --> 3

Como se muestra en la salida anterior, las palabras se han cambiado a n煤meros indexados en 0. Ahora, cuando tratamos con un conjunto de etiquetas, podemos transformarlas de la siguiente manera:

labels = ['toyota', 'ford', 'suzuki']
encoded_labels = label_encoder.transform(labels)
print "\nLabels =", labels
print "Encoded labels =", list(encoded_labels)

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

Labels = ['toyota', 'ford', 'suzuki']
Encoded labels = [3, 1, 2]

Esto es m谩s eficiente que mantener manualmente el mapeo entre palabras y n煤meros. Puede verificar transformando los n煤meros en etiquetas de palabras como se muestra en el c贸digo aqu铆:

encoded_labels = [3, 2, 0, 2, 1]
decoded_labels = label_encoder.inverse_transform(encoded_labels)
print "\nEncoded labels =", encoded_labels
print "Decoded labels =", list(decoded_labels)

Ahora ejecuta el c贸digo y puedes observar la siguiente salida:

Encoded labels = [3, 2, 0, 2, 1]
Decoded labels = ['toyota', 'suzuki', 'bmw', 'suzuki', 'ford']

Desde la salida, puede observar que el mapeo se conserva perfectamente.

Para continuar viendo el resto de contenido por favor Crea Una Cuenta o Inicia Sesi贸n


Citar
Compartir:
Sitio web hecho con 鉂 para el mundo