Python Machine Learning - Vahid Mirjalili - E-Book

Python Machine Learning E-Book

Vahid Mirjalili

0,0

Beschreibung

El aprendizaje automático está invadiendo el mundo del software. Si quieres entender y trabajar la vanguardia del aprendizaje automático, las redes neuronales y el aprendizaje profundo, esta segunda edición del bestseller Python Machine Learning, es tu libro. Modernizado y ampliado para incluir las tecnologías de código abierto más recientes, como scikit-learn, Keras y TensorFlow, este manual proporciona el conocimiento práctico y las técnicas necesarias para crear eficaces aplicaciones de aprendizaje automático y aprendizaje profundo en Python. El conocimiento y la experiencia únicos de Sebastian Raschka y Vahid Mirjalili presentan los algoritmos de aprendizaje automático y aprendizaje profundo, antes de continuar con temas avanzados en análisis de datos. Combinan los principios teóricos del aprendizaje automático con un enfoque práctico de codificación para una comprensión completa de la teoría del aprendizaje automático y la implementación con Python. Aprenderás a: Explorar y entender los frameworks clave para la ciencia de datos, el aprendizaje automático y el aprendizaje profundo Formular nuevas preguntas sobre datos con modelos de aprendizaje automático y redes neuronales Aprovechar el poder de las últimas librerías de código abierto de Python para aprendizaje automático Dominar la implementación de redes neuronales profundas con la librería de TensorFlow Incrustar modelos de aprendizaje automáticos en aplicacions web accesibles Predecir resultados objetivos continuos con análisis de regresión Descubrir patrones ocultos y estructuras en datos con agrupamientos Analizar imágenes mediante técnicas de aprendizaje profundo Profundizar en datos de medios sociales y textuales con el análisis de sentimientos

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 721

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
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.



Aprendizaje automáticocon Python

Aprendizaje automático y aprendizaje profundo con Python, scikit-learn y TensorFlow

Segunda edición

Aprendizaje automáticocon Python

Aprendizaje automático y aprendizaje profundo con Python, scikit-learn y TensorFlow

Sebastian Raschka

Vahid Mirjalili

Segunda edición original publicada en inglés por Packt Publishing Ltd. con el título: Python Machine Learning, © 2017 Sebastian Raschka y Vahid Mirjalili

Título de la edición en español: Aprendizaje automático con Python

Segunda edición en español, año 2019

© 2019 MARCOMBO, S.A.

www.marcombo.com

Traducción: Sònia Llena

Revisor técnico: Ferran Fàbregas

Correctora: Anna Alberola

Directora de producción: M.a Rosa Castillo

«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: 978-84-267-2720-6

D.L.: B-27539-2018

Impreso en Servicepoint

Printed in Spain

Sobre los autores

Sebastian Raschka, autor del libro líder de ventas Python Machine Learning [Aprendizaje automático con Python], cuenta con años de experiencia en codificación en Python, y ha impartido muchos seminarios sobre aplicaciones prácticas de ciencia de datos, aprendizaje automático y aprendizaje profundo. También es autor de un tutorial de aprendizaje automático en SciPy (el congreso líder en computación científica en Python).

Si bien los proyectos académicos de investigación de Sebastian se centran principalmente en la resolución de problemas en biología computacional, lo que a él le gusta es escribir y hablar sobre ciencia de datos, aprendizaje automático y Python en general; le motiva ayudar a la gente a que desarrolle soluciones basadas en datos sin tener necesariamente una base en aprendizaje automático.

Su trabajo y sus contribuciones han sido recientemente reconocidos con el premio Departmental outstanding graduate student 2016-2017, así como con el ACM Computing Reviews' Best of 2016. En su tiempo libre, a Sebastian le gusta colaborar en proyectos de código abierto, y los métodos que ha implementado se utilizan actualmente con éxito en concursos sobre aprendizaje automatico, como Kaggle.

Me gustaría aprovechar esta oportunidad para dar las gracias a la excelente comunidad de Python y a los desarrolladores de paquetes de código abierto que me han ayudado a crear el entorno perfecto para la investigación científica y la ciencia de datos. También quiero dar las gracias a mis padres, quienes siempre me han animado y me han apoyado para seguir el camino y la carrera que tanto me apasionaba.

Quiero dar las gracias especialmente a los principales desarrolladores de scikit-learn. Como colaborador en su proyecto, he tenido el placer de trabajar con personas excelentes que no solo tienen grandes conocimientos sobre el aprendizaje automático sino que también son grandes programadores. Por último, me gustaría dar las gracias a Elie Kawerk, quien ha revisado de forma voluntaria este libro y me ha proporcionado un valioso feedback par los nuevos capítulos.

Vahid Mirjalili obtuvo su doctorado en ingeniería mecánica trabajando en métodos innovadores para simulaciones computacionales a gran escala de estructuras moleculares. Actualmente, centra su trabajo de investigación en aplicaciones de aprendizaje automático en distintos proyectos de visión por ordenador en el departamento de ciencia computacional e ingeniería de la Michigan State University.

Vahid eligió Python como su lenguaje de programación número uno, y durante su carrera de investigación y académica ha adquirido una gran experiencia en la codificación en Python. Aprendió a programar con Python en las clases de ingeniería en la Michigan State University, que le dieron la oportunidad de ayudar a otros estudiantes a entender distintas estructuras de datos y a desarrollar eficazmente código en Python.

Si bien gran parte de los intereses de investigación de Vahid se centran en las aplicaciones de aprendizaje profundo y de visión por ordenador, siente interés especialmente por equilibrar técnicas de aprendizaje profundo para ampliar la privacidad en datos biométricos, como las imágenes del rostro para que la información no se revele más de lo que los usuarios intentan revelar. Además, también colabora con un equipo de ingenieros que trabajan en coches autónomos, donde él diseña modelos de redes neuronales para la fusión de imágenes multiespectrales para la detección de peatones.

Me gustaría dar las gracias a mi mentor de doctorado, Dr. Arun Ross, por darme la oportunidad de trabajar en nuevos problemas en su laboratorio de investigación. También quiero dar las gracias al Dr. Vishnu Boddeti por despertar mi interés en el aprendizaje profundo y desmitificar sus conceptos básicos.

Índice

Sobre los autores

Introducción

Qué contiene este libro

Qué necesitas para este libro

A quién va dirigido este libro

Convenciones

Descargar el código de ejemplo y las imágenes en color de este libro

Capítulo 1: Dar a los ordenadores el poder de aprender de los datos

