39,99 €
Si busca un manual de referencia sobre Machine Learning y Deep Learning con PyTorch, ha llegado al libro indicado. En él se explica paso a paso cómo construir sistemas de aprendizaje automático con éxito. Mientras que en algunos libros solo se enseña a seguir instrucciones, en este descubrirá los principios para crear modelos y aplicaciones por sí mismo. Encontrará multitud de explicaciones claras, visualizaciones y ejemplos, y aprenderá en profundidad todas las técnicas esenciales de Machine Learning. Actualizado para ocuparse de Machine Learning utilizando PyTorch, este libro también presenta las últimas incorporaciones a Scikit-Learn. Además, trata varias técnicas de Machine Learning y Deep Learning para la clasificación de textos e imágenes. Con este libro, también aprenderá sobre las redes generativas antagónicas (GAN), útiles para generar nuevos datos y entrenar agentes inteligentes con aprendizaje reforzado. Por último, esta edición incluye las últimas tendencias en Machine Learning, como las introducciones a las redes neuronales de grafos y transformadores a gran escala utilizados para el procesamiento del lenguaje natural (NLP). Sin duda, tanto si es un desarrollador de Python neófito en Machine Learning como si desea profundizar en los últimos avances, este libro de PyTorch será su gran aliado en el aprendizaje automático con Python. «Estoy seguro de que este libro le resultará muy valioso, tanto por ofrecer una visión general del apasionante campo de Machine Learning, como por ser un tesoro de conocimientos prácticos. Espero que le inspire a aplicar Machine Learning para lograr un mayor beneficio, sea cual sea su problemática» Gracias a esta lectura: •Explorará marcos de trabajo, modelos y técnicas para que las máquinas «aprendan» de los datos •Empleará Scikit-Learn para Machine Learning y PyTorch para Deep Learning •Entrenará clasificadores de Machine Learning en imágenes, texto, etc. •Creará y entrenará redes neuronales, transformadores y redes neuronales gráficas •Descubrirá las mejores prácticas para evaluar y ajustar los modelos •Pronosticará los resultados de elementos continuos utilizando el análisis de regresión •Profundizará en los datos textuales y de las redes sociales mediante el análisis de sentimiento
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 936
Esta obra ha recibido una ayuda a la edición del Ministerio de Cultura y Deporte del Gobierno de España, por el Plan de Recuperación, Transformación y Resiliencia, Financiado por la Unión Europea (NextGenerationEU)
Copyright © Packt Publishing Ltd. 2022. First published in the English language under the title Machine Learning with PyTorch and Scikit-Learn (978-1-80181-931-2).
Primera edición original publicada en inglés por Packt Publishing Ltd. con el título:Machine Learning with PyTorch and Scikit-Learn, © 2022 Packt Publishing
Título de la edición en español: Machine Learning con PyTorch y Scikit-Learn Primera edición en español, 2023
© 2023 MARCOMBO, S.L.
www.marcombo.com
Traducción: Francisco Martínez Carreno
Correctora: Anna Alberola
Directora de producción: M.a Rosa Castillo
Los códigos de ejemplo que se pueden encontrar en el libro se han desarrollado usando las versiones de software y librerías más actuales en el momento de la publicación del mismo, pero, como sabe, el software es algo que está en constante evolución, y estas pueden haber variado desde su fecha de publicación. Por este motivo existe la posibilidad que, de manera puntual, la sintaxis de algún ejemplo pueda variar.
Packt Publishing y Marcombo se han esforzado en proporcionar información sobre las marcas comerciales de todas las empresas y productos mencionados en el libro mediante el uso adecuado de las cabeceras. Sin embargo, Packt Publishing y Marcombo no pueden garantizar la exactitud de esta información. Python y el logotipo de Python son marcas comerciales de Python Soft ware Foundation.
Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra.
ISBN del libro en papel: 978-84-267-3573-7
ISBN del libro electrónico: 978-84-267-3625-3
Producción del ePub: booqlab
En los últimos años, los métodos de Machine Learning (en castellano, aprendizaje automático), con su capacidad para dar sentido a grandes cantidades de datos y automatizar decisiones, han encontrado amplias aplicaciones en la sanidad, la robótica, la biología, la física, los productos de consumo, los servicios de Internet y otros sectores.
Los saltos de gigante en la ciencia suelen provenir de una combinación de ideas poderosas y grandes herramientas. El aprendizaje automático no es una excepción. El éxito de los métodos de aprendizaje basados en datos se debe a las ingeniosas ideas de miles de investigadores con talento a lo largo de los 60 años de historia en este campo. Pero su reciente popularidad también se debe a la evolución de las soluciones de hardware y soft ware que los hacen escalables y accesibles. El ecosistema de excelentes librerías para la computación numérica, el análisis de datos y el aprendizaje automático creadas en torno a Python, como NumPy y Scikit-learn, ha conseguido una amplia acogida en la investigación y la industria. Esto ha contribuido en gran medida a que Python sea el lenguaje de programación más popular.
Las grandes mejoras en la visión por ordenador, el texto, el habla y otras tareas aportadas por la reciente llegada de las técnicas de Deep Learning (en castellano, aprendizaje profundo) ejemplifican este tema. Los enfoques se basan en la teoría de las redes neuronales de las últimas cuatro décadas, que empezaron a funcionar extraordinariamente bien en combinación con las GPU y las rutinas de cálculo altamente optimizadas.
Nuestro objetivo con la creación de PyTorch durante los últimos cinco años ha sido ofrecer a los investigadores la herramienta más flexible para expresar algoritmos de aprendizaje profundo, a la vez que nos ocupamos de las complejidades de ingeniería subyacentes. Nos hemos beneficiado del excelente ecosistema de Python. Hemos tenido la suerte de ver a una comunidad de personas con mucho talento elaborar modelos avanzados de aprendizaje profundo en diferentes dominios sobre PyTorch.
Conozco a Sebastian, que forma parte de esta comunidad tan unida, desde hace algunos años. Tiene un talento inigualable para explicar fácilmente la información y hacer accesible lo complejo. Sebastian ha contribuido en muchos paquetes de soft ware de aprendizaje automático ampliamente utilizados y es autor de docenas de excelentes tutoriales sobre aprendizaje profundo y visualización de datos.
Para aplicar el aprendizaje automático, es necesario dominar tanto las ideas como las herramientas. Empezar, desde dar sentido a los conceptos teóricos hasta averiguar qué paquetes de soft ware instalar, puede parecer intimidante.
Por suerte, el libro que tiene en sus manos hace un magnífico trabajo al combinar conceptos de aprendizaje automático y pasos prácticos de ingeniería para guiarle en este viaje. Le espera un delicioso viaje desde los fundamentos de las técnicas basadas en datos hasta las más novedosas arquitecturas de aprendizaje profundo. En cada capítulo, encontrará ejemplos de código concretos que aplican los métodos introducidos a tareas prácticas.
Cuando se publicó la primera edición en 2015, puso el listón muy alto en la categoría de libros de ML y Python. Pero la excelencia no se detuvo ahí. Con cada edición, Sebastian y el equipo siguieron actualizando y refinando el material a medida que la revolución del aprendizaje profundo se desarrollaba en nuevos ámbitos. En esta nueva edición de PyTorch, encontrará nuevos capítulos sobre arquitecturas de transformadores y redes neuronales de grafos. Estos enfoques están a la vanguardia del aprendizaje profundo y han tomado por asalto los campos de la comprensión de textos y la estructura molecular en los últimos dos años. Podrá practicarlos utilizando paquetes de soft ware nuevos pero muy populares en el ecosistema como Hugging Face, PyTorch Lightning y PyTorch Geometric.
El excelente equilibrio entre la teoría y la práctica que consigue este libro no es ninguna sorpresa, dada la combinación de conocimientos de investigación avanzada y la experiencia en la resolución de problemas de forma práctica de los autores. Sebastian Raschka y Vahid Mirjalili se basan en su experiencia en la investigación del aprendizaje profundo para la visión por ordenador y la biología computacional. Hayden Liu aporta la experiencia de aplicar métodos de aprendizaje automático al pronóstico de eventos, sistemas de recomendación y otras tareas de la industria. Todos los autores comparten una profunda pasión por la educación, y se refleja en la forma en que el libro va de lo simple a lo avanzado.
Estoy seguro de que este libro le resultará muy valioso como visión general del apasionante campo del aprendizaje automático y como tesoro de conocimientos prácticos. Espero que le sirva de inspiración para aplicar el aprendizaje automático en beneficio de los problemas que tenga que tratar en su área concreta, sea cual sea.
Dmytro Dzhulgakov
PyTorch Responsible de mantenimiento Core
El Dr. Sebastian Raschka es profesor adjunto de estadística en la Universidad de Wisconsin-Madison y se centra en el aprendizaje automático y el aprendizaje profundo. Su investigación reciente se ha centrado en retos generales como el aprendizaje few-shot para trabajar con datos limitados y el desarrollo de redes neuronales profundas para objetivos ordinales. También es un ávido colaborador de código abierto, y en su nuevo papel como educador principal de IA en Grid.ai, planea continuar con su pasión por ayudar a la gente a entrar en el aprendizaje automático y en la IA.
Muchas gracias a Jitian Zhao y Ben Kaufman, con quienes tuve el placer de trabajar en los nuevos capítulos sobre transformadores y redes neuronales de grafos. También estoy muy agradecido por la ayuda de Hayden y Vahid: este libro no habría sido posible sin vosotros. Por último, quiero dar las gracias a Andrea Panizza, Tony Gitter y Adam Bielski por sus útiles discusiones sobre distintas secciones del manuscrito.
Yuxi (Hayden) Liu es ingeniero de soft ware de aprendizaje automático en Google y ha trabajado como científico de aprendizaje automático en una variedad de dominios basados en datos. Hayden es autor de una serie de libros de ML. Su primer libro, Python Machine Learning By Example, fue el número 1 en ventas en su categoría en Amazon en 2017 y 2018, y fue traducido a muchos idiomas. Sus otros libros incluyen R Deep Learning Projects, Hands-On Deep Learning Architectures with Python y PyTorch 1.x Reinforcement Learning Cookbook.
Me gustaría dar las gracias a todas las grandes personas con las que he trabajado, especialmente a mis coautores, mis editores en Packt y mis revisores. Sin ellos, este libro sería más difícil de leer y de aplicar a los problemas del mundo real. Por último, me gustaría dar las gracias a todos los lectores por su apoyo, que me animaron a escribir la edición en PyTorch de este libro de ML de tanto éxito.
El Dr. Vahid Mirjalili es investigador de deep learning especializado en aplicaciones de visión por ordenador. Vahid se doctoró en Ingeniería Mecánica e Informática por la Universidad Estatal de Michigan. Durante su doctorado, desarrolló innovadores algoritmos de visión por ordenador para resolver problemas del mundo real y publicó varios artículos de investigación citados muy frecuentemente en la comunidad de visión por ordenador.
Benjamin Kaufman es candidato a doctor en la Universidad de Wisconsin-Madison en ciencia de datos biomédicos. Su investigación se centra en el desarrollo y la aplicación de métodos de aprendizaje automático para el descubrimiento de fármacos. Su trabajo en este ámbito ha permitido profundizar en el conocimiento de las redes neuronales de grafos.
Jitian Zhao es estudiante de doctorado en la Universidad de Wisconsin-Madison, donde desarrolló su interés en los modelos lingüísticos a gran escala. Le apasiona el aprendizaje profundo en el desarrollo tanto de aplicaciones en el mundo real como de soporte teórico.
Me gustaría agradecer a mis padres su apoyo. Me animaron a perseguir siempre mi sueño y me motivaron a ser una buena persona.
Roman Tezikov es ingeniero de investigación industrial y entusiasta del aprendizaje profundo con más de cuatro años de experiencia en visión por ordenador avanzada, PNL y MLOps. Como creador, junto con otros, de la comunidad ML-REPA, organizó varios talleres y reuniones sobre reproducibilidad de ML y automatización de pipelines. Uno de sus actuales retos de trabajo consiste en utilizar la visión por ordenador en la industria de la moda. Roman también fue uno de los principales desarrolladores de Catalyst, un marco PyTorch para el aprendizaje profundo acelerado.
Únase al espacio de Discord del libro para una sesión mensual de «Pregúnteme lo que quiera» con los autores (en inglés):
https://packt.link/MLwPyTorch
Prefacio
1. Dotar a los ordenadores de la capacidad de aprender de los datos
Creación de máquinas inteligentes para transformar los datos en conocimiento
Los tres tipos de aprendizaje automático
Formulación de pronósticos sobre el futuro con el aprendizaje supervisado
Clasificación para pronosticar etiquetas de clase
Regresión para el pronóstico de resultados continuos
Resolución de problemas interactivos con el aprendizaje reforzado
Descubrimiento de estructuras ocultas con el aprendizaje no supervisado
Detección de subgrupos mediante el agrupamiento (clustering)
Reducción de la dimensionalidad para comprimir los datos
Introducción a la terminología básica y la notación
Notación y convenciones que se utilizan en el libro
Terminología del aprendizaje automático
Hoja de ruta para crear sistemas de aprendizaje automático
Preprocesamiento: cómo dar forma a los datos
Entrenamiento y selección de modelos predictivos
Evaluación de modelos y pronóstico de instancias de datos ocultos
Utilización de Python en aprendizaje automático
Instalación de Python y sus paquetes desde Python Package Index
Uso del gestor de paquetes y distribucion de Anaconda Python
Paquetes para computación científica, ciencia de datos y aprendizaje automático
Resumen
2. Entrenamiento de algoritmos sencillos de aprendizaje automático para tareas de clasificación
Neuronas artificiales: un vistazo a la historia de los inicios del aprendizaje automático
Definición formal de neurona artificial
Regla de aprendizaje del perceptrón
Implementación de algoritmos de aprendizaje del perceptrón en Python
Una API del perceptrón orientada a objetos API
Entrenamiento de un modelo de perceptrón con el conjunto de datos Iris
Neuronas lineales adaptativas y convergencia del aprendizaje
Minimización de las funciones de pérdida con el descenso del gradiente
Implementación de Adaline en Python
Mejora del descenso del gradiente mediante el escalado de características
Aprendizaje automático a gran escala y descenso del gradiente estocástico
Resumen
3. Un recorrido por los clasificadores de aprendizaje automático con Scikit-learn
Elección de un algoritmo de clasificación
Primeros pasos con Scikit-learn: entrenamiento del precetrón
Modelización de las probabilidades de clase mediante regresión logística
Regresión logística y probabilidades condicionales
Aprendizaje de los pesos del modelo mediante la función de pérdida logística
Conversión de una implementación de Adaline en un algoritmo de regresión logística
Entrenamiento de un modelo de regresión logística con Scikit-learn
Cómo abordar el sobreajuste utilizando la regularización
Clasificación de margen máximo con máquinas de vectores de soporte
Intuición de margen máximo
Tratamiento de un caso no separable linealmente mediante variables de holgura
Implementaciones alternativas en Scikit-learn
Resolución de problemas no lineales utilizando el kernel en SVM
Métodos del kernel para datos no separables linealmente
Uso del truco del kernel para encontrar hiperplanos de separación en un espacio de alta dimensión
Aprendizaje utilizando árboles de decisión
Maximización de IG: cómo sacar el máximo partido a su dinero
Creación de un árbol de decisión
Combinación de múltiples árboles de decisión mediante bosques aleatorios
K vecinos más cercanos: un algoritmo de aprendizaje perezoso
Resumen
4. Elaboración de conjuntos de datos de entrenamiento adecuados: preprocesamiento
Tratamiento de los datos que faltan
Identificación de los valores que faltan en las tablas de datos
Eliminación de ejemplos de entrenamiento o de características con valores perdidos
Atribución de valores perdidos
Interpretación de la API del estimador de Scikit-learn
Tratamiento de datos categóricos
Codificación de datos categóricos con Pandas
Asignación de las características ordinales
Codificación de las etiquetas de clase
Codificación one-hot de las características nominales
Opcional: codificación de características ordinales
Partición del conjunto de datos en conjuntos de entrenamiento y de prueba separados
Las características deben estar en la misma escala
Selección de características significativas
Regularizaciones L1 y L2 como penalizaciones contra la complejidad del modelo
Interpretación geométrica de la regularización L2
Soluciones dispersas con la regularización L1
Algoritmos de selección secuencial de características
Evaluación de la importancia de las características con bosques aleatorios
Resumen
5. Compresión de datos mediante la reducción de la dimensionalidad
Reducción de la dimensionalidad no supervisada mediante el análisis de componentes principales
Etapas más importantes del análisis de componentes principales
Extracción de los componentes principales paso a paso
Varianzas total y explicada
Transformación de características
Análisis de componentes principales en Scikit-learn
Evaluación de las contribuciones de las características
Compresión de datos supervisados mediante el análisis discriminante lineal
Análisis de componentes principales frente al análisis discriminante lineal
Funcionamiento interno del análisis discriminante lineal
Cálculo de matrices de dispersión
Selección de discriminantes lineales para el nuevo espacio de características
Proyección de ejemplos en el nuevo espacio de características
LDA mediante Scikit-learn
Reducción de la dimensionalidad no lineal y visualización de datos
¿Por qué considerar la reducción de la dimensionalidad no lineal?
Visualización de datos mediante la incorporación de vecinos estocásticos distribuidos en t
Resumen
6. Aprendizaje de las mejores prácticas para la evaluación de modelos y el ajuste de hiperparámetros
Optimización de flujos de trabajo con pipelines
Carga del conjunto de datos Breast Cancer Wisconsin
Combinación de transformadores y estimadores en una pipeline
Uso de la validación cruzada de k iteraciones (k subconjuntos) para evaluar el rendimiento del modelo
El método de retención
Validación cruzada de k iteraciones
Depuración de algoritmos con curvas de aprendizaje y validación
Diagnóstico de problemas de sesgo y varianza con curvas de aprendizaje
Como abordar el sobreajuste y el infraajuste con curvas de validación
Ajuste de los modelos de aprendizaje automático mediante la búsqueda en la red
Ajuste de hiperparámetros mediante la búsqueda en la red
Configuraciones de los hiperparámetros con la búsqueda aleatoria
Búsqueda de hiperparámetros más eficiente en recursos con reducción sucesiva a la mitad
Selección de algoritmos con validación cruzada anidada
Observación de diferentes métricas de evaluación del rendimiento
Lectura de la matriz de confusión
Optimización de la precisión y la recuperación de un modelo de clasificación
Representación de la característica operativa del receptor
Métricas de puntuación para la clasificación multiclase
Cómo hacer frente al desequilibrio de clases
Resumen
7. Combinación de diferentes modelos para el aprendizaje de conjunto
Aprendizaje de conjunto
Combinación de clasificadores mediante el voto mayoritario
Implementación de un clasificador de voto mayoritario sencillo
Utilización del principio de votación por mayoría para hacer pronósticos
Evaluación y ajuste del clasificador conjunto
Bagging: elaboración de un conjunto de clasificadores a partir de muestras bootstrap
Bagging en pocas palabras
Aplicación de bagging para clasificar ejemplos en el conjunto de datos Wine
Aprovechamiento de los alumnos débiles mediante el refuerzo adaptativo
Cómo funciona el refuerzo adaptativo
Apicación de AdaBoost con Scikit-learn
Refuerzo del gradiente: entrenamiento de un conjunto basado en los gradientes de pérdida
Comparación de AdaBoost con el refuerzo del gradiente
Esquema del algoritmo general de refuerzo del gradiente
Explicación del algoritmo de refuerzo del gradiente para la clasificación
Ilustración del refuerzo del gradiente para la clasificación
Utilización de XGBoost
Resumen
8. Aplicación del aprendizaje automático al análisis de opiniones
Preparación de datos de reseñas de películas de IMDb para el tratamiento de textos
Obtención del conjunto de datos de reseñas de películas
Preprocesamiento del conjunto de datos de películas en un formato más conveniente
Presentación del modelo bolsa de palabras
Transformación de palabras en vectores de características
Evaluación de la relevancia de las palabras mediante la frecuencia de los términos-frecuencia inversa de los documentos
Limpieza de datos de texto
Procesamiento de documentos en tokens
Entrenamiento de un modelo de regresión logística para la clasificación de documentos
Trabajo con conjuntos de datos más grandes: algoritmos en línea y aprendizaje fuera del núcleo
Modelado de temas con asignación latente de Dirichlet
Descomposición de documentos de texto con LDA
LDA con Scikit-learn
Resumen
9. Pronóstico de variables objetivo continuas con análisis de regresión
Introducción a la regresión lineal
Regresión lineal simple
Regresión lineal múltiple
Exploración del conjunto de datos Ames Housing
Carga del conjunto de datos Ames Housing en un DataFrame
Visualización de las características importantes de un conjunto de datos
Obserevaciones de las relaciones mediante la matriz de correlación
Implementación del modelo de regresión lineal mediante mínimos cuadrados ordinarios
Resolución de la regresión para los parámetros de regresión con el descenso del gradiente
Estimación del coeficiente del modelo de regresión mediante Scikit-learn
Ajuste del modelo de regresión robusto mediante RANSAC
Evaluación del rendimiento de los modelos de regresión lineal
Uso de métodos regularizados para la regresión
Conversión del modelo de regresión lineal en una curva: regresión polinómica
Adición de términos polinómicos usando Scikit-learn
Modelado de relaciones no lienales en el conjunto de datos Ames Housing
Tratamiento de relaciones no lineales mediante bosques aleatorios
Regresión de árbol de decisión
Regresión de bosque aleatorio
Resumen
10. El trabajo con datos no etiquetados: análisis de clustering
Agrupación de objetos por similitud mediante k-means
Clustering de k-means con Scikit-learn
Una forma más inteligente de colocar los centroides iniciales de los clústeres utilizando k-means++
Clustering duro frente a clustering blando
Uso del método del codo para encontrar el número óptimo de clústeres
Cuantifiación de la calidad del clustering mediante gráficos de silueta
Organización de clústeres en forma de árbol jeráquico
Agrupación de clústeres de forma ascendente
Realización de la agrupación jeráquica en la matriz de distancias
Anexión de dendrogramas a un mapa de calor
Aplicación de clustering aglomerativo a través de Scikit-learn
Localización de regiones de alta densidad mediante DBSCAN
Resumen
11. Implementación de una red neuronal artificial multicapa desde cero
Modelado de funciones complejas con redes neuronales artificiales
Resumen de redes neuronales de una capa
Introducción a la arquitectura de redes neuronales multicapa
Activación de una red neuronal por propagación hacia delante
Clasificación de dígitos escritos a mano
Obtención y preparación del conjunto de datos MNIST
Implementación del perceptrón multicapa
Codificación del bucle de entrenamiento de la red neuronal
Evaluación del rendimiento de la red neuronal
Entrenamiento de redes neuronales artificiales
Cálculo de la función de pérdida
Desarrollo de conocimiento de la retropropagación
Entrenamiento de redes neuronales por retropropagación
Sobre la convergencia en redes neuronales
Unas últimas palabras sobre la implementación de redes neuronales
Resumen
12. Paralelización de redes neuronales con PyTorch
PyTorch y el rendimiento del entrenamiento
Retos del rendmiento
¿Qué es PyTorch?
Cómo vamos a aprender PyTorch
Primeros pasos con PyTorch
Instalación de PyTorch
Creación de tensores en PyTorch
Manipulación del tipo de datos y la forma de tensores
Aplicación de operaciones matemáticas a tensores
División, apilamiento y concatenación de tensores
Elaboración de pipelines de entrada en PyTorch
Creación de PyTorch DataLoader a partir de tensores existentes
Combinación de dos tensores en un conjunto de datos mixto
Barajar, agrupar y repetir
Creación de conjuntos de datos a partir de archivos del disco de almacenamiento local
Obtención de los conjuntos de datos disponibles en la biblioteca torchvision.datasets
Elaboración de modelos de NN en PyTorch
Módulo de redes neuronales de PyTorch (torch.nn)
Elaboración de un modelo de regresión lineal
Entrenamiento de modelos mediante los módulos torch.nn y torch.optim
Elaboración de un perceptrón multicapa para clasificar flores en el conjunto de datos Iris
Evaluación del modelo entrenado en el conjunto de datos de prueba
Almacenamineto y recarga del modelo entrenado
Elección de funciones de activación para redes reuronales multicapa
Recapitulación de la función logística
Estimación de las probabilidades de clase en la clasificación multiclase mediante la función soft max
Ampliación del espectro de salida mediante la tangente hiperbólica
Activación de la unidad lineal rectificada
Resumen
13. Profundización: la mecánica de PyTorch
Características esenciales de PyTorch
Grafos de computación de PyTorch
Comprensión de los grafos de computación
Creación de grafos en PyTorch
Objetos tensoriales PyTorch para almacenar y actualizar los parámetros del modelo
Cálculo de gradientes mediante diferenciación automática
Cálculo de gradientes de pérdida con respecto a las variables entrenables
Comprensión de la diferenciación automática
Ejemplos adversarios
Simplificación de las implementaciones de arquitecturas más frecuentes mediante el módulo torch.nn
Implementación de modelos basados en nn.Sequential
Elección de la función de pérdida
Resolución de problemas de clasificación XOR
Cómo flexibilizar la elaboración de modelos con nn.Module
Cómo escribir capas personalizadas en PyTorch
Proyecto uno: pronóstico de la eficiencia de combustibles de coches
Trabajo a realizar con columnas de características
Entrenamiento de modelos de regresión DNN
Proyecto dos: clasificación de dígitos escritos a mano del MNIST
Las API de PyTorch de alto nivel: una breve introducción a PyTorch-Lightning
Configuración del modelo PyTorch Lightning
Configuración de los cargadores de datos para Lightning
Entrenamiento de modelos con la clase PyTorch Lightning Trainer
Evaluación del modelo con TensorBoard
Resumen
14. Clasificación de imágenes con redes neuronales convolucionales profundas
Componentes de las CNN
Comprensión de las CNN y jerarquías de características
Realización de convoluciones discretas
Convoluciones discretas en una dimensión
Entradas de relleno para controlar el tamaño de los mapas de características de salida
Determinación del tamaño de la salida de la convolución
Realización de convoluciones discretas en 2D
Capas de submuestreo
Poner todo junto: implementación de CNN
Trabajo con varios canales de entrada o de color
Regularización de NN con regularización y abandono de L2
Funciones de pérdida para la clasificación
Implementación de CNN profundas utilizando PyTorch
La arquitectura de CNN multicapa
Carga y preprocesamiento de datos
Implementación de CNN usando el módulo torch.nn
Configuración de capas de CNN en PyTorch
Construcción de CNN en PyTorch
Clasificación de sonrisas a partir de imágenes faciales mediante CNN
Carga del conjunto de datos CelebA
Transformación de imágenes e incremento de datos
Entrenamiento de un clasificador de sonrisas CNN
Resumen
15. Modelado de datos secuenciales mediante redes neuronales recurrentes
Introducción a los datos secuenciales
Modelado de datos secuenciales: el orden importa
Datos secuenciales frente a datos de series temporales
Representación de secuencias
Diferentes categorías del modelado de secuencias
RNN para modelar secuencias
Comprender el flujo de datos en las RNN
Cálculo de activaciones en RNN
Recurrencia oculta frente a recurrencia de salida
Retos del aprendizaje de las interacciones de largo alcance
Células de memoria a corto y largo plazo
Implementación de RNN para el modelado de secuencias en PyTorch
Proyecto uno: pronóstico de las opiniones en las reseñas de cine de IMDb
Preparación de los datos de reseñas de películas
Capas de incorporación (embedding) para la codificación de frases
Elaboración de modelos RNN
Elaboración de un modelo RNN para la tarea de análisis de opiniones
Proyecto dos: modelado lingüístico a nivel de caracteres en PyTorch
Preprocesamiento del conjunto de datos
Elaboración de un modelo RNN a nivel de carácter
Fase de evaluación: generación de nuevos pasajes de texto
Resumen
16. Transformadores: mejora del procesamiento del lenguaje natural con mecanismos de atención
Adición de un mecanismo de atención a las RNN
El mecanismo de atención ayuda a las RNN a acceder a la información
Mecanismo de atención original para las RNN
Procesamiento de entradas mediante RNN bidireccional
Generación de salidas a partir de vectores de contexto
Cálculo de los pesos de atención
Introducción al mecanismo de autoatención
Empezando por una forma básica de autoatención
Parameterización del mecanismo de autoatención: atención del producto punto escalado
La atención es todo lo que necesitamos: introdución a la arquitectura original del transformador
Codificación de las incorporaciones de contexto mediante atención multicabezal
Aprendizaje de un modelo lingüístico: decodificador y atención multicabezal enmascarada
Detalles de la implementación: codificaciones posicionales y normalización de capas
Elaboración de modelos lingüísticos a gran escala aprovechando los datos no etiquetados
Preentrenamiento y ajuste de los modelos de transformadores
Aprovechamiento de datos no etiquetados con GPT
Utilización de GPT-2 para generar texto nuevo
Preentrenamiento bidireccional con BERT
Lo mejor de ambos mundos: BART
Reajuste de modelos BERT en PyTorch
Carga del conjunto de datos de reseñas de películas de IMDb
Tokenización del conjunto de datos
Carga y reajuste de modelos BERT preentrenados
Cómo reajustar los transformadores de forma más cómoda mediante la API Trainer
Resumen
17. Redes generativas antagónicas con las que sintetizar nuevos datos
Introducción a las redes generativas antagónicas
Empezando por los autocodificadores
Modelos generativos para sintetizar nuevos datos
Generación de nuevas muestras con GAN
Comprensión de las funciones de perdida de las redes generadoras y discriminadoras en un modelo GAN
Implementación de un modelo GAN desde cero
Entrenamiento de modelos GAN en Google Colab
Implementación de las redes generadora y discriminadora
Definición del conjunto de datos de entrenamiento
Entrenamiento de modelos GAN
Mejora de la calidad de las imágenes sintetizadas mediante GAN convolucionales y de Wasserstein
Convolución traspuesta
Normalización por lotes
Implementación del generador y del discriminador
Medidas de disimilitud entre dos distribuciones
Uso de la distancia EM en la prática para las GAN
Penalización del gradiente
Implementación de WGAN-GP para entrenar modelos DCGAN
Colapso de modo
Otras aplicaciones de las GAN
Resumen
18. Redes neuronales de grafos para captar las dependencias en datos estructurados en grafos
Introducción a los datos de grafos
Grafos no dirigidos
Grafos dirigidos
Grafos etiquetados
Representación de las moléculas como grafos
Comprensión de las convoluciones de grafos
Motivaciones para utilizar las convoluciones de grafos
Implementación de una convolución básica de grafos
Implementación de GNN en PyTorch desde cero
Definición del modelo NodeNetwork
Codificación de la capa de convolución del grafo de NodeNetwork
Preparación de DataLoader
Uso de NodeNetwork para hacer pronósticos
Implementación de GNN con la biblioteca PyTorch Geometric
Otras capas de GNN y desarrollos recientes
Convoluciones de grafos espectrales
Reducción (pooling)
Normalización
Referencias a las redes neuronales de grafos en la literatura avanzada
Resumen
19. Aprendizaje reforzado para la toma de decisiones en entornos complejos
Introducción: aprender de la experiencia
Comprensión del aprendizaje reforzado
Definición de la interfaz agente-entorno de los sistemas de aprendizaje reforzado
Fundamentos teóricos de RL
Procesos de decisión de Markov
Formulación de los procesos de decisión de Markov
Visualización del proceso de Markov
Tareas episodicas o continuas
Terminología RL: retorno, política y función de valor
Retorno
Política
Función de valor
Programación dinámica mediante la ecuación de Bellman
Algoritmos de aprendizaje reforzado
Programación dinámica
Evaluación de políticas: pronóstico de la función de valor con programación dinámica
Mejora de la política mediante la función de valor estimada
Iteración de la política
Itearción del valor
Aprendizaje reforzado con Monte Carlo
Estimación de la función de valor del estado mediante MC
Estimación de la función de valor de la acción mediante MC
Consecución de la política óptima mediante el control de MC
Mejora de la política: cálculo de la política codiciosa a partir de la función de valor de la acción
Aprendizaje por diferencia temporal
Pronóstico TD
Control de TD en la política (SARSA)
Control de TD fuera de la política (Q-learning)
Implementación de nuestro primer algoritmo RL
Presentación del kit de herramientas OpenAI Gym
El trabajo con los entornos existentes en OpenAI Gym
Ejemplo del tipo mundo cuadriculado
Implementación del entorno de mundo cuadriculado en OpenAI Gym
Resolución del problema de mundo cuadriculado con Q-learning
Un vistazo a Q-learning profundo
Entrenamiento de modelos DQN según el algoritmo Q-learning
Memoria de repetición
Determinación de los valores objetivo para el cálculo de la pérdida
Implementación del algoritmo Q-learning profundo
Resumen del capítulo y del libro
A través de la exposición a las noticias y los medios sociales, probablemente esté familiarizado con el hecho de que el aprendizaje automático se ha convertido en una de las tecnologías más emocionantes de nuestro tiempo. Grandes empresas (como Microsoft, Google, Meta, Apple, Amazon, IBM y muchas más) realizan importantes inversiones en investigación y en aplicaciones del aprendizaje automático por buenas razones. Aunque pueda parecer que el aprendizaje automático se ha convertido en la palabra de moda de nuestro tiempo y época, no se trata de una exageración. Este apasionante campo abre el camino a nuevas posibilidades y se ha hecho indispensable en nuestra vida cotidiana. Hablar con el asistente de voz de nuestros teléfonos inteligentes, recomendar el producto adecuado a nuestros clientes, prevenir el fraude con tarjetas de crédito, filtrar el spam de nuestras bandejas de correo electrónico, detectar y diagnosticar enfermedades médicas... la lista es interminable.
Si quiere convertirse en un profesional del aprendizaje automático, en un mejor solucionador de problemas o incluso quiere considerar una carrera en la investigación del aprendizaje automático, ¡este libro es para usted! Sin embargo, para un principiante, los conceptos teóricos que hay detrás del aprendizaje automático pueden ser bastante abrumadores. Muchos libros prácticos que se han publicado en los últimos años le ayudarán a iniciarse en el aprendizaje automático mediante la implementación de potentes algoritmos de aprendizaje.
Exponerse a ejemplos prácticos de código y trabajar con ejemplos de aplicaciones de aprendizaje automático es una gran manera de sumergirse en este campo. Los ejemplos concretos ayudan a ilustrar los conceptos más amplios al poner el material aprendido directamente en acción. Sin embargo, recuerde que un gran poder conlleva una gran responsabilidad. Además de ofrecer una experiencia práctica con el aprendizaje automático utilizando Python y las bibliotecas de aprendizaje automático basadas en Python, este libro también introduce los conceptos matemáticos que hay detrás de los algoritmos de aprendizaje automático, lo cual es esencial para utilizar el aprendizaje automático con éxito. Por lo tanto, este libro es diferente de un libro puramente práctico; es un libro que discute los detalles necesarios con respecto a los conceptos de aprendizaje automático, ofrece explicaciones intuitivas pero informativas sobre cómo funcionan los algoritmos de aprendizaje automático, sobre cómo usarlos y, lo más importante, sobre cómo evitar los errores más frecuentes.
En el libro, iniciaremos un apasionante viaje que abarcará todos los temas y conceptos esenciales para proporcionarle una ventaja en este campo. Si su sed de conocimientos no se ve satisfecha, este libro hace referencia a muchos recursos útiles que puede utilizar para seguir los avances esenciales en este campo.
Este libro es el compañero ideal para aprender a aplicar el aprendizaje automático y el aprendizaje profundo a una amplia gama de tareas y conjuntos de datos. Si es un programador que quiere estar al día con las tendencias recientes en tecnología, este libro es para usted. Si es un estudiante o está considerando cambiar de profesión, este libro le puede servir como introducción, además de ser una guía completa al mundo del aprendizaje automático.
El capítulo 1, Dotar a los ordenadores de la capacidad de aprender de los datos, nos introduce en las principales subáreas del aprendizaje automático para abordar tareas de diversas problemáticas. Además, se discuten los pasos esenciales para la creación de una pipeline típica de construcción de modelos de aprendizaje automático que nos guiará a través de los siguientes capítulos.
El capítulo 2, Entrenamiento de algoritmos sencillos de aprendizaje automático para tareas de clasificación, se remonta a los orígenes del aprendizaje automático e introduce los clasificadores de perceptrón binario y de neuronas lineales adaptativas. Este capítulo es una ligera introducción a los fundamentos de la clasificación de patrones y se centra en la interacción de los algoritmos de optimización y el aprendizaje automático.
El capítulo 3, Un recorrido por los clasificadores de aprendizaje automático con Scikit-learn, describe los algoritmos esenciales de aprendizaje automático para la clasificación y proporciona ejemplos prácticos utilizando una de las bibliotecas de aprendizaje automático de código abierto más populares y completas, Scikit-learn.
El capítulo 4, Elaboración de conjuntos de datos de entrenamiento adecuados: preprocesamiento de datos, se ocupa de cómo tratar los problemas más frecuentes en los conjuntos de datos no procesados, como son los datos ausentes. También analiza varios enfoques para identificar las características más ilustrativas en los conjuntos de datos y le enseña a preparar variables de diferentes tipos, como entradas adecuadas, para los algoritmos de aprendizaje automático.
El capítulo 5, Compresión de datos mediante la reducción de la dimensionalidad, describe las técnicas esenciales para reducir el número de características de un conjunto de datos a conjuntos más pequeños, conservando la mayor parte de su información útil y discriminatoria. Analiza el enfoque estándar de la reducción de la dimensionalidad mediante el análisis de componentes principales y lo compara con las técnicas de transformación supervisada y no lineal.
En el capítulo 6, Aprendizaje de las mejores prácticas de aprendizaje para la evaluación de modelos y el ajuste de hiperparámetros, se analiza lo que se debe y lo que no se debe hacer para estimar el rendimiento de los modelos predictivos. Además, se analizan diferentes métricas para medir el rendimiento de nuestros modelos y técnicas para afinar los algoritmos de aprendizaje automático.
El capítulo 7, Combinación de diferentes modelos para el aprendizaje de conjuntos, presenta los diferentes conceptos de la combinación eficaz de múltiples algoritmos de aprendizaje. Le enseña a construir conjuntos de expertos para superar las debilidades de los aprendices individuales, lo que da lugar a pronósticos más precisos y fiables.
El capítulo 8, Aplicación del aprendizaje automático al análisis de opiniones, analiza los pasos esenciales para transformar los datos textuales en representaciones comprensibles para los algoritmos de aprendizaje automático para que puedan pronosticar las opiniones de las personas basándose en lo que han escrito.
En el capítulo 9, Pronóstico de variables objetivo continuas con análisis de regresión, se analizan las técnicas esenciales para modelar las relaciones lineales entre las variables objetivo y las variables de respuesta para hacer pronósticos en una escala continua. Tras introducir diferentes modelos lineales, este capítulo también se ocupa de la regresión polinómica y de los enfoques basados en árboles.
El capítulo 10, El trabajo con datos no etiquetados: análisis de clustering, cambia el enfoque a una subárea diferente del aprendizaje automático, el aprendizaje no supervisado. Aplicamos algoritmos de tres familias fundamentales de algoritmos de clustering para encontrar grupos de objetos que comparten cierto grado de similitud.
El capítulo 11, Implementación de redes neuronales artificiales multicapa desde cero, amplía el concepto de optimización basada en el gradiente, que introdujimos por primera vez en el capítulo 2, Entrenamiento de algoritmos sencillos de aprendizaje automático para tareas de clasificación, para crear potentes redes neuronales multicapa basadas en el popular algoritmo de retropropagación en Python.
El capítulo 12, Paralelización del entrenamiento de redes neuronales con PyTorch, se basa en los conocimientos del capítulo anterior para proporcionarle una guía práctica con la que entrenar redes neuronales de forma más eficiente. Este capítulo se centra en PyTorch, una biblioteca de código abierto de Python que nos permite utilizar varios núcleos de las GPU modernas y construir redes neuronales profundas a partir de bloques de construcción comunes mediante una API flexible y fácil de usar.
El capítulo 13, Profundización: la mecánica de PyTorch, retoma lo que dejó el capítulo anterior e introduce conceptos y funcionalidades más avanzadas de PyTorch. PyTorch es una biblioteca extraordinariamente vasta y sofisticada, y este capítulo le guía a través de conceptos como los grafos de cálculo dinámico y la diferenciación automática. También aprenderá a utilizar la API orientada a objetos de PyTorch para implementar redes neuronales complejas y para entender cómo PyTorch Lightning le ayuda con las mejores prácticas a minimizar el código boilerplate.
El capítulo 14, Clasificación de imágenes con redes neuronales convolucionales profundas, presenta las redes neuronales convolucionales (CNN). Una CNN representa un tipo particular de arquitectura de red neuronal profunda que es particularmente adecuada para trabajar con conjuntos de datos de imágenes. Debido a su superior rendimiento en comparación con los enfoques tradicionales, las CNN se utilizan ahora ampliamente en la visión por ordenador para lograr resultados de vanguardia en diversas tareas de reconocimiento de imágenes. A lo largo de este capítulo, aprenderá cómo las capas convolucionales pueden utilizarse como potentes extractores de características para la clasificación de imágenes.
El capítulo 15, Modelización de datos secuenciales mediante redes neuronales recurrentes, presenta otra arquitectura de red neuronal muy extendida para el aprendizaje profundo, que es especialmente adecuada para trabajar con texto y otros tipos de datos secuenciales y datos de series temporales. Como ejercicio de calentamiento, este capítulo presenta las redes neuronales recurrentes para pronosticar las opiniones de las reseñas de películas. A continuación, enseñaremos a las redes recurrentes a digerir información de libros para generar un texto completamente nuevo.
El capítulo 16, Transformadores: mejora del procesamiento del lenguaje natural con mecanismos de atención, se centra en las últimas tendencias del procesamiento del lenguaje natural y explica cómo los mecanismos de atención ayudan a modelar relaciones complejas en secuencias largas. Este capítulo describe la influyente arquitectura de los transformadores y los modelos de transformadores más avanzados, como BERT y GPT.
El capítulo 17, Redes generativas antagónicas con las que sintetizar nuevos datos, presenta un popular régimen de entrenamiento adversario para redes neuronales, que puede utilizarse para generar nuevas imágenes de aspecto realista. El capítulo comienza con una breve introducción a los autocodificadores, que son un tipo particular de arquitectura de red neuronal que puede utilizarse para la compresión de datos. A continuación, se muestra cómo combinar la parte decodificadora de un autocodificador con una segunda red neuronal que puede distinguir entre imágenes reales y sintetizadas. Dejando que dos redes neuronales compitan entre sí en un enfoque de entrenamiento adversario, implementará una red generativa antagónicas que generará nuevos dígitos como los escritos a mano.
El capítulo 18, Redes neuronales de grafos para captar las dependencias en datos estructurados en grafos, va más allá del trabajo con conjuntos de datos tabulares, imágenes y texto. Este capítulo presenta las redes neuronales de grafos que operan con datos estructurados en grafos, como son los de las redes sociales y las moléculas. Tras explicar los fundamentos de las convoluciones de grafos, este capítulo incluye un tutorial que muestra cómo implementar modelos predictivos para datos moleculares.
El capítulo 19, Aprendizaje reforzado para la toma de decisiones en entornos complejos, abarca una subcategoría del aprendizaje automático que se utiliza habitualmente para el entrenamiento de robots y otros sistemas autónomos. Este capítulo comienza introduciendo los fundamentos del aprendizaje reforzado (Reinforcement Learning, RL) para familiarizarse con las interacciones agente/entorno, el proceso de recompensa de los sistemas RL y el concepto de aprendizaje a partir de la experiencia. Después de conocer las principales categorías de RL, se implementará y entrenará un agente que puede navegar en un entorno de mundo cuadriculado utilizando el algoritmo Q-learning. Por último, este capítulo presenta el algoritmo Q-learning profundo, que es una variante de Q-learning que utiliza redes neuronales profundas.
Lo ideal es que ya se sienta cómodo con la programación en Python para seguir los ejemplos de código que proporcionamos, con los que ilustrar y aplicar varios algoritmos y modelos. Para sacar el máximo provecho del libro, también será útil tener sólidos conocimientos de la notación matemática.
Un ordenador portátil o de sobremesa corriente debería ser suficiente para ejecutar la mayor parte del código del libro, y en el primer capítulo proporcionamos instrucciones para su entorno Python. Los capítulos posteriores presentarán bibliotecas adicionales y recomendaciones de instalación cuando sea necesario.
Utilizar una unidad de procesamiento gráfico (GPU) moderna puede acelerar los tiempos de ejecución del código en los últimos capítulos de aprendizaje profundo. Sin embargo, no es necesaria una GPU, y también proporcionamos instrucciones para utilizar recursos gratuitos en la nube.
Todos los ejemplos de código están disponibles para su descarga a través de GitHub en https://github.com/rasbt/machine-learning-book. También tenemos otros paquetes de código de nuestro extenso catálogo de libros y vídeos disponibles en https://github.com/PacktPublishing/. ¡Compruébelos!
Aunque recomendamos el uso de Jupyter Notebook para ejecutar el código de forma interactiva, todos los ejemplos de código están disponibles tanto en un script de Python (por ejemplo, ch02/ch02.py) como en formato Jupyter Notebook (por ejemplo, ch02/ch02.ipynb). Además, recomendamos consultar el archivo README.md que acompaña a cada capítulo individual para obtener información adicional y actualizaciones.
También proporcionamos un archivo PDF que tiene imágenes en color de las capturas de pantalla/diagramas utilizados en el libro. Puede descargarlo aquí: https://static.packt-cdn.com/downloads/9781801819312_ColorImages.pdf. Además, en los cuadernos de código del libro, que vienen junto con los archivos de códigos de ejemplo, hay imágenes en color de menor resolución.
A lo largo de este libro se utilizan una serie de convenciones textuales.
A continuación, se ofrecen algunos ejemplos de estos estilos y una explicación de su significado. Las palabras de código en el texto se muestran de la siguiente manera: «Y los paquetes ya instalados pueden actualizarse mediante la bandera --upgrade».
Un bloque de código se establece de la siguiente manera:
Cualquier entrada en el intérprete de Python se escribe de la siguiente manera (observe el símbolo >>>). La salida esperada se mostrará sin el símbolo >>>:
Cualquier entrada o salida de la línea de comandos se escribe de la siguiente manera:
Los términos nuevos y las palabras importantes aparecen en negrita. Las palabras que se ven en la pantalla, por ejemplo, en los menús o cuadros de diálogo, aparecen en el texto así: «Al hacer clic en el botón Siguiente se pasa a la siguiente pantalla».
Los avisos o notas importantes aparecen en un cuadro como este.
Los consejos y trucos aparecen en un cuadro como este.
Los comentarios de nuestros lectores son siempre bienvenidos.
Comentarios generales: Envíe un correo electrónico a [email protected] y mencione el título del libro en el asunto de su mensaje. Si tiene preguntas sobre cualquier aspecto del libro, envíenos un correo electrónico a [email protected].
Erratas: Aunque hemos puesto todo nuestro empeño en garantizar la exactitud del contenido, es posible que se produzcan errores. Si ha encontrado un error en este libro, le agradeceríamos que nos lo comunicara. Para ello, visite http://www.packtpub.com/submit-errata, seleccione su libro, haga clic en el enlace Errata Submission Form e introduzca los datos.
Piratería: Si encuentra alguna copia ilegal de nuestras obras en cualquier forma en Internet, le agradeceríamos que nos facilitara la dirección de ubicación o el nombre del sitio web. Por favor, póngase en contacto con nosotros en [email protected] con un enlace al material pirateado.
Si está interesado en convertirse en autor: Si hay un tema en el que tiene experiencia y está interesado en escribir o contribuir en algún libro, visite http://authors.packtpub.com.
Una vez que haya leído Machine Learning con PyTorch y Scikit-Learn, ¡nos gustaría conocer su opinión! Entre en Amazon y comparta su opinión sobre el libro.
Su opinión es importante para nosotros y para la comunidad tecnológica y nos ayudará a tener la seguridad de que ofrecemos un contenido de excelente calidad.
En mi opinión, el aprendizaje automático, la ciencia de los algoritmos que dan sentido a los datos y su aplicación es el campo más apasionante de la informática. Vivimos en una época en la que se generan datos profusamente. Utilizando algoritmos de autoaprendizaje del campo del aprendizaje automático podemos convertir estos datos en conocimiento. Gracias a las numerosas y potentes bibliotecas de código abierto que se han desarrollado en los últimos años, este es uno de los mejores momentos para introducirse en el campo del aprendizaje automático y aprender a utilizar potentes algoritmos para detectar patrones en los datos y hacer pronósticos sobre acontecimientos futuros.
En este capítulo, aprenderá los principales conceptos y los diferentes tipos de aprendizaje automático. Junto con una introducción básica de la terminología necesaria, sentaremos las bases para utilizar con éxito las técnicas de aprendizaje automático para la resolución de problemas prácticos.
En este capítulo, trataremos los siguientes temas:
• Conceptos generales del aprendizaje automático
• Los tres tipos de aprendizaje y la terminología básica
• Los componentes para diseñar con éxito sistemas de aprendizaje automático
• Instalación y configuración de Python para el análisis de datos y el aprendizaje automático
En esta era, caracterizada por una moderna tecnología, hay un recurso que tenemos en abundancia: una gran cantidad de datos (estructurados y no estructurados). En la segunda mitad del siglo XX, el aprendizaje automático evolucionó como un subcampo de la inteligencia artificial (IA), que implica algoritmos de autoaprendizaje que obtienen conocimiento de los datos para hacer pronósticos.
En lugar de que sean las personas las que obtengan reglas de forma artesanal y desarrollen modelos a partir del análisis de grandes cantidades de datos, el aprendizaje automático ofrece una alternativa más eficiente para extraer el conocimiento contenido en los datos, con la intención de mejorar gradualmente el rendimiento de los modelos predictivos y adoptar decisiones basadas en los datos.
El aprendizaje automático no solo es cada vez más importante en la investigación en informática, sino que también desempeña un papel cada vez más relevante en nuestra vida cotidiana. Gracias al aprendizaje automático, disfrutamos de potentes filtros de correo electrónico, cómodos programas de reconocimiento de texto y voz, motores de búsqueda fiables en la web, recomendaciones para ver películas entretenidas, ingresos de depósitos a través del móvil, estimación de tiempos de entrega de pedidos de comidas y muchas otras aplicaciones. Es de esperar que pronto incorporemos a esta lista coches seguros y eficientes que conduzcan de forma autónoma. También se han hecho importantes progresos en las aplicaciones médicas; por ejemplo, los investigadores han demostrado que los modelos de aprendizaje profundo pueden detectar el cáncer de piel con una precisión casi humana (https://www.nature.com/articles/nature21056). Otro hito lo han conseguido recientemente los investigadores de Deep-Mind, al utilizar el aprendizaje profundo para pronosticar las estructuras de las proteínas en 3D, superando por un margen considerable los enfoques que tienen como base la física (https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology). Si bien el pronóstico preciso de la estructura de las proteínas en 3D desempeña un papel esencial en la investigación biológica y farmacéutica, recientemente ha habido muchas otras aplicaciones importantes del aprendizaje automático en la atención sanitaria. Por ejemplo, los investigadores han diseñado sistemas para pronosticar las necesidades de oxígeno de los pacientes con COVID-19 con hasta cuatro días de antelación, para ayudar a los hospitales a asignar recursos a quienes los necesitan (https://ai.facebook.com/blog/new-ai-research-to-help-predict-covid-19-resource-needs-from-a-series-of-x-rays/). Otro tema actual importante es la lucha contra cambio climático, que representa uno de los mayores y más críticos desafíos. Hoy en día, muchos esfuerzos se dirigen a desarrollar sistemas inteligentes para combatirlo (https://www.forbes.com/sites/robtoews/2021/06/20/these-are-the-startups-applying-ai-to-tackle-climate-change). Uno de los muchos enfoques para abordar el cambio climático es el campo emergente de la agricultura de precisión; los investigadores pretenden diseñar sistemas de aprendizaje automático basados en la visión por ordenador para optimizar el despliegue de recursos con el fin de minimizar el uso y el desperdicio de fertilizantes.
En esta sección, examinaremos los tres tipos de aprendizaje automático: el aprendizaje supervisado, el aprendizaje no supervisado y el aprendizaje reforzado. Conoceremos las diferencias fundamentales entre los tres tipos de aprendizaje y, mediante ejemplos conceptuales, desarrollaremos la comprensión de los ámbitos de problemas prácticos a los que pueden aplicarse:
Figura 1.1Los tres tipos de aprendizaje automático.
El objetivo principal del aprendizaje supervisado es descubrir un modelo a partir de datos de entrenamiento etiquetados, que nos permita formular pronósticos sobre datos ocultos o futuros. En este caso, el término «supervisado» se refiere a un conjunto de ejemplos de entrenamiento (entradas de datos) en el que ya se conocen las señales de salida deseadas (etiquetas). El aprendizaje supervisado es el proceso de modelar la relación entre las entradas de datos y las etiquetas. Así pues, también podemos definir el aprendizaje supervisado como un «aprendizaje de etiquetas».
La Figura 1.2 resume el flujo de trabajo típico del aprendizaje supervisado, en el que los datos de entrenamiento etiquetados se pasan a un algoritmo de aprendizaje automático para que ajuste un modelo predictivo que pueda hacer pronósticos sobre nuevas entradas de datos sin etiquetar:
Figura 1.2Proceso del aprendizaje supervisado.
Considerando el ejemplo del filtrado de spam, podemos entrenar un modelo utilizando el algoritmo de aprendizaje automático supervisado en una recopilación de correos electrónicos etiquetados, que se marcan correctamente como spam o no spam, para pronosticar si un nuevo correo electrónico pertenece a una de las dos categorías. A una tarea de aprendizaje supervisado con etiquetas de clase discretas, como el ejemplo anterior de filtrado de spam, también se la denomina «tarea de clasificación». Otra subcategoría de aprendizaje supervisado es la regresión, en la que la señal de salida es un valor continuo.
La clasificación es una subcategoría del aprendizaje supervisado cuyo objetivo es pronosticar las etiquetas de clase categóricas de las nuevas instancias o puntos de datos basándose en observaciones anteriores. Estas etiquetas de clase son valores discretos y no ordenados que pueden entenderse como pertenecientes a grupos de puntos de datos. El ejemplo anteriormente mencionado de la detección de spam en el correo electrónico representa un ejemplo típico de una tarea de clasificación binaria, en la que el algoritmo de aprendizaje automático aprende un conjunto de reglas para distinguir entre dos clases posibles: correos electrónicos spam y no spam.
La Figura 1.3 ilustra el concepto de una tarea de clasificación binaria de 30 ejemplos de entrenamiento dados; 15 ejemplos de entrenamiento están etiquetados como clase A y los otros 15 ejemplos están etiquetados como clase B. En este escenario, nuestro conjunto de datos es bidimensional, lo que significa que cada ejemplo tiene dos valores asociados: x1 y x2. Ahora, podemos utilizar un algoritmo de aprendizaje automático supervisado para descubrir una regla (la frontera de decisión representada como una línea discontinua) que pueda separar esas dos clases y clasificar los nuevos datos en cada una de esas dos categorías dados sus valores x1 y x2.
Figura 1.3Clasificación de un nuevo punto de datos.
Sin embargo, el conjunto de etiquetas de clase no tiene por qué ser de naturaleza binaria. El modelo predictivo descubierto por un algoritmo de aprendizaje supervisado puede asignar cualquier etiqueta de clase que se haya presentado en el conjunto de datos de entrenamiento a un nuevo punto de datos o instancia sin etiquetar.
Un ejemplo típico de tarea de clasificación multiclase es el reconocimiento de caracteres escritos a mano. Podemos recopilar un conjunto de datos de entrenamiento que consiste en varios ejemplos escritos a mano de cada letra del alfabeto. Las letras (A, B, C, etc.) representarán las diferentes categorías desordenadas o etiquetas de clase que queremos pronosticar. Ahora, si un usuario proporciona un nuevo carácter escrito a mano a través de un dispositivo de entrada, nuestro modelo predictivo podrá pronosticar la letra correcta del alfabeto con cierta precisión. Sin embargo, nuestro sistema de aprendizaje automático no podrá reconocer correctamente ninguno de los dígitos entre el 0 y el 9, por ejemplo, si no forman parte del conjunto de datos de entrenamiento.
En la sección anterior hemos aprendido que la tarea de clasificación consiste en asignar etiquetas categóricas y desordenadas a las instancias. Un segundo tipo de aprendizaje supervisado es el pronóstico de resultados continuos, que también se denomina análisis de regresión. En el análisis de regresión, nos dan una serie de variables predictoras (explicativas) y una variable de respuesta continua (resultado), y tratamos de encontrar una relación entre esas variables que nos permita pronosticar el resultado.
Hay que tener en cuenta que, en el campo del aprendizaje automático, las variables predictivas se denominan normalmente «características», y las variables de respuesta suelen denominarse «variables objetivo». Adoptaremos estas convenciones a lo largo del libro. Por ejemplo, supongamos que estamos interesados en pronosticar las puntuaciones de los estudiantes en el examen SAT de matemáticas. (El SAT es un examen estandarizado que se utiliza con frecuencia para la admisión a la universidad en Estados Unidos). Si existe una relación entre el tiempo de estudio para el examen y las puntuaciones finales, podemos utilizarla como dato de entrenamiento para descubrir un modelo que utilice el tiempo de estudio para pronosticar las puntuaciones del examen de los futuros estudiantes que tienen previsto realizarlo.
Regresión hacia la media
El término «regresión» lo acuñó Francis Galton en su artículo «Regression towards Mediocrity in Hereditary Stature», en 1886. Galton describió el fenómeno biológico de que la varianza de la estatura en una población no aumenta con el tiempo.
Observó que la estatura de los padres no se transmite a sus hijos, sino que la estatura de estos retrocede hacia la media de la población.
La Figura 1.4 ilustra el concepto de regresión lineal. Dada una variable característica, x, y una variable objetivo, y, ajustamos una línea recta a estos datos que minimiza la distancia —más frecuentemente la distancia media al cuadrado— entre los puntos de datos y la línea de ajuste.
Ahora podemos utilizar la intersección y la pendiente que hemos descubierto de estos datos para pronosticar la variable objetivo de los nuevos datos:
Figura 1.4Ejemplo de regresión lineal.
Otro tipo de aprendizaje automático es el aprendizaje reforzado. En el aprendizaje reforzado, el objetivo es desarrollar un sistema (agente) que mejore su rendimiento en función de las interacciones con el entorno. Como la información sobre el estado actual del entorno suele incluir también una señal de recompensa, podemos considerar el aprendizaje reforzado como un campo relacionado con el aprendizaje supervisado. Sin embargo, en el aprendizaje reforzado, esta retroalimentación no es la etiqueta o el valor real, sino una medida de lo bien que la función de recompensa ha medido la acción. A través de su interacción con el entorno, un agente puede utilizar el aprendizaje reforzado para aprender una serie de acciones que maximicen esta recompensa mediante un enfoque exploratorio de ensayo y error o una planificación deliberativa.
Un ejemplo conocido de aprendizaje reforzado es un programa de ajedrez. En este caso, el agente decide una serie de movimientos en función del estado del tablero (entorno), y la recompensa puede definirse como ganar o perder al final de la partida:
Figura 1.5Proceso de aprendizaje reforzado.
Hay muchos subtipos diferentes de aprendizaje reforzado. Sin embargo, un esquema general es aquel en el que el agente intenta maximizar la recompensa a través de una serie de interacciones con el entorno. Cada estado puede asociarse a una recompensa positiva o negativa, y una recompensa puede definirse como el logro de un objetivo general, como ganar o perder una partida de ajedrez. Por ejemplo, en el ajedrez, el resultado de cada movimiento puede considerarse como un estado diferente del entorno.
Para profundizar en el ejemplo del ajedrez, podemos observar que ciertas configuraciones en el tablero se asocian con estados que probablemente conducirán a la victoria (por ejemplo, eliminar una pieza de ajedrez del oponente o amenazar a la reina). Otras posiciones, sin embargo, se asocian a estados que, con mayor probabilidad, llevarán a perder la partida (como la pérdida de una pieza de ajedrez ante el adversario en el siguiente turno). Ahora bien, en el juego, la recompensa —ya sea positiva por ganar o negativa por perder— no se dará hasta el final de la partida. Además, la recompensa final también dependerá de cómo juegue el adversario. Por ejemplo, el oponente puede sacrificar a la reina pero finalmente ganar la partida.
En resumen, el aprendizaje reforzado consiste en aprender a elegir una serie de acciones que maximicen la recompensa total, que puede obtenerse inmediatamente después de realizar una acción o mediante una retroalimentación retardada.
En el aprendizaje supervisado, cuando entrenamos un modelo, conocemos de antemano la respuesta correcta (la etiqueta o variable objetivo) y, en el aprendizaje reforzado, definimos una medida de recompensa para determinadas acciones realizadas por el agente. En el aprendizaje no supervisado, sin embargo, nos enfrentamos a datos no etiquetados o de estructura desconocida. Gracias a las técnicas de aprendizaje no supervisado, podemos explorar la estructura de los datos para extraer información importante sin la guía de una variable de resultado conocida o una función de recompensa.
El agrupamiento es una técnica de análisis exploratorio de datos o de descubrimiento de patrones que nos permite organizar una gran cantidad de información en subgrupos significativos (clústeres) sin tener ningún conocimiento previo de su pertenencia al grupo. Cada clúster que surge durante el análisis define un grupo de objetos que comparten un cierto grado de similitud, pero que son más disímiles a los objetos de otros clústeres (razón por la cual el clustering también se denomina a veces «clasificación no supervisada»). El agrupamiento es una gran técnica para estructurar la información y establecer relaciones coherentes de los datos. Por ejemplo, permite a los profesionales del marketing descubrir grupos de clientes en función de sus intereses, con el fin de desarrollar programas de marketing distintos.
La Figura 1.6 ilustra cómo se puede aplicar el clustering para organizar los datos no etiquetados en tres grupos o clústeres distintos (A, B y C, en orden arbitrario), basados en la similitud de sus características, x1 y x2.
Figura 1.6Cómo funciona el agrupamiento.
Otro subcampo del aprendizaje no supervisado es la reducción de la dimensionalidad. A menudo, trabajamos con datos de alta dimensionalidad (cada observación viene con un elevado número de medidas), que pueden suponer un reto —tanto para el caso de un espacio de almacenamiento limitado como para el rendimiento computacional de los algoritmos de aprendizaje automático—. La reducción de la dimensionalidad no supervisada es un enfoque que se utiliza frecuentemente en el preprocesamiento de características para eliminar el ruido de los datos, que puede degradar el rendimiento predictivo de ciertos algoritmos. La reducción de la dimensionalidad comprime los datos a un subespacio dimensional más pequeño, conservando la mayor parte de la información relevante.
A veces, la reducción de la dimensionalidad también puede ser útil para visualizar los datos; por ejemplo, un conjunto de características con muchas dimensiones puede proyectarse en espacios de características de una, dos o tres dimensiones para visualizarlo mediante gráficos de dispersión o histogramas en 2D o 3D. La Figura 1.7 muestra un ejemplo en el que se aplicó la reducción no lineal de la dimensionalidad para comprimir un rollo suizo 3D en un nuevo subespacio de características 2D.
Figura 1.7Ejemplo de reducción de la dimensionalidad de tres a dos dimensiones.
Ahora que hemos hablado de las tres grandes categorías del aprendizaje automático (aprendizaje supervisado, no supervisado y reforzado), echemos un vistazo a la terminología básica que utilizaremos a lo largo del libro. La siguiente subsección presenta los términos habituales que utilizaremos para referirnos a los diferentes aspectos de un conjunto de datos, así como la notación matemática para comunicarnos de forma más precisa y eficiente.
Dado que el aprendizaje automático es un campo muy extenso e interdisciplinar, más pronto que tarde se encontrarán algunos términos diferentes que se refieren a los mismos conceptos. La segunda subsección recoge muchos de los términos utilizados en la literatura sobre aprendizaje automático, que pueden serle útiles como documento de referencia cuando lea publicaciones sobre este tema.
La Figura 1.8