Carga de conjuntos de datos y preprocesamiento de datos.

Autor: Zen y el arte de la programación informática

1. Introducción

La carga de conjuntos de datos y el preprocesamiento de datos en el campo del aprendizaje automático siempre han sido un tema candente: ya sea aprendizaje supervisado o no supervisado, los datos originales deben convertirse en un formato que sea fácil de procesar para el aprendizaje automático, es decir, vectores de características, vectores de etiquetas o estructura de datos estructurados. Este artículo presenta este módulo en detalle.

En primer lugar, los conjuntos de datos suelen generarse a partir de diversas fuentes, como archivos, bases de datos, interfaces de red, etc. Luego, estos datos deben pasar por una serie de pasos de preprocesamiento, como limpieza, conversión, estandarización y normalización, para obtener un conjunto de datos de entrenamiento que sea más fácil de procesar. Entre ellos, también se deben considerar métodos como la partición de datos, el muestreo estratificado, la finalización de valores faltantes y la ingeniería de características.

Además, el marco de aprendizaje profundo también proporciona muchas funciones y clases de herramientas convenientes para el preprocesamiento de datos, como:

  • DataLoader: se utiliza para cargar conjuntos de datos y cargar de forma asincrónica a través de múltiples subprocesos.
  • Conjunto de datos: clase de conjunto de datos personalizada, que puede heredar la clase base para implementar su propia lógica.
  • DataAugmentation: herramienta de aumento de datos que se puede utilizar para ampliar el conjunto de entrenamiento.
  • FeatureExtractor: herramienta de extracción de características, que se puede utilizar para extraer vectores de características de imágenes, texto y otros datos.
  • LabelEncoder: codificador de etiquetas, utilizado para convertir variables categóricas en formato entero.
  • Tokenizer: se utiliza para segmentar datos de texto y convertir secuencias de texto en representaciones vectoriales.

Este artículo analiza principalmente los principios y el uso de las tecnologías anteriores.

2. Carga del conjunto de datos

2.1 Coincidencia de ruta de archivo

Durante el proceso de carga del conjunto de datos, el caso más sencillo es leer el archivo del directorio local. Simplemente especifique la lista de rutas de archivos directamente, como por ejemplo:

file_list = ['data/train.txt', 'data/test.txt'] # 假设文件已经存在

2.2 Coincidencia de ruta de carpeta

Otra forma es utilizar los archivos de toda la carpeta como parte del conjunto de datos. En este caso, puede utilizar la función walk() del módulo os para recorrer recursivamente el directorio y encontrar todas las rutas de los archivos. Luego elija si desea conservar el nombre de la carpeta u otra información (como el nombre del archivo, la etiqueta de la categoría, etc.) según las necesidades reales. Como sigue:

import os

def find_files(path):
    """查找给定目录下的所有文件"""
    files = []
    for root, dirs, file_names in os.walk(path):
        if len(dirs) > 0:
            print('Ignoring directory:', dirs)
        for name in file_names:
            path = os.path.join(root, name)
            files.append(path)
    return files

file_list = find_files('/path/to/dataset')
print(len(file_list), 'files found.')

2.3 formato HDF5

HDF5 es un formato de almacenamiento de datos universal basado en disco adecuado para muchos tipos de datos, incluidos conjuntos multidimensionales, tablas, imágenes, metadatos, etc. Para conjuntos de datos de aprendizaje automático con una organización de datos compleja, es más eficiente que el formato de texto sin formato y puede realizar fácilmente operaciones de preprocesamiento, como segmentación y compresión, en el conjunto de datos.

Cuando el conjunto de datos es grande, utilizar el formato HDF5 puede resultar muy ventajoso. Primero puede convertir el conjunto de datos al formato HDF5 y luego usar la API proporcionada por Python para leer los datos y ahorrar memoria. Para escribir en formato HDF5, puede usar la función to_hdf() en la biblioteca pandas, y para leerlo, puede usar la función read_hdf() en la biblioteca pandas.

Aquí hay un ejemplo:

import pandas as pd

# 将数据集保存成HDF5格式
df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
df.to_hdf('my_dataset.h5', key='df', mode='w')

# 从HDF5格式读取数据集
df = pd.read_hdf('my_dataset.h5', key='df')

El ejemplo anterior muestra cómo guardar y leer un conjunto de datos en formato HDF5.

3. Preprocesamiento de datos

El preprocesamiento de datos se refiere a operaciones como limpieza, conversión, estandarización y normalización de datos sin procesar para que sean más fáciles de comprender, analizar y procesar. Aquí presentaremos brevemente algunas técnicas de preprocesamiento comunes.

3.1 Partición de datos

La partición de datos se refiere a dividir el conjunto de datos original en un conjunto de entrenamiento, un conjunto de verificación y un conjunto de prueba de acuerdo con una determinada proporción. El enfoque habitual es dividirlo en una proporción de 7:1:2, es decir, el conjunto de entrenamiento representa el 70%, el conjunto de verificación representa el 10% y el conjunto de prueba representa el 20%. Esto permite el efecto de entrenamiento del modelo más estable y un ajuste y comparación de parámetros del modelo más precisos. Además, el conjunto de entrenamiento se puede dividir en múltiples subconjuntos para diferentes propósitos, como validación cruzada k veces, aprendizaje por transferencia, etc.

