de aprendizaje online con transmisión de datos– podríamos llamar simplemente el método partial_fit sobre muestras individuales: ada.partial_fit(X_std[0, :], y[0]).
Resumen
En este capítulo, hemos podido conocer los conceptos básicos de los clasificadores lineales para el aprendizaje supervisado. Después de haber implementado un perceptrón, hemos visto cómo podemos entrenar neuronas lineales adaptativas de manera eficiente mediante la implementación vectorizada del descenso de gradiente, y el aprendizaje online mediante el descenso de gradiente estocástico.
Ahora que hemos visto cómo implementar clasificadores simples en Python, ya estamos preparados para pasar al siguiente capítulo, donde utilizaremos la librería de aprendizaje automático de Python scikit-learn para tener acceso a clasificadores de aprendizaje automático más potentes y avanzados que se utilizan habitualmente tanto en formación como en industria. El enfoque orientado a objetos que hemos utilizado para implementar los algoritmos del perceptrón y Adaline nos ayudará a entender el API scikit-learn, cuya implementación se basa en los mismos conceptos principales que hemos utilizado en este capítulo: los métodos fit y predict. Basándonos en estos conceptos, aprenderemos sobre la regresión logística para modelar probabilidades de clase y máquinas de vectores de soporte para trabajar con límites de decisión no lineales. Además, presentaremos una clase distinta de algoritmos de aprendizaje supervisado: algoritmos basados en árboles, que habitualmente se combinan en clasificadores de conjuntos robustos.
Un recorrido por los clasificadores de aprendizaje automático con scikit-learn
En este capítulo, realizaremos un recorrido por una selección de algoritmos de aprendizaje automático potentes y conocidos que se utilizan habitualmente tanto en formación como en la industria. Al tiempo que aprendemos las diferencias entre varios algoritmos de aprendizaje automático para clasificación, también desarrollaremos una apreciación intuitiva de las fortalezas y debilidades de cada uno de ellos. Además, llevaremos a cabo nuestro primer paso con la librería scikit-learn, que proporciona una interfaz intuitiva para utilizar estos algoritmos de forma eficiente y productiva.
Los temas que aprenderemos en este capítulo son los siguientes:
•Introducción a algoritmos populares y robustos para clasificación, como regresión lógica, máquinas de vectores de soporte y árboles de decisión.
•Ejemplos y explicaciones mediante la librería de aprendizaje automático scikit-learn, que proporciona una amplia variedad de algoritmos de aprendizaje automático mediante una API de Python intuitiva.
•Discusiones acerca de las fortalezas y las debilidades de los clasificadores con límites de decisión lineales y no lineales.
Elegir un algoritmo de clasificación
La elección de un algoritmo de clasificación apropiado para una tarea problemática concreta requiere práctica; cada algoritmo posee sus propias peculiaridades y está basado en determinadas suposiciones. Volviendo a plantear el teorema de No hay almuerzo gratis de David H. Wolpert, ningún clasificador único funciona mejor en todos los escenarios (The Lack of A Priori Distinctions Between Learning Algorithms, Wolpert y David H, Neural Computation 8.7 (1996): 1341-1390). A la práctica, siempre se recomienda comparar el rendimiento de, como mínimo, un puñado de algoritmos de aprendizaje distintos para seleccionar el mejor modelo para un problema concreto. Estos deben ser distintos en cuanto al número de características o muestras, la cantidad de ruido en el conjunto de datos y las propiedades de las clases (si son linealmente separables o no).
Eventualmente, el rendimiento de un clasificador, tanto de rendimiento computacional como de poder predictivo, depende sobre todo de los datos subyacentes disponibles para el aprendizaje. Los cinco pasos principales que se dan en el entrenamiento de un algoritmo de aprendizaje automático se pueden resumir en los siguientes:
1.Seleccionar características y recopilar muestras de entrenamiento.
2.Elegir una medición del rendimiento.
3.Elegir un algoritmo clasificador y de optimización.
4.Evaluar el rendimiento del modelo.
5.Afinar el algoritmo.
Como el objetivo de este libro es generar un conocimiento del aprendizaje automático paso a paso, nos centraremos sobre todo en los conceptos principales de los distintos algoritmos que aparecen en este capítulo y revisaremos temas como la selección de características y el preprocesamiento, la medición del rendimiento y el ajuste de hiperparámetros para que podamos tratarlos con mayor detalle más adelante.
Primeros pasos con scikit-learn: entrenar un perceptrón
En el Capítulo 2, Entrenar algoritmos simples de aprendizaje automático para clasificación, has conocido dos algoritmos de aprendizaje para la clasificación relacionados, la regla del perceptrón y Adaline, que hemos implementado en Python por separado. Ahora, echaremos un vistazo a la API scikit-learn, que combina una interfaz intuitiva con una implementación altamente optimizada de varios algoritmos de clasificación. La librería scikit-learn ofrece no solo una amplia variedad de algoritmos de aprendizaje, sino también diferentes funciones sencillas para preprocesar datos y ajustar con precisión y evaluar nuestros modelos. Hablaremos de ello con más detalle, junto a los conceptos subyacentes, en el Capítulo 4, Generar buenos modelos de entrenamiento - Preprocesamiento de datos y en el Capítulo 5, Comprimir datos mediante la reducción de dimensionalidad.
Para empezar con la librería scikit-learn, vamos a entrenar un modelo de perceptrón parecido al que implementamos en el Capítulo 2, Entrenar algoritmos simples de aprendizaje automático para clasificación. Para simplificar las cosas, en las siguientes secciones utilizaremos el ya conocido conjunto de datos Iris. El conjunto de datos Iris ya está disponible en scikit-learn, puesto que es un conjunto de datos popular y sencillo que se utiliza con frecuencia para probar y experimentar con algoritmos. Nosotros solo utilizaremos dos características del conjunto de datos Iris para finalidades de visualización.
Vamos a asignar la longitud del pétalo y la anchura del pétalo de 150 muestras de flores a la matriz de características X y las correspondientes etiquetas de clase de las especies de flor al vector y:
>>> from sklearn import datasets
>>> import numpy as np
>>> iris = datasets.load_iris()
>>> X = iris.data[:, [2, 3]]
>>> y = iris.target
>>> print('Class labels:', np.unique(y))
Class labels: [0 1 2]
La función np.unique(y) devuelve las tres únicas etiquetas de clase almacenadas en iris.target y, como podemos ver, los nombres de clase de la flor Iris Iris-setosa, Iris-versicolor e Iris-virginica ya se encuentran almacenados como enteros (aquí: 0, 1, 2). Aunque la mayoría de las funciones y métodos de clase de scikit-learn también funcionan con etiquetas de clase en formato de cadena, es recomendable utilizar etiquetas enteras para evitar fallos técnicos y mejorar el rendimiento computacional debido a un uso más pequeño de memoria. Además, codificar las etiquetas de clase como enteras es una convención común entre la mayoría de librerías de aprendizaje automático.
Para evaluar el buen funcionamiento de un modelo entrenado sobre datos no vistos, vamos a dividir el conjunto de datos en conjuntos de datos de prueba y entrenamiento independientes. Más adelante, en el Capítulo 6, Aprender las mejores prácticas para la evaluación de modelos y el ajuste de hiperparámetros, trataremos con más detalle las mejores prácticas en torno a la evaluación de modelos:
>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.3, random_state=1, stratify=y)
Mediante