Crear máquinas inteligentes para transformar datos en conocimiento

Los tres tipos de aprendizaje automático

Hacer predicciones sobre el futuro con el aprendizaje supervisado

Clasificación para predecir etiquetas de clase

Regresión para predecir resultados continuos

Resolver problemas interactivos con aprendizaje reforzado

Descubrir estructuras ocultas con el aprendizaje sin supervisión

Encontrar subgrupos con el agrupamiento

Reducción de dimensionalidad para comprimir datos

Introducción a la terminología básica y las notaciones

Una hoja de ruta para crear sistemas de aprendizaje automático

Preprocesamiento: Dar forma a los datos

Entrenar y seleccionar un modelo predictivo

Evaluar modelos y predecir instancias de datos no vistos

Utilizar Python para el aprendizaje automático

Utilizar la distribución y el gestor de paquetes Anaconda de Python

Paquetes para cálculo científico, ciencia de datos y aprendizaje automático

Resumen

Capítulo 2: Entrenar algoritmos simples de aprendizaje automático para clasificación

Neuronas artificiales: un vistazo a los inicios del aprendizaje automático

La regla de aprendizaje del perceptrón

Implementar un algoritmo de aprendizaje de perceptrón en Python

Una API perceptrón orientada a objetos

Entrenar un modelo de perceptrón en el conjunto de datos Iris

Neuronas lineales adaptativas y la convergencia del aprendizaje

Minimizar funciones de coste con el descenso de gradiente

Implementar Adaline en Python

Mejorar el descenso de gradiente mediante el escalado de características

Aprendizaje automático a gran escala y descenso de gradiente estocástico

Resumen

Capítulo 3: Un recorrido por los clasificadores de aprendizaje automático con scikit-learn

Elegir un algoritmo de clasificación

Primeros pasos con scikit-learn:entrenar un perceptrón

Modelar probabilidades de clase mediante regresión logística

Intuición en regresión logística y probabilidades condicionales

Aprender los pesos de la función de coste logística

Convertir una implementación Adaline en un algoritmo para regresión logística

Entrenar un modelo de regresión logística con scikit-learn

Abordar el sobreajuste con la regularización

Margen de clasificación máximo con máquinas de vectores de soporte

Margen máximo de intuición

Tratar un caso separable no lineal con variables flexibles

Implementaciones alternativas en scikit-learn

Resolver problemas no lineales con una SVM kernelizada

Métodos kernel para datos inseparables lineales

El truco de kernel para encontrar hiperplanos separados en un espacio de mayor dimensionalidad

Aprendizaje basado en árboles de decisión

Maximizar la ganancia de información: sacar el mayor partido de tu inversión

Crear un árbol de decisión

Combinar árboles de decisión múltiples mediante bosques aleatorios

K-vecinos más cercanos: un algoritmo de aprendizaje vago

Resumen

Capítulo 4: Generar buenos modelos de entrenamiento: preprocesamiento de datos

Tratar con datos ausentes

Eliminar muestras o características con valores ausentes

Imputar valores ausentes

Entender la API de estimador de scikit-learn

Trabajar con datos categóricos

Características nominales y ordinales

Crear un conjunto de datos de ejemplo

Mapear características ordinales

Codificar etiquetas de clase

Realizar una codificación en caliente sobre características nominales

Dividir un conjunto de datos en conjuntos de prueba y de entrenamiento individuales

Ajustar las características a la misma escala

Seleccionar características significativas

Una interpretación geométrica de la regularización L2

Soluciones dispersas con la regularización L1

Algoritmos de selección de características secuenciales

Evaluar la importancia de las características con bosques aleatorios

Resumen

Capítulo 5: Comprimir datos mediante la reducción de dimensionalidad

Reducción de dimensionalidad sin supervisión mediante el análisis de componentes principales

Los pasos esenciales que se esconden detrás del análisis de componentes principales

Extraer los componentes principales paso a paso

Varianza total y explicada

Transformación de características

Análisis de componentes principales en scikit-learn

Compresión de datos supervisada mediante análisis discriminante lineal

Análisis de componentes principales frente a análisis discriminante lineal

Cómo funciona interiormente el análisis discriminante lineal

Calcular las matrices de dispersión

Seleccionar discriminantes lineales para el nuevo subespacio de características

Proyectar muestras en el nuevo espacio de características

ADL con scikit-learn

Utilizar el análisis de componentes principales con kernels para mapeos no lineales

Funciones kernel y el truco del kernel

Implementar un análisis de componentes principales con kernels en Python

Ejemplo 1: separar formas de media luna

Ejemplo 2: separar círculos concéntricos

Proyectar nuevos puntos de datos

Análisis de componentes principales con kernel en scikit-learn

Resumen

Capítulo 6: Aprender las buenas prácticas para la evaluación de modelos y el ajuste de hiperparámetros

Simplificar flujos de trabajo con pipelines

Combinar transformadores y estimadores en un pipeline

Utilizar la validación cruzada de K iteraciones para evaluar el rendimiento de un modelo

El método de retención

Validación cruzada de k iteraciones

Depurar algoritmos con curvas de validación y aprendizaje

Diagnosticar problemas de sesgo y varianza con curvas de aprendizaje

Resolver el sobreajuste y el subajuste con curvas de validación

Ajustar los modelos de aprendizaje automático con la búsqueda de cuadrículas

Ajustar hiperparámetros con la búsqueda de cuadrículas

Selección de algoritmos con validación cruzada anidada

Observar diferentes métricas de evaluación de rendimiento

Leer una matriz de confusión

Optimizar la exactitud y la exhaustividad de un modelo de clasificación

Representar una característica operativa del receptor

Métricas de calificación para clasificaciones multiclase

Tratar con el desequilibrio de clases

Resumen

Capítulo 7: Combinar diferentes modelos para el aprendizaje conjunto

Aprender con conjuntos

Combinar clasificadores mediante el voto mayoritario

Implementar un sencillo clasificador de voto mayoritario

Utilizar el principio de voto mayoritario para hacer predicciones

Evaluar y ajustar el clasificador conjunto

Bagging: construir un conjunto de clasificadores a partir de muestras bootstrap

El bagging resumido

Aplicar el bagging para clasificar muestras en el conjunto de datos Wine

Potenciar los clasificadores débiles con el boosting adaptado

Cómo trabaja el boosting

Aplicar AdaBoost con scikit-learn

Resumen

Capítulo 8: Aplicar el aprendizaje automático para el análisis de sentimiento

Preparar los datos de críticas de cine de IMDb para el procesamiento de texto

Obtener el conjunto de datos de críticas de cine

Preprocesar el conjunto de datos de películas en un formato adecuado

Introducir el modelo «bolsa de palabras»

Transformar palabras en vectores de características

Relevancia de las palabras mediante frecuencia de término–frecuencia inversa de documento

Limpiar datos textuales

Procesar documentos en componentes léxicos

Entrenar un modelo de regresión logística para clasificación de documentos

Trabajar con datos más grandes: algoritmos online y aprendizaje out-of-core

Modelado de temas con Latent Dirichlet Allocation

Descomponer documentos de textos con LDA

LDA con scikit-learn

Resumen

Capítulo 9: Incrustar un modelo de aprendizaje automático en una aplicación web

Serializar estimadores de scikit-learn ajustados

Configurar una base de datos SQLite para el almacenamiento de datos

Desarrollar una aplicación web con Flask

Nuestra primera aplicación web con Flask

Validación y renderizado de formularios

Configurar la estructura del directorio

Implementar una macro mediante el motor de plantillas Jinja2

Añadir estilos con CSS

Crear la página resultante

Convertir el clasificador de críticas de cine en una aplicación web

Archivos y carpetas: observar el árbol de directorios

Implementar la aplicación principal como app.py

Preparar el formulario de críticas

Crear una plantilla de página de resultados

Desplegar la aplicación web en un servidor público

Crear una cuenta de PythonAnywhere

Cargar la aplicación del clasificador de películas

Actualizar el clasificador de películas

Resumen

Capítulo 10: Predicción de variables de destino continuas con análisis de regresión

Introducción a la regresión lineal

Regresión lineal simple

Regresión lineal múltiple

Explorar el conjunto de datos Housing

Cargar el conjunto Housing en un marco de datos

Visualizar las características importantes de un conjunto de datos

Observar las relaciones mediante una matriz de correlación

Implementar un modelo de regresión lineal de mínimos cuadrados ordinarios

Resolver la regresión para parámetros de regresión con el descenso del gradiente

Estimar el coeficiente de un modelo de regresión con scikit-learn

Ajustar un modelo de regresión robusto con RANSAC

Evaluar el rendimiento de los modelos de regresión lineal

Utilizar métodos regularizados para regresión

Convertir un modelo de regresión lineal en una curva: la regresión polinomial

Añadir términos polinomiales con scikit-learn

Modelar relaciones no lineales en el conjunto de datos Housing

Tratar con relaciones no lineales mediante bosques aleatorios

Regresión de árbol de decisión

Regresión con bosques aleatorios

Resumen

Capítulo 11: Trabajar con datos sin etiquetar: análisis de grupos

Agrupar objetos por semejanza con k-means

Agrupamiento k-means con scikit-learn

Una manera más inteligente de colocar los centroides de los grupos iniciales con k-means++

Agrupamiento pesado frente a no pesado

Utilizar el método elbow para encontrar el número óptimo de grupos

Cuantificar la calidad del agrupamiento mediante gráficos de silueta

Organizar agrupamientos como un árbol jerárquico

Agrupar los grupos de manera ascendente

Realizar agrupamientos jerárquicos en una matriz de distancias

Adjuntar dendrogramas a un mapa de calor

Aplicar un agrupamiento aglomerativo con scikit-learn

Ubicar regiones de alta densidad con DBSCAN

Resumen

Capítulo 12: Implementar una red neuronal artificial multicapa desde cero

Modelar funciones complejas con redes neuronales artificiales

Resumen de una red neuronal de una capa

Activar una red neuronal mediante la propagación hacia delante

Clasificar dígitos manuscritos

Obtener el conjunto de datos MNIST

Implementar un perceptrón multicapa

Entrenar una red neuronal artificial

Calcular la función de coste logística

Desarrollar tu intuición para la propagación hacia atrás

Entrenar redes neuronales mediante la propagación hacia atrás

Sobre la convergencia en redes neuronales

Unas últimas palabras sobre la implementación de redes neuronales

Resumen

Capítulo 13: Paralelización de entrenamiento de redes neuronales con TensorFlow

TensorFlow y rendimiento de entrenamiento

¿Qué es TensorFlow?

Cómo aprenderemos TensorFlow

Primeros pasos con TensorFlow

Trabajar con estructuras de matriz

Desarrollar un modelo simple con la API de bajo nivel de TensorFlow

Entrenar redes neuronales eficazmente con las API de alto nivel de TensorFlow

Crear redes neuronales multicapa mediante la API Layers de TensorFlow

Desarrollar una red neuronal multicapa con Keras

Elegir funciones de activación para redes multicapa

Resumen de la función logística

Estimar probabilidades de clase en clasificaciones multiclase con softmax

Ampliar el espectro de salida con una tangente hiperbólica

Activación de la unidad lineal rectificada

Resumen

Capítulo 14: Ir más lejos: la mecánica de TensorFlow

Características clave de TensorFlow

Rango y tensores de TensorFlow

Cómo obtener la dimensión y la forma de un tensor

Entender los grafos computacionales de TensorFlow

Marcadores de posición en TensorFlow

Definir marcadores de posición

Alimentar marcadores de posición con datos

Definir marcadores de posición para matrices de datos con diferentes tamaños de lote

Variables en TensorFlow

Definir variables

Inicializar variable

Alcance de la variable

Reutilizar variables

Crear un modelo de regresión

Ejecutar objetos en un grafo de TensorFlow mediante sus nombres

Almacenar y restablecer un modelo en TensorFlow

Transformar tensores como matrices de datos multidimensionales

Utilizar la mecánica de control de flujopara crear grafos

Visualizar el grafo con TensorBoard

Ampliar tu experiencia en TensorBoard

Resumen

Capítulo 15: Clasificar imágenes con redes neuronales convolucionales profundas

Bloques de construcción de redes neuronales convolucionales

Entender las CNN y conocer las jerarquías de características

Realizar convoluciones discretas

Realizar una convolución discreta en una dimensión

El efecto del relleno de ceros en una convolución

Determinar el tamaño de la salida de convolución

Realizar un convolución discreta en 2D

Submuestreo

Juntarlo todo para crear una CNN

Trabajar con entradas múltiples o canales de color

Regularizar una red neuronal con la eliminación

Implementar una red neuronal convolucional profunda con TensorFlow

La arquitectura de una CNN multicapa

Cargar y preprocesar los datos

Implementar una CNN en la API de TensorFlow de bajo nivel

Implementar una CNN en la API Layers de TensorFlow

Resumen

Capítulo 16: Modelado de datos secuenciales mediante redes neuronales recurrentes

Introducir datos secuenciales

Modelar datos secuenciales: el orden sí importa

Representar secuencias

Las diferentes categorías del modelado de secuencias

RNN para modelar secuencias

Entender la estructura y el flujo de una RNN

Calcular activaciones en una RNN

Los retos del aprendizaje de interacciones de largo alcance

Unidades de LSTM

Implementar una RNN multicapa para modelar secuencias en TensorFlow

Proyecto uno: crear un análisis de sentimiento de las críticas de películas IMDb con RNN multicapa

Preparar los datos

Embedding

Construir un modelo de RNN

El constructor de la clase SentimentRNN

El método build

Paso 1: definir celdas RNN multicapa

Paso 2: definir los estados iniciales para las celdas RNN

Paso 3: crear la RNN utilizando las celdas RNN y sus estados

El método train

El método predict

Instanciar la clase SentimentRNN

Entrenar y optimizar el análisis de sentimiento de un modelo RNN

Proyecto dos: implementar una RNN para el modelado de lenguaje a nivel de carácter en TensorFlow

Preparar los datos

Construir un modelo RNN a nivel de carácter

El constructor

El método build

El método train

El método sample

Crear y entrenar el modelo CharRNN

El modelo CharRNN en el modo de muestreo

Resumen del capítulo y del libro

ÍNDICE ANALÍTICO

Dar a los ordenadores el poder de aprender de los datos

En mi opinión, el aprendizaje automático –la aplicación y ciencia de los algoritmos que da sentido a los datos– es el campo más apasionante de todas las ciencias computacionales. Vivimos en una época en la cual los datos llegan en abundancia; utilizando algoritmos de autoaprendizaje del campo del aprendizaje automático podemos convertir estos datos en conocimiento. Gracias a las múltiples y potentes librerías de código abierto que han sido desarrolladas en los últimos años, probablemente no ha habido un momento mejor para acceder al campo del aprendizaje automático y aprender cómo utilizar potentes algoritmos para detectar patrones de datos y hacer predicciones sobre acontecimientos futuros.

En este capítulo, aprenderás los principales conceptos y los diferentes tipos de aprendizaje automático. Junto con una introducción básica a la terminología más importante, sentaremos las bases para utilizar con éxito técnicas de aprendizaje automático para la resolución práctica de problemas.

En este capítulo, trataremos los siguientes temas:

•Los conceptos generales del aprendizaje automático.

•Los tres tipos de aprendizaje y la terminología básica.

•La construcción de bloques para diseñar sistemas de aprendizaje automático.

•La instalación y configuración de Python para el análisis de datos y el aprendizaje automático.

Crear máquinas inteligentes para transformar datos en conocimiento

En esta época de tecnología moderna, existe un recurso que tenemos en abundancia: gran cantidad de datos estructurados y no estructurados. En la segunda mitad del siglo veinte, el aprendizaje automático evolucionó como un subcampo de la Inteligencia Artificial(AI) que involucraba algoritmos de autoaprendizaje que derivaban el conocimiento a partir de datos para crear predicciones. En lugar de necesitar al hombre para derivar de forma manual las reglas y crear modelos a partir del análisis de grandes cantidades de datos, el aprendizaje automático ofrece una alternativa más eficiente para capturar el conocimiento en datos, mejorar gradualmente el rendimiento de los modelos predictivos y tomar decisiones basadas en esos datos. El aprendizaje automático no solo es cada vez más importante en la investigación de ciencia computacional, sino que juega un papel cada vez más importante en nuestra vida diaria. Gracias al aprendizaje automático, disfrutamos de filtros potentes para el correo no deseado, software práctico de reconocimiento de voz y texto, motores de búsqueda fiables, desafiantes programas para jugar al ajedrez y, esperemos que muy pronto, eficientes coches de conducción autónoma.

Los tres tipos de aprendizaje automático

En esta sección, echaremos un vistazo a los tres tipos de aprendizaje automático: aprendizaje supervisado, aprendizaje no supervisado y aprendizaje reforzado. Vamos a aprender las diferencias fundamentales entre los tres tipos distintos de aprendizaje y, mediante ejemplos conceptuales, desarrollaremos una intuición para los ámbitos de problemas prácticos donde pueden ser aplicados:

Hacer predicciones sobre el futuro con el aprendizaje supervisado

El objetivo principal del aprendizaje supervisado es aprender un modelo, a partir de datos de entrenamiento etiquetados, que nos permite hacer predicciones sobre datos futuros o no vistos. Aquí, el término supervisado se refiere a un conjunto de muestras donde las señales de salida deseadas (etiquetas) ya se conocen.

Considerando el ejemplo del filtro de correo no deseado, podemos entrenar un modelo utilizando un algoritmo de aprendizaje automático supervisado en un cuerpo de correos electrónicos etiquetados –correos que están correctamente marcados como «correo no deseado» o como «no correo no deseado»– para predecir si un nuevo correo electrónico pertenece a una u otra categoría. Una tarea de aprendizaje supervisado con etiquetas de clase discretas, como en el ejemplo anterior del filtro de correo no deseado, también se conoce como tarea de clasificación. Otra subcategoría del aprendizaje supervisado es la regresión, donde la señal resultante es un valor continuo.

Clasificación para predecir etiquetas de clase

La clasificación es una subcategoría del aprendizaje supervisado cuyo objetivo es predecir las etiquetas de clase categórica de nuevas instancias, basadas en observaciones pasadas. Estas etiquetas de clase son discretas, valores desordenados que se pueden entender como membresías grupales de las instancias. El ejemplo que hemos mencionado anteriormente de la detección de correo no deseado representa un típico ejemplo de una tarea de clasificación binaria, donde el algoritmo de aprendizaje automático aprende un conjunto de reglas para distinguir entre dos posibles clases: mensajes que son o no son correo no deseado.

Sin embargo, el conjunto de etiquetas de clase no tiene que ser de naturaleza binaria. El modelo predictivo aprendido mediante un algoritmo de aprendizaje supervisado puede asignar cualquier etiqueta de clase que se presente en el conjunto de datos de entrenamiento a una nueva instancia sin etiqueta. Un ejemplo típico de una tarea de clasificación multiclase es el reconocimiento de un carácter manuscrito. Aquí, podemos recoger un conjunto de datos de entrenamiento que consiste en múltiples ejemplos manuscritos de cada letra del alfabeto. Ahora, si un usuario proporciona un nuevo carácter manuscrito desde un dispositivo de entrada, nuestro modelo predictivo será capaz de predecir la letra correcta del alfabeto con cierta precisión. Sin embargo, nuestro sistema de aprendizaje automático no sería capaz de reconocer de forma correcta ningún dígito del cero al nueve, por ejemplo, si no formaran parte de nuestro conjunto de datos de entrenamiento.

La siguiente figura ilustra el concepto de una tarea de clasificación binaria que da 30 muestras de entrenamiento; 15 de estas muestras están etiquetadas como clase negativa (signo menos) y otras 15 como clase positiva (signo más). En este caso, nuestro conjunto de datos es bidimensional, lo que significa que cada muestra tiene dos valores asociados: y . Ahora, podemos utilizar un algoritmo de aprendizaje automático supervisado para aprender una regla –el límite de decisión está representado con una línea discontinua– que puede separar las dos clases y clasificar nuevos datos dentro de cada categoría dados sus valores de y :

Regresión para predecir resultados continuos

En la sección anterior hemos aprendido que la tarea de clasificación consiste en asignar etiquetas categóricas y sin orden a instancias. Un segundo tipo de aprendizaje supervisado es la predicción de resultados continuos, también conocida como análisis de regresión. En el análisis de regresión, tenemos un número de variables predictoras (explicativas) y una variable de respuesta continua (resultado o destino), y tenemos que encontrar una relación entre estas variables que nos permita predecir un resultado.

Por ejemplo, supongamos que queremos predecir los resultados del examen de selectividad de matemáticas de nuestros alumnos. Si existe una relación entre el tiempo que han pasado estudiando para la prueba y los resultados finales, podríamos utilizarla como dato de entrenamiento para aprender un modelo que utilice el tiempo de estudio para predecir los resultados de la prueba de futuros estudiantes que deseen pasar este examen.

El término regresión fue ideado por Francis Galton en su artículo Regression towards Mediocrity in Hereditary Stature [Regresión hacia la mediocridad en estatura hereditaria] en 1886. Galton describió el fenómeno biológico según el cual la variación de altura en una población no aumenta con el tiempo. Él observó que la altura de los padres no pasa a los hijos, pero que, en cambio, la altura de los hijos está retrocediendo hacia la media de la población.

La siguiente figura ilustra el concepto de regresión lineal. Dada una variable predictora x y una variable de respuesta y, aplicamos una línea fina a este dato, que minimiza la distancia –normalmente, la distancia cuadrada de promedio– entre los puntos de muestra y la línea aplicada. Ahora podemos utilizar la intersección y la pendiente aprendidas de este dato para predecir la variable de resultado del nuevo dato:

Resolver problemas interactivos con aprendizaje reforzado

Otro tipo de aprendizaje automático es el aprendizaje reforzado. En este tipo de aprendizaje, el objetivo es desarrollar un sistema (agente) que mejore su rendimiento basado en interacciones con el entorno. Como la información sobre el estado actual del entorno normalmente también incluye una señal de recompensa, podemos pensar en el aprendizaje reforzado como un campo relacionado con el aprendizaje supervisado. Sin embargo, en el aprendizaje reforzado este feedback no es el valor o la etiqueta correctos sobre el terreno, sino una medida de cómo ha sido medida la acción por parte de una función de recompensa. 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 experimental de ensayo-error o una planificación deliberativa.

Un conocido ejemplo de aprendizaje reforzado es un motor de ajedrez. Aquí, el agente elige entre una serie de movimientos según el estado del tablero (el entorno), y la recompensa se puede definir como «ganas» o «pierdes» al final del juego:

Existen diferentes subtipos de aprendizaje reforzado. Sin embargo, un esquema general es que el agente en aprendizaje reforzado intenta maximizar la recompensa mediante una serie de interacciones con el entorno. Cada estado puede estar asociado a una recompensa positiva o negativa, y una recompensa se puede definir como el logro de un objetivo general (como ganar o perder una partida de ajedrez). Por ejemplo, en ajedrez, el resultado de cada movimiento podría ser un estado distinto del entorno. Para explorar un poco más el ejemplo del ajedrez, pensemos en ciertas jugadas del tablero asociadas a un evento positivo (por ejemplo, eliminar una pieza del contrincante o amenazar a la reina). Sin embargo, otras jugadas están asociadas a un evento negativo (como perder una pieza para el contrincante en el siguiente turno). Ahora, no todos los turnos dan como resultado la eliminación de una pieza del tablero, y el aprendizaje reforzado se centra en aprender las series de pasos maximizando una recompensa basada en el feedback inmediato y diferido.

Aunque esta sección ofrece una visión básica del aprendizaje reforzado, ten en cuenta que las aplicaciones de este tipo de aprendizaje están fuera del alcance de este libro, que prioriza la clasificación, el análisis de regresión y el agrupamiento.

Descubrir estructuras ocultas con el aprendizaje sin supervisión

En el aprendizaje supervisado, cuando entrenamos nuestro modelo sabemos la respuesta correcta de antemano, y en el reforzado definimos una medida de recompensa para acciones concretas mediante el agente. Sin embargo, en el aprendizaje sin supervisión tratamos con datos sin etiquetar o datos de estructura desconocida. Con las técnicas de aprendizaje sin supervisión, podemos explorar la estructura de nuestros datos para extraer información significativa sin la ayuda de una variable de resultado conocida o una función de recompensa.

Encontrar subgrupos con el agrupamiento

El agrupamiento es una técnica exploratoria de análisis de datos que nos permite organizar un montón de información en subgrupos significativos (clústers) sin tener ningún conocimiento previo de los miembros del grupo. Cada clúster que surge durante el análisis define un grupo de objetos que comparten un cierto grado de semejanza pero difieren de los objetos de otros clústers, razón por la cual el agrupamiento también se denomina a veces clasificación sin supervisión. El agrupamiento es una excelente técnica para estructurar información y derivar relaciones significativas de los datos. Por ejemplo, permite a los vendedores descubrir grupos de clientes basados en sus intereses, con el fin de desarrollar programas de marketing exclusivos.

La siguiente figura muestra cómo se puede aplicar el agrupamiento para organizar datos sin etiquetar en tres grupos distintos, basados en la similitud de sus características y :

Reducción de dimensionalidad para comprimir datos

