El preprocesamiento se refiere a las transformaciones aplicadas a nuestros datos antes de alimentarlos al algoritmo. El preprocesamiento de datos es una técnica que se utiliza para convertir los datos sin procesar en un conjunto de datos limpio. En otras palabras, cada vez que los datos se recopilan de diferentes fuentes, se recopilan en formato bruto, lo que no es factible para el análisis.
Necesidad de preprocesamiento de datos
- Para lograr mejores resultados del modelo aplicado en proyectos de Machine Learning, el formato de los datos debe ser adecuado. Algunos modelos de aprendizaje automático específicos necesitan información en un formato específico, por ejemplo, el algoritmo de bosque aleatorio no admite valores nulos, por lo tanto, para ejecutar el algoritmo de bosque aleatorio, los valores nulos deben administrarse desde el conjunto de datos sin procesar original.
- Otro aspecto es que el conjunto de datos debe formatearse de tal manera que se ejecute más de un algoritmo de Machine Learning y Deep Learning en un conjunto de datos, y se elija el mejor de ellos.
Este artículo contiene 3 técnicas diferentes de preprocesamiento de datos para el aprendizaje automático.
El conjunto de datos de diabetes de los indios Pima se utiliza en cada técnica.
Este es un problema de clasificación binaria donde todos los atributos son numéricos y tienen diferentes escalas.
Es un gran ejemplo de un conjunto de datos que puede beneficiarse del procesamiento previo.
Puede encontrar este conjunto de datos en la página web del repositorio de aprendizaje automático de UCI .
Tenga en cuenta que es posible que el programa no se ejecute en el IDE de Geeksforgeeks, pero puede ejecutarse fácilmente en su intérprete de python local, siempre que haya instalado las bibliotecas necesarias.
1. Cambiar la escala de datos
- Cuando nuestros datos se componen de atributos con diferentes escalas, muchos algoritmos de aprendizaje automático pueden beneficiarse al cambiar la escala de los atributos para que todos tengan la misma escala.
- Esto es útil para los algoritmos de optimización utilizados en el núcleo de los algoritmos de aprendizaje automático, como el descenso de gradiente.
- También es útil para algoritmos que ponderan entradas como regresión y redes neuronales y algoritmos que usan medidas de distancia como K-vecinos más cercanos.
- Podemos cambiar la escala de sus datos usando scikit-learn usando la clase MinMaxScaler .
Código: Código Python para Reescalar datos (entre 0 y 1)
Python
# importing libraries import pandas import scipy import numpy from sklearn.preprocessing import MinMaxScaler # data set link url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" # data parameters names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] # preparating of dataframe using the data at given link and defined columns list dataframe = pandas.read_csv(url, names = names) array = dataframe.values # separate array into input and output components X = array[:,0:8] Y = array[:,8] # initialising the MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) # learning the statistical parameters for each of the data and transforming rescaledX = scaler.fit_transform(X) # summarize transformed data numpy.set_printoptions(precision=3) print(rescaledX[0:5,:])
Después de cambiar la escala, vea que todos los valores están en el rango entre 0 y 1.
Producción:
[[ 0.353 0.744 0.59 0.354 0.0 0.501 0.234 0.483] [ 0.059 0.427 0.541 0.293 0.0 0.396 0.117 0.167] [ 0.471 0.92 0.525 0. 0.0 0.347 0.254 0.183] [ 0.059 0.447 0.541 0.232 0.111 0.419 0.038 0.0 ] [ 0.0 0.688 0.328 0.354 0.199 0.642 0.944 0.2 ]]
2. Binarizar datos (hacer binario)
- Podemos transformar nuestros datos utilizando un umbral binario. Todos los valores por encima del umbral se marcan con 1 y todos los iguales o inferiores se marcan con 0.
- Esto se llama binarización de sus datos o umbral de sus datos. Puede ser útil cuando tiene probabilidades de querer hacer valores nítidos. También es útil cuando la ingeniería de funciones y desea agregar nuevas funciones que indiquen algo significativo.
- Podemos crear nuevos atributos binarios en Python usando scikit-learn con la clase Binarizer .
Código: código de Python para binarización
Python
# import libraries from sklearn.preprocessing import Binarizer import pandas import numpy # data set link url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" # data parameters names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] # preparating of dataframe using the data at given link and defined columns list dataframe = pandas.read_csv(url, names = names) array = dataframe.values # separate array into input and output components X = array[:, 0:8] Y = array[:, 8] binarizer = Binarizer(threshold = 0.0).fit(X) binaryX = binarizer.transform(X) # summarize transformed data numpy.set_printoptions(precision = 3) print(binaryX[0:5,:])
Podemos ver que todos los valores iguales o menores que 0 se marcan con 0 y todos los que están por encima de 0 se marcan con 1.
Producción:
[[ 1. 1. 1. 1. 0. 1. 1. 1.] [ 1. 1. 1. 1. 0. 1. 1. 1.] [ 1. 1. 1. 0. 0. 1. 1. 1.] [ 1. 1. 1. 1. 1. 1. 1. 1.] [ 0. 1. 1. 1. 1. 1. 1. 1.]]
3. Estandarizar datos
- La estandarización es una técnica útil para transformar atributos con una distribución gaussiana y diferentes medias y desviaciones estándar en una distribución gaussiana estándar con una media de 0 y una desviación estándar de 1.
- Podemos estandarizar datos usando scikit-learn con la clase StandardScaler .
Código: código de Python para estandarizar datos (0 media, 1 desv. estándar)
Python
# importing libraries from sklearn.preprocessing import StandardScaler import pandas import numpy # data set link url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" # data parameters names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] # preparating of dataframe using the data at given link and defined columns list dataframe = pandas.read_csv(url, names = names) array = dataframe.values # separate array into input and output components X = array[:, 0:8] Y = array[:, 8] scaler = StandardScaler().fit(X) rescaledX = scaler.transform(X) # summarize transformed data numpy.set_printoptions(precision = 3) print(rescaledX[0:5,:])
Los valores de cada atributo ahora tienen un valor medio de 0 y una desviación estándar de 1.
Producción:
[[ 0.64 0.848 0.15 0.907 -0.693 0.204 0.468 1.426] [-0.845 -1.123 -0.161 0.531 -0.693 -0.684 -0.365 -0.191] [ 1.234 1.944 -0.264 -1.288 -0.693 -1.103 0.604 -0.106] [-0.845 -0.998 -0.161 0.155 0.123 -0.494 -0.921 -1.042] [-1.142 0.504 -1.505 0.907 0.766 1.41 5.485 -0.02 ]]
Referencias:
- https://www.analyticsvidhya.com/blog/2016/07/practical-guide-data-preprocessing-python-scikit-learn/
- https://www.xenonstack.com/blog/data-preprocessing-data-wrangling-in-machine-learning-deep-learning
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA