Preprocesamiento de datos: aprendizaje automático
Este artículo es la continuación del anterior: Introducción al aprendizaje automático .
El preprocesamiento de datos es un paso crucial en el aprendizaje automático, y es importante convertir todos los valores de cadena de datos en valores numéricos para que la computadora pueda comprender y aprender su patrón, y así poder predecir un resultado con una entrada determinada.
En este artículo, desglosaremos cada paso del preprocesamiento de datos con un ejemplo usando scikit-learn. En general, el preprocesamiento de datos consta de los siguientes pasos:
1. Importación de datos
2. Tratar con datos faltantes
3. Codificación de datos categóricos
4. División de datos
5. Escalado de funciones
Antes de comenzar, las tres bibliotecas más importantes que usamos en el aprendizaje automático son: 1. NumPy, 2. Pandas, 3. Matplotlib.
Numpy se considera la columna vertebral de la ciencia de datos, domina la computación numérica en python. Es la base para convertir los datos en una serie de números.
Pandas es una herramienta de análisis de datos y utiliza la idea de DataFrame, ayuda a preparar los datos sin procesar para el aprendizaje automático.
Matplotlib es una biblioteca de gráficos que se usa ampliamente en Data Science, es una biblioteca de gráficos que nos permite convertir nuestros datos en gráficos o figuras.
Estas tres bibliotecas se importan a través de:
import numpy as py
import pandas as pd
import matplotlib.pyplot as plt
Los datos se importan usando Pandas, generalmente de la siguiente manera:
df = pd.read_csv('data.csv')
Como Machine Learning separa las variables de función y las variables de predicción (columna que queremos predecir) como X e y respectivamente, se puede dividir de las siguientes maneras, siendo X las variables de función e y la columna que queremos predecir :
X = df.drop('Purchased', axis=1).values
y = df['Purchased'].values
X = df.iloc[:, :-1].values # -> [rows, columns]
y = df.iloc[:, -1].values
Es importante lidiar con los datos que faltan en el conjunto de datos, ya que pueden afectar en gran medida el proceso de entrenamiento de la computadora y, por lo tanto, afectar la predicción.
En general, si un conjunto de datos es grande, siempre es mejor eliminar la fila completa de todas las filas con datos faltantes. Por ejemplo, eliminar 1000 filas de datos dentro de 100 000 filas de datos es solo el 1 % del conjunto de datos total.
Sin embargo, si este no es el caso, tenemos que completar los valores que faltan para evitar pérdidas de información.
Hay varias formas de completar los valores que faltan, y las formas más comunes son completar los valores por 1. promedio 2. mediana 3. valores más frecuentes (para datos relacionados con la frecuencia).
Rellenar los valores con la mediana es muy útil, ya que evita la interferencia de valores atípicos extremos , ya que los valores atípicos extremos pueden interferir con el promedio de todo el conjunto de datos.
Completar los valores con el promedio es una de las formas más clásicas y, en el siguiente ejemplo, demostraré cómo llenar los valores que faltan con el promedio.
Para completar los valores que faltan, utilizamos un marco de aprendizaje automático: Scikit-Learn . Es el marco que se usa más ampliamente en el campo del aprendizaje automático, con muchas funciones integradas disponibles.
Tomando el siguiente conjunto de datos como ejemplo, podemos completar los valores faltantes con la media por:
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
> X[:, 1:3] significa seleccionar TODAS las filas de datos y las columnas 'Edad' y 'Salario' -> [Filas, Columnas].
Codificación de datos categóricos
Para convertir datos categóricos en datos numéricos, tenemos que codificarlos. Sin embargo, simplemente asignar un código numérico como 0, 1, 2 no es lo ideal. Usando el conjunto de datos anterior con "País" como ejemplo, al asignar 0 a Francia, 1 a España, 2 a Alemania, la computadora pensará que existe una "correlación de orden" con este valor, por lo que no es ideal, y nosotros quiere prevenirlo.
Para codificar datos categóricos, podemos usar OneHotEncoding proporcionado por Scikit-Learn . Como se muestra en el ejemplo anterior, la columna del país se convertirá en 3 columnas diferentes (un total de 3 países). Por ejemplo, Francia — vector(1,0,0) y Alemania siendo (0,1,0), etc.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
# For ColumnTransformer, the argument=[('name', EncoderClass, Column of X)], remainder='what to do for columns not encoded'
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(X)) # Does fit & transform columns at the same time & force to np array type
Es crucial separar los datos en 1. conjunto de entrenamiento 2. conjunto de prueba y, a veces, conjunto de validación. Esto se debe a que queremos que nuestra computadora aprenda los patrones de nuestros datos del conjunto de entrenamiento y evalúe el conjunto de prueba (el conjunto que la computadora no ha visto antes) para ver si la computadora está aprendiendo bien o correctamente.
Para hacerlo, usamos:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Escalado de características
Nota: No todos los modelos de aprendizaje automático requieren escalado de características, pero algunos .
El escalado de características consiste en volver a escalar nuestras variables de características de los datos en la misma escala, esto evitará que algunas características estén más dominadas que otras características, o que los modelos de ML no las consideren.
Las dos formas más comunes son: 1. Estandarización 2. Normalización .
Estandarización : restar cada valor de la característica por la media de todos los valores de la característica y dividir por la desviación estándar.
Normalización : restando cada valor de la característica por el mínimo de todos los valores, dividiendo por (diferencia de máximo y mínimo de la característica).
¿Cuál aplicar?
Normalizationse recomienda cuando se tiene unnormal distributionen la mayoría de las características. (situación específica)Standardizationall the timefunciona bien (vaya por la estandarización, ya que siempre funciona bien en el proceso de capacitación)
No tenemos que solicitar:
- Valores binarios
- Ecuaciones con coeficientes de las mismas escalas
- Valores entre 0 y 1
PERO, ajuste solo usando el conjunto de entrenamiento (escalador) , para tratar el conjunto de prueba como un conjunto nuevo y does not contributepresentar la fórmula de escala.
# Fit will just get the mean & s.d. of each of the features.
# Transform will apply the formula, and actually manipulate the values.
from sklearn.preprocessing import StandardScaler # Standardization
sc = StandardScaler()
X_train[:, 3:] = sc.fit_transform(X_train[:, 3:])
# We need to apply the SAME scaler on training set onto test set
X_test[:, 3:] = sc.transform(X_test[:, 3:])

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