Otro subcampo del aprendizaje sin supervisión es la reducción de dimensionalidad. Muchas veces trabajamos con datos de alta dimensionalidad (cada observación muestra un elevado número de medidas), lo cual puede suponer un reto para el espacio de almacenamiento limitado y el rendimiento computacional de los algoritmos del aprendizaje automático. La reducción de dimensionalidad sin supervisión es un enfoque utilizado con frecuencia en el preprocesamiento de características para eliminar ruido de los datos; también puede degradar el rendimiento predictivo de ciertos algoritmos y comprimir los datos en un subespacio dimensional más pequeño, manteniendo la mayor parte de la información importante.

A veces, la reducción de dimensionalidad también puede ser útil para visualizar datos; por ejemplo, un conjunto de características dimensionales pueden ser proyectadas en un espacio de características de una, dos o tres dimensiones para visualizarlas mediante gráficos de dispersión o histogramas 2D o 3D. Las siguientes figuras muestran un ejemplo donde la reducción de dimensionalidad no lineal se ha aplicado para comprimir un brazo de gitano tridimensional en un subespacio con características 2D:

Introducción a la terminología básica y las notaciones

Ahora que ya hemos tratado las tres categorías principales de aprendizaje automático –supervisado, sin supervisión y reforzado–, vamos a echar un vistazo a la terminología básica que utilizaremos en este libro. La tabla siguiente muestra un extracto del conjunto de datos Iris, un ejemplo clásico en el campo del aprendizaje automático. El conjunto de datos Iris contiene las medidas de 150 flores iris de tres especies distintas: Setosa, Versicolor y Virginica. Cada muestra de flor representa una fila de nuestro conjunto de datos y las medidas de la flor en centímetros se almacenan en columnas, que también denominamos características del conjunto de datos:

Para que la notación sea simple a la vez que eficiente, utilizaremos algunos de los términos básicos de álgebra lineal. En los siguientes capítulos, utilizaremos una matriz y una notación vectorial para referirnos a nuestros datos. Seguiremos la convención común para representar cada muestra como una fila independiente en una matriz de características X, donde cada característica se almacena en una columna independiente.

Así, el conjunto de datos Iris que contiene 150 muestras y cuatro características también se puede escribir como una matriz :

Para el resto del libro, si no se indica de otro modo, utilizaremos el superíndice i para indicar la muestra de entrenamiento i, y el subíndice j para indicar la dimensión j del conjunto de datos de entrenamiento.

Utilizamos letras en negrita y minúsculas para referirnos a vectores y letras en negrita y mayúsculas para hablar de matrices . Para referirnos a elementos individuales en un vector o matriz, escribimos las letras en cursiva ( o , respectivamente).

Por ejemplo, se refiere a la primera dimensión de las 150 muestras de flores, largo de sépalo. Así, cada fila de la matriz de características representa una instancia de flor y puede ser escrita como un vector de fila de cuatro dimensiones :

Y cada dimensión de características es un vector de columna de 150 dimensiones . Por ejemplo:

De forma similar, almacenamos las variables de destino (aquí, etiquetas de clase) como un vector de columna de 150 dimensiones:

Una hoja de ruta para crear sistemas de aprendizaje automático

En secciones anteriores, hemos hablado de los conceptos básicos del aprendizaje automático y de los tres tipos distintos de aprendizaje. En esta sección, hablaremos de las otras partes importantes del sistema de aprendizaje automático que acompañan al algoritmo de aprendizaje. El siguiente diagrama muestra un flujo de trabajo típico para el uso del aprendizaje automático en modelado predictivo, que trataremos en las siguientes subsecciones:

Preprocesamiento: Dar forma a los datos

Vamos a empezar hablando de la hoja de ruta para crear sistemas de aprendizaje automático. No es habitual que los datos primarios se presenten en la forma necesaria para un rendimiento óptimo del algoritmo de aprendizaje. Así, el preprocesamiento de los datos es uno de los pasos más importantes en cualquier aplicación de aprendizaje automático. Si tomamos como ejemplo el conjunto de datos de flores Iris de la sección anterior, podemos pensar en los datos primarios como una serie de imágenes de flores de las cuales queremos extraer características significativas. Estas características útiles pueden ser el color, el tono, la intensidad de las flores, o la altura, la longitud y anchura de la flor. Hay algoritmos de aprendizaje automático que, además, necesitan que las características seleccionadas tengan el mismo tamaño para conseguir un rendimiento óptimo, el cual normalmente se consigue transformando las características en el rango [0, 1] o con una distribución normal estándar con media cero y variación unitaria, como veremos más adelante.

Algunas de las características seleccionadas pueden estar altamente relacionadas y, por tanto, pueden ser redundantes hasta un cierto punto. En estos casos, las técnicas de reducción de dimensionalidad son muy útiles para comprimir las características en un subespacio dimensional más pequeño. Reducir la dimensionalidad de nuestro espacio de características tiene la ventaja de que se requiere menos espacio de almacenamiento y el algoritmo de aprendizaje funciona mucho más rápido. En algunos casos, la reducción de dimensionalidad también puede mejorar el rendimiento predictivo de un modelo si el conjunto de datos contiene un gran número de características irrelevantes (o ruido), es decir, si el conjunto de datos tiene una relación baja entre señal y ruido.

Para determinar si nuestro algoritmo de aprendizaje automático no solo funciona bien en el conjunto de entrenamiento sino que también se generaliza en datos nuevos, también nos interesa dividir de forma aleatoria el conjunto de datos en un conjunto de prueba y de entrenamiento individual. Utilizamos el conjunto de entrenamiento para entrenar y optimizar nuestro modelo de aprendizaje automático, al tiempo que mantenemos el conjunto de prueba hasta el final para evaluar el modelo final.

Entrenar y seleccionar un modelo predictivo