Hay dos métodos de partición de datos:

  1. División aleatoria: el método más simple es ordenar aleatoriamente el conjunto de datos por fila, seleccionar el primer 70% y el último 10% como conjunto de entrenamiento y verificación, y el primer 10% como conjunto de prueba.
  2. Partición ordinaria: el conjunto de datos también se puede dividir en varios subconjuntos según una determinada característica (como una marca de tiempo) o una variable de destino. Por ejemplo, el conjunto de datos se puede dividir por años y cada año corresponde a un subconjunto, o por ID de usuario y cada usuario corresponde a un subconjunto. Hacer esto ayuda a que la distribución de cada subconjunto sea lo más equilibrada posible y evita que algunos subconjuntos estén demasiado sesgados hacia una categoría.

3.2 Muestreo estratificado

El muestreo estratificado es una técnica comúnmente utilizada para garantizar que se muestree un número suficiente de cada categoría. Normalmente, el conjunto de entrenamiento debe estar completamente equilibrado, es decir, tener el mismo número de muestras para cada categoría. Sin embargo, los datos del mundo real a menudo no cumplen plenamente esta condición. El muestreo estratificado puede ayudar a resolver este problema.

La idea básica del muestreo estratificado es dividir el conjunto de datos original en varios subconjuntos, cada subconjunto contiene muestras de la misma categoría. Luego, se realiza un muestreo aleatorio ordinario en cada subconjunto para que cada categoría se muestree en una proporción suficientemente grande. Esto garantiza que la distribución de clases entre el conjunto de entrenamiento y el conjunto de validación sea similar. Existen muchos métodos de muestreo estratificado, los más comunes son los siguientes:

  1. Muestreo estratificado desigual: esta es una estrategia clásica de muestreo estratificado. La idea básica es dividir primero el conjunto de datos original en K subconjuntos en proporción y luego muestrear cada subconjunto con probabilidad uniforme para que cada categoría se muestree en una proporción suficientemente grande. La ventaja de este enfoque es que no hay sesgo entre los subconjuntos generados, pero la desventaja es que no permite que cada subconjunto refleje de forma independiente la verdadera distribución de datos.
  2. Muestreo estratificado consistente: el muestreo estratificado consistente es un método de muestreo estratificado más complejo. Su idea básica es muestrear cada categoría en el conjunto de datos original para que el número de muestras en cada categoría esté en K subconjuntos. La escala es la misma que en el conjunto de datos originales. Este método evita los problemas del muestreo estratificado desigual, pero como cada subconjunto contiene el mismo número de muestras, no puede reflejar la verdadera distribución de los datos.
  3. Muestreo estratificado monótono: el muestreo estratificado monótono es un nuevo método de muestreo estratificado. Su idea básica es dividir primero el conjunto de datos original en K subconjuntos en proporción y luego dividir cada subconjunto de acuerdo con el número y orden de las muestras de la misma categoría. para garantizar que el número de muestras de cada tipo en el conjunto de entrenamiento no varíe en más de 1.

3.3 Completar valores faltantes

A menudo faltan valores en el conjunto de datos, en este caso, se puede utilizar el método de finalización de valores faltantes para completar los valores faltantes. Hay tres métodos comunes:

  1. Eliminar muestras con valores faltantes: este es el método más simple y directo. Sin embargo, si hay demasiadas muestras, afectará la calidad del conjunto de datos.
  2. Método de llenado de modo: para variables con pocos valores atípicos, el modo se puede utilizar para completar los valores faltantes. Por ejemplo, complete los valores faltantes con la moda (el valor de muestra que ocurre con más frecuencia).
  3. Método de interpolación: para variables continuas, puede utilizar el método de interpolación para completar los valores faltantes. Por ejemplo, método de interpolación lineal, método de interpolación del vecino más cercano, etc.

3.4 Ingeniería de características

La ingeniería de funciones se refiere a la extracción de funciones efectivas de datos sin procesar para utilizarlas como entrada para modelos de aprendizaje automático. Las técnicas de ingeniería de características comúnmente utilizadas incluyen los siguientes aspectos:

  1. Características combinadas: la combinación de múltiples variables de baja dimensión en nuevas variables puede aumentar efectivamente el tamaño de la muestra y mejorar el rendimiento del modelo. Por ejemplo, calcule la suma, producto, diferencia, razón, etc. de dos variables.
  2. Características polinómicas: para las variables numéricas, se pueden expandir a múltiples indicadores mediante un conjunto de funciones polinómicas. Por ejemplo, puedes calcular las potencias al cuadrado, al cubo, etc. de una variable.
  3. Funciones interactivas: combine diferentes funciones para formar un espacio de funciones más rico. Por ejemplo, calcular el producto de dos variables, el cociente de división, el resto, etc.
  4. Características del texto: para los datos de texto, las características efectivas se pueden extraer mediante estadísticas, clasificación, agrupación y otros medios. Por ejemplo, calcule la frecuencia de palabras, TF-IDF, palabras clave, modelos de temas, etc.
  5. Características de la imagen: para los datos de la imagen, las características efectivas se pueden extraer mediante diferentes métodos de extracción de características. Por ejemplo, calcule bordes, texturas, descriptores HOG, etc.

3.5 Normalización y estandarización

La normalización y la estandarización son pasos importantes en el preprocesamiento de datos y se utilizan para mapear la distribución de datos a la misma escala o rango. Los métodos de normalización comunes incluyen MinMaxScaler, StandardScaler, etc.; los métodos de estandarización comunes incluyen la normalización de puntuación Z, la normalización Min-max, etc.

La diferencia entre normalización y estandarización es que la normalización hará que la media de los datos sea 0 y la desviación estándar 1, mientras que la normalización solo escala a un intervalo específico y no cambia la distribución de los datos. En aplicaciones prácticas, se pueden utilizar varios métodos juntos para lograr mejores resultados.

Supongo que te gusta

Origin blog.csdn.net/universsky2015/article/details/133504593
Recomendado
Clasificación