Machine Learning con PyTorch y Scikit-Learn - Sebastian Raschka - E-Book

Machine Learning con PyTorch y Scikit-Learn E-Book

Sebastian Raschka

0,0
39,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

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:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 936

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



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

Prólogo

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

Colaboradores

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.

Otros colaboradores

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.

Sobre el revisor

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 Discord del libro

Ú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

Contenidos

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

Prefacio

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.

A quién va dirigido el libro

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.

De qué trata el libro

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.

Para aprovechar al máximo el libro

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.

Descarga de los archivos de códigos de ejemplo

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.

Descarga de las imágenes en color

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.

Convenciones

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.

Póngase en contacto con nosotros

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.

Comparta su opinión

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.

1

Dotar a los ordenadores de la capacidad de aprender de los datos

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

Creación de máquinas inteligentes para transformar los datos en conocimiento

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.

Los tres tipos de aprendizaje automático

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.

Formulación de pronósticos sobre el futuro con el aprendizaje supervisado

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.

Clasificación para pronosticar etiquetas de clase

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.

Regresión para el pronóstico de resultados continuos

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.

Resolución de problemas interactivos con el aprendizaje reforzado

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.

Descubrimiento de estructuras ocultas con el aprendizaje no supervisado

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.

Detección de subgrupos mediante el agrupamiento (clustering)

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.

Reducción de la dimensionalidad para comprimir los datos

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.

Introducción a la terminología básica y la notación

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.

Notación y convenciones que se utilizan en el libro

La Figura 1.8