Como veremos en capítulos próximos, se han desarrollado diferentes tipos de algoritmos de aprendizaje automático para resolver distintas tareas problemáticas. Un punto importante que se puede resumir de los famosos teoremas de No hay almuerzo gratis de David Wolpert es que no podemos aprender «gratis». Algunas publicaciones más importantes son The Lack of A Priori Distinctions Between Learning Algorithms [La falta de distinciones a priori entre los algoritmos de aprendizaje], D. H. Wolpert (1996); No free lunch theorems for optimization [Teoremas de no hay almuerzo gratis para la optimización], D. H. Wolpert y W.G. Macready (1997). Intuitivamente, podemos relacionar este concepto con la popular frase: «Si tu única herramienta es un martillo, tiendes a tratar cada problema como si fuera un clavo» (Abraham Maslow, 1966). Por ejemplo, cada algoritmo de clasificación tiene sus sesgos inherentes, y ninguna clasificación individual es superior si no hacemos suposiciones sobre la tarea. En la práctica, resulta esencial comparar como mínimo un puñado de algoritmos distintos para entrenar y seleccionar el mejor modelo de rendimiento. Pero antes de comparar los diferentes modelos, debemos decidir una unidad para medir el rendimiento. Una unidad de medida que se utiliza con frecuencia es la precisión de la clasificación, que se define como la proporción de instancias clasificadas correctamente.

Una cuestión legítima que podemos preguntarnos es: «¿Cómo podemos saber qué modelo funciona bien en el conjunto de datos final y los datos reales si no utilizamos este conjunto de prueba para la selección del modelo, pero sí lo mantenemos para la evolución del modelo final?».Para abordar el problema incluido en esta cuestión, se pueden utilizar diferentes técnicas de validación cruzada, donde el conjunto de datos de entrenamiento se divide en subconjuntos de validación y entrenamiento para estimar el rendimiento de generalización del modelo. Al final, no podemos esperar que los parámetros predeterminados de los diferentes algoritmos de aprendizaje proporcionados por las librerías de los programas sean óptimos para nuestra tarea problemática concreta. Por lo tanto, utilizaremos a menudo técnicas de optimización de hiperparámetros que nos ayudarán, en próximos capítulos, a afinar el rendimiento de nuestro modelo. Intuitivamente, podemos pensar en dichos hiperparámetros como parámetros que no se aprenden de los datos sino que representan los botones de un modelo que podemos girar para mejorar su rendimiento. Todo esto quedará más claro en capítulos posteriores, donde veremos ejemplos reales.

Evaluar modelos y predecir instancias de datos no vistos

Después de haber seleccionado un modelo instalado en el conjunto de datos de entrenamiento, podemos utilizar el conjunto de datos de prueba para estimar cómo funciona con los datos no vistos para estimar el error de generalización. Si su rendimiento nos satisface, ya podemos utilizar este modelo para predecir nuevos y futuros datos. Es importante observar que los parámetros para los procedimientos mencionados anteriormente, como el escalado de características y la reducción de dimensionalidad, solo pueden obtenerse a partir de conjuntos de datos de entrenamiento, y que los mismos parámetros vuelven a aplicarse más tarde para transformar el conjunto de datos de prueba, así como cualquier nueva muestra de datos. De otro modo, el rendimiento medido en los datos de prueba puede ser excesivamente optimista.

Utilizar Python para el aprendizaje automático

Python es uno de los lenguajes de programación más populares para la ciencia de datos y, por ello, cuenta con un elevado número de útiles librerías complementarias desarrolladas por sus excelentes desarrolladores y su comunidad de código abierto.

Aunque el rendimiento de los lenguajes interpretados –como Python– para tareas de cálculo intensivo es inferior al de los lenguajes de bajo nivel, se han desarrollado librerías como NumPy y SciPy sobre implementaciones de C y Fortran de capa inferior para operaciones rápidas y vectorizadas en matrices multidimensionales.

Para tareas de programación de aprendizaje automático, haremos referencia sobre todo a la librería scikit-learn, que actualmente es una de las librerías de aprendizaje automático de código abierto más popular y accesible.

Instalar Python y sus paquetes desde el Python Package Index

Python está disponible para los tres sistemas operativos principales –Microsoft Windows, macOS y Linux– y tanto el instalador como la documentación se pueden descargar desde el sitio web oficial de Python: https://www.python.org.

Este libro está escrito para Python versión 3.5.2 o posterior, y es recomendable que utilices la versión más reciente de Python 3 que esté disponible actualmente, aunque la mayoría de los ejemplos de código también son compatibles con Python 2.7.13 o superior. Si decides utilizar Python 2.7 para ejecutar los ejemplos de código, asegúrate de que conoces las diferencias principales entre ambas versiones. Puedes consultar un buen resumen de las diferencias entre Python 3.5 y 2.7 en https://wiki.python.org/moin/Python2orPython3.

Los paquetes adicionales que se utilizarán en este libro se pueden instalar mediante el programa de instalación pip, que forma parte de la librería estándar de Python desde la versión 3.3. Puedes encontrar más información sobre el pip en https://docs.python.org/3/installing/index.html.

Una vez hemos instalado Python con éxito, podemos ejecutar el pip desde el terminal para instalar los paquetes de Python adicionales:

pip install SomePackage

Los paquetes ya instalados pueden ser actualizados con el comando --upgrade:

pip install SomePackage --upgrade

Utilizar la distribución y el gestor de paquetes Anaconda de Python

Una distribución de Python alternativa muy recomendada para cálculo científico es Anaconda, de Continuum Analytics. Anaconda es una distribución gratuita (incluso para uso comercial) de Python preparada para la empresa, que incluye todos los paquetes de Python esenciales para la ciencia de datos, matemáticas e ingeniería en una distribución multiplataforma fácil de usar. El instalador de Anaconda se puede descargar desde http://continuum.io/downloads y hay disponible una guía de inicio rápido de Anaconda en https://conda.io/docs/test-drive.html.

Tras haber instalado Anaconda con éxito, podemos instalar los nuevos paquetes de Python mediante el siguiente comando:

conda install SomePackage

Los paquetes existentes se pueden actualizar mediante el siguiente comando:

conda update SomePackage

Paquetes para cálculo científico, ciencia de datos y aprendizaje automático

En este libro, utilizaremos principalmente matrices multidimensionales de NumPy para almacenar y manipular datos. De forma ocasional, utilizaremos pandas, una librería creada sobre NumPy que proporciona herramientas de manipulación de datos de alto nivel que permiten trabajar con datos tabulados de un modo más conveniente. Para aumentar nuestra experiencia de aprendizaje y visualizar datos cuantitativos, que a menudo es extremadamente útil para dar sentido a todo esto de manera intuitiva, utilizaremos la librería Matplotlib, que se puede personalizar en muchos aspectos.

Las versiones de los principales paquetes de Python que se han utilizado para escribir este libro son las que aparecen en la siguiente lista. Asegúrate de que la versión de los paquetes que has instalado sea igual o superior a estas versiones para garantizar que los ejemplos de código funcionen correctamente:

•NumPy 1.12.1

•SciPy 0.19.0

•scikit-learn 0.18.1

•Matplotlib 2.0.2

•pandas 0.20.1

Resumen

En este capítulo, hemos explorado el aprendizaje automático desde un nivel muy alto y nos hemos familiarizado con el panorama general y los principales conceptos que vamos a explorar con mayor detalle en los próximos capítulos. Hemos aprendido que el aprendizaje supervisado está compuesto por dos importantes subcampos: clasificación y regresión. Mientras que los modelos de clasificación nos permiten categorizar objetos en clases conocidas, podemos utilizar el análisis de regresión para predecir el resultado continuo de variables de destino. El aprendizaje sin supervisión no solo ofrece técnicas útiles para descubrir estructuras en datos sin etiquetar, sino que también puede ser útil para la compresión de datos en las etapas de preprocesamiento de características. Nos hemos referido brevemente a la hoja de ruta típica para aplicar el aprendizaje automático a problemas concretos, que usaremos como base para discusiones más profundas y ejemplos prácticos en los siguientes capítulos. Además, hemos preparado nuestro entorno Python e instalado y actualizado los paquetes necesarios para estar listos para ver en acción el aprendizaje automático.

Más adelante en este libro, además del aprendizaje automático en sí mismo, también presentaremos diferentes técnicas para preprocesar nuestros conjuntos de datos, que nos ayudarán a conseguir el mejor rendimiento de los distintos algoritmos de aprendizaje automático. Si bien cubriremos los algoritmos de clasificación de forma bastante extensa en todo el libro, también exploraremos diferentes técnicas para el análisis de regresión y la agrupación.

Tenemos un emocionante viaje por delante, en el que descubriremos potentes técnicas en el amplio campo del aprendizaje automático. Sin embargo, nos acercaremos al aprendizaje automático paso a paso, generando nuestro conocimiento de forma gradual a lo largo de los capítulos que componen este libro. En el capítulo siguiente, empezaremos este viaje implementando uno de los algoritmos de aprendizaje automático para clasificación, que nos prepara para el Capítulo 3, Un recorrido por los clasificadores de aprendizaje automático con scikit-learn, donde nos acercaremos a algoritmos de aprendizaje automático más avanzados con la librería de código abierto scikit-learn.

Entrenar algoritmos simples de aprendizaje automático para clasificación

En este capítulo, utilizaremos dos de los primeros algoritmos de aprendizaje automático descritos algorítmicamente para clasificación: el perceptrón y las neuronas lineales adaptativas. Empezaremos implementando un perceptrón paso a paso en Python y entrenándolo para que clasifique diferentes especies de flores en el conjunto de datos Iris. Esto nos ayudará a entender el concepto de algoritmos de aprendizaje automático para clasificación y cómo pueden ser implementados de forma eficiente en Python.

Tratar los conceptos básicos de la optimización utilizando neuronas lineales adaptativas sentará las bases para el uso de clasificadores más potentes con la librería de aprendizaje automático scikit-learn, como veremos en el Capítulo 3, Un recorrido por los clasificadores de aprendizaje automático con scikit-learn.

Los temas que trataremos en este capítulo son los siguientes:

•Crear una intuición para algoritmos de aprendizaje automático.

•Utilizar pandas, NumPy y Matplotlib para leer, procesar y visualizar datos.

•Implementar algoritmos de clasificación lineal en Python.

Neuronas artificiales: un vistazo a los inicios del aprendizaje automático

Antes de hablar con más detalle del perceptrón y de los algoritmos relacionados, echemos un vistazo a los comienzos del aprendizaje automático. Para tratar de entender cómo funciona el cerebro biológico, para diseñar la Inteligencia Artificial, Warren McCullock y Walter Pitts publicaron, en 1943, el primer concepto de una célula cerebral simplificada, la denominada neurona McCullock-Pitts(MCP), recogido en su libro A Logical Calculus of the Ideas Immanent in Nervous Activity [Un cálculo lógico de las ideas inmanentes en la actividad nerviosa], W. S. McCulloch y W. Pitts, Bulletin of Mathematical Biophysics [Boletín de Biofísica Matemática], 5(4): 115-133, 1943. Las neuronas son células nerviosas interconectadas en el cerebro que participan en el proceso y la transmisión de señales eléctricas y químicas, como se ilustra en la siguiente figura:

McCullock y Pitts describieron una célula nerviosa como una simple puerta lógicacon salidas binarias; múltiples señales llegan a las dendritas, a continuación se integran en el cuerpo de la célula y, si la señal acumulada supera un umbral determinado, se genera una señal de salida que será transmitida por el axón.

Solo unos años después, Frank Rosenblatt publicó el primer concepto de la regla de aprendizaje del perceptrón, basado en el modelo de la neurona MCP, en The Perceptron: A Perceiving and Recognizing Automaton [El perceptrón: un autómata de percepción y reconocimiento], F. Rosenblatt, Cornell Aeronautical Laboratory, 1957). Con esta regla del perceptrón, Rosenblatt propuso un algoritmo que podía automáticamente aprender los coeficientes de peso óptimo que luego se multiplican con las características de entrada para tomar la decisión de si una neurona se activa o no. En el contexto del aprendizaje supervisado y la clasificación, un algoritmo como este podría utilizarse para predecir si una muestra pertenece a una clase o a otra.

La definición formal de una neurona artificial

De un modo más formal, para simplificar, podemos situar la idea de las neuronas artificiales en el contexto de una tarea de clasificación binaria donde hacemos referencia a nuestras dos clases como 1 (clase positiva) y -1 (clase negativa). También podemos definir una función de decisión () que toma una combinación lineal de determinados valores de entrada x y un vector de peso correspondiente w, donde z es la denominada entrada de red :

Ahora, si la entrada de red de una muestra concreta es mayor que un umbral definido , predecimos de otro modo la clase 1 y la clase -1. En el algoritmo de perceptrón, la función de decisión es una variante de una función escalón unitario:

Para simplificar, podemos traer el umbral al lado izquierdo de la ecuación y definir un peso cero como y , por lo que escribimos z de un modo más compacto:

Y:

En la literatura del aprendizaje automático, el umbral negativo, o peso , se denomina habitualmente «sesgo» (bias, en inglés).

En las siguientes secciones, usaremos con frecuencia notaciones básicas de álgebra lineal. Por ejemplo, abreviaremos la suma de los productos de los valores en x y w con un producto escalar vectorial, donde el superíndice T se refiere a trasposición