Aprendizaje automático para desarrolladores de Java, Parte 1: Algoritmos para aprendizaje automático

Los automóviles autónomos, el software de detección de rostros y los parlantes controlados por voz se basan en tecnologías y marcos de aprendizaje automático, y estos son solo la primera ola. Durante la próxima década, una nueva generación de productos transformará nuestro mundo, iniciando nuevos enfoques para el desarrollo de software y las aplicaciones y productos que creamos y usamos.

Como desarrollador de Java, desea adelantarse a esta curva, especialmente porque las empresas de tecnología están comenzando a invertir seriamente en el aprendizaje automático. Lo que aprende hoy, puede desarrollarlo durante los próximos cinco años, pero tiene que empezar por alguna parte.

Este artículo le ayudará a empezar. Comenzará con una primera impresión de cómo funciona el aprendizaje automático, seguida de una breve guía para implementar y entrenar un algoritmo de aprendizaje automático. Después de estudiar los aspectos internos del algoritmo de aprendizaje y las funciones que puede utilizar para entrenar, puntuar y seleccionar la función de predicción más adecuada, obtendrá una descripción general del uso de un marco JVM, Weka, para crear soluciones de aprendizaje automático. Este artículo se centra en el aprendizaje automático supervisado, que es el enfoque más común para desarrollar aplicaciones inteligentes.

Aprendizaje automático para desarrolladores de Java, parte 2

¿Estas listo para el siguiente paso? La segunda mitad de este tutorial le muestra cómo desarrollar e implementar su canalización de datos de aprendizaje automático.

Aprendizaje automático e inteligencia artificial

El aprendizaje automático ha evolucionado desde el campo de la inteligencia artificial, que busca producir máquinas capaces de imitar la inteligencia humana. Aunque el aprendizaje automático es una tendencia emergente en la informática, la inteligencia artificial no es un campo científico nuevo. La prueba de Turing, desarrollada por Alan Turing a principios de la década de 1950, fue una de las primeras pruebas creadas para determinar si una computadora podía tener inteligencia real. Según la prueba de Turing, una computadora podría probar la inteligencia humana engañando a un humano haciéndole creer que también es humano.

Muchos enfoques de aprendizaje automático de vanguardia se basan en conceptos de décadas de antigüedad. Lo que ha cambiado durante la última década es que las computadoras (y las plataformas informáticas distribuidas) ahora tienen la potencia de procesamiento necesaria para los algoritmos de aprendizaje automático. La mayoría de los algoritmos de aprendizaje automático exigen una gran cantidad de multiplicaciones de matrices y otras operaciones matemáticas para procesar. La tecnología computacional para administrar estos cálculos no existía ni siquiera hace dos décadas, pero existe hoy.

El aprendizaje automático permite a los programas ejecutar procesos de mejora de la calidad y ampliar sus capacidades sin participación humana. Un programa creado con aprendizaje automático es capaz de actualizar o ampliar su propio código.

Aprendizaje supervisado frente a aprendizaje no supervisado

El aprendizaje supervisado y el aprendizaje no supervisado son los enfoques más populares del aprendizaje automático. Ambos requieren alimentar a la máquina con una gran cantidad de registros de datos para correlacionar y aprender. Estos registros de datos recopilados se conocen comúnmente como vectores de características. En el caso de una casa individual, un vector de características puede constar de características como el tamaño total de la casa, el número de habitaciones y la antigüedad de la casa.

En el aprendizaje supervisado , se entrena un algoritmo de aprendizaje automático para responder correctamente a las preguntas relacionadas con los vectores de características. Para entrenar un algoritmo, la máquina se alimenta con un conjunto de vectores de características y una etiqueta asociada. Las etiquetas las proporciona normalmente un anotador humano y representan la "respuesta" correcta a una pregunta determinada. El algoritmo de aprendizaje analiza los vectores de características y sus etiquetas correctas para encontrar estructuras internas y relaciones entre ellos. Así, la máquina aprende a responder correctamente a las consultas.

A modo de ejemplo, una aplicación inmobiliaria inteligente podría entrenarse con vectores de características que incluyen el tamaño, el número de habitaciones y la antigüedad respectiva para una variedad de casas. Un etiquetador humano etiquetaría cada casa con el precio correcto de la vivienda en función de estos factores. Al analizar esos datos, la aplicación inmobiliaria estaría capacitada para responder la pregunta: " ¿Cuánto dinero podría obtener por esta casa? "

Una vez finalizado el proceso de formación, no se etiquetarán los nuevos datos de entrada. La máquina podrá responder correctamente a las consultas, incluso para vectores de características invisibles y no etiquetados.

En el aprendizaje no supervisado , el algoritmo está programado para predecir respuestas sin etiquetado humano o incluso preguntas. En lugar de predeterminar etiquetas o cuáles deberían ser los resultados, el aprendizaje no supervisado aprovecha conjuntos de datos masivos y poder de procesamiento para descubrir correlaciones previamente desconocidas. En el marketing de productos de consumo, por ejemplo, el aprendizaje no supervisado podría utilizarse para identificar relaciones ocultas o agrupaciones de consumidores, lo que eventualmente conduciría a estrategias de marketing nuevas o mejoradas.

Este artículo se centra en el aprendizaje automático supervisado, que es el enfoque más común para el aprendizaje automático en la actualidad.

Aprendizaje automático supervisado

Todo el aprendizaje automático se basa en datos. Para un proyecto de aprendizaje automático supervisado, deberá etiquetar los datos de manera significativa para el resultado que busca. En la Tabla 1, observe que cada fila del registro de la vivienda incluye una etiqueta para "precio de la vivienda". Al correlacionar los datos de las filas con la etiqueta del precio de la vivienda, el algoritmo eventualmente podrá predecir el precio de mercado de una vivienda que no esté en su conjunto de datos (tenga en cuenta que el tamaño de la vivienda se basa en metros cuadrados y el precio de la vivienda en euros).

Cuadro 1. Registros de la casa

CARACTERÍSTICA CARACTERÍSTICA CARACTERÍSTICA ETIQUETA
Tamaño de la casa Número de habitaciones Edad de la casa Costo estimado de la casa
90 m2 / 295 pies 2 habitaciones 23 años 249.000 €
101 m2 / 331 pies 3 habitaciones n / A 338.000 €
1330 m2 / 4363 pies 11 habitaciones 12 años 6.500.000 €

En las primeras etapas, probablemente etiquetará los registros de datos a mano, pero eventualmente podría entrenar su programa para automatizar este proceso. Probablemente haya visto esto con las aplicaciones de correo electrónico, donde mover el correo electrónico a su carpeta de correo no deseado da como resultado la consulta "¿Es esto spam?" Cuando responde, está entrenando al programa para que reconozca el correo que no desea ver. El filtro de correo no deseado de la aplicación aprende a etiquetar el correo futuro de la misma fuente, o con contenido similar, y deshacerse de él.

Los conjuntos de datos etiquetados son necesarios solo para fines de capacitación y prueba. Una vez finalizada esta fase, el algoritmo de aprendizaje automático funciona en instancias de datos sin etiquetar. Por ejemplo, podría alimentar el algoritmo de predicción con un nuevo registro de la casa sin etiquetar y predeciría automáticamente el precio de la casa esperado según los datos de entrenamiento.

Cómo las máquinas aprenden a predecir

El desafío del aprendizaje automático supervisado es encontrar la función de predicción adecuada para una pregunta específica. Matemáticamente, el desafío es encontrar la función de entrada-salida que toma las variables de entrada x y devuelve el valor de predicción y . Esta función de hipótesis (h θ ) es el resultado del proceso de entrenamiento. A menudo, la función de hipótesis también se denomina función de predicción o objetivo .

Gregor Roth

En la mayoría de los casos, x representa un punto de datos múltiples. En nuestro ejemplo, esto podría ser un punto de datos bidimensional de una casa individual definido por el valor del tamaño de la casa y el valor del número de habitaciones . La matriz de estos valores se conoce como vector de características . Dada una función objetivo concreta, la función se puede utilizar para hacer una predicción para cada vector de características x . Para predecir el precio de una casa individual, puede llamar a la función de destino usando el vector de características {101.0, 3.0} que contiene el tamaño de la casa y la cantidad de habitaciones:

 // target function h (which is the output of the learn process) Function h = ...; // set the feature vector with house size=101 and number-of-rooms=3 Double[] x = new Double[] { 101.0, 3.0 }; // and predicted the house price (label) double y = h.apply(x); 

En el Listado 1, el valor de la variable de matriz x representa el vector de características de la casa. El valor de y devuelto por la función objetivo es el precio de la vivienda previsto.

El desafío del aprendizaje automático es definir una función de destino que funcione con la mayor precisión posible para instancias de datos desconocidas e invisibles. En el aprendizaje automático, la función de destino (h θ ) a veces se denomina modelo . Este modelo es el resultado del proceso de aprendizaje.

Gregor Roth

Basado en ejemplos de entrenamiento etiquetados, el algoritmo de aprendizaje busca estructuras o patrones en los datos de entrenamiento. A partir de estos, produce un modelo que se generaliza bien a partir de esos datos.

Typically, the learning process is explorative. In most cases, the process will be performed multiple times by using different variations of learning algorithms and configurations.

Eventually, all the models will be evaluated based on performance metrics, and the best one will be selected. That model will then be used to compute predictions for future unlabeled data instances.

Linear regression

Para entrenar a una máquina a pensar, el primer paso es elegir el algoritmo de aprendizaje que utilizará. La regresión lineal es uno de los algoritmos de aprendizaje supervisado más simples y populares. Este algoritmo asume que la relación entre las características de entrada y la etiqueta de salida es lineal. La función de regresión lineal genérica a continuación devuelve el valor predicho al resumir cada elemento del vector de características multiplicado por un parámetro theta (θ) . Los parámetros theta se utilizan dentro del proceso de entrenamiento para adaptar o "afinar" la función de regresión según los datos de entrenamiento.

Gregor Roth

In the linear regression function, theta parameters and feature parameters are enumerated by a subscription number. The subscription number indicates the position of theta parameters (θ) and feature parameters (x) within the vector. Note that feature x0 is a constant offset term set with the value 1 for computational purposes. As a result, the index of a domain-specific feature such as house-size will start with x1. As an example, if x1 is set for the first value of the House feature vector, house size, then x2 will be set for the next value, number-of-rooms, and so forth.

Listing 2 shows a Java implementation of this linear regression function, shown mathematically as hθ(x). For simplicity, the calculation is done using the data type double. Within the apply() method, it is expected that the first element of the array has been set with a value of 1.0 outside of this function.

Listing 2. Linear regression in Java

 public class LinearRegressionFunction implements Function { private final double[] thetaVector; LinearRegressionFunction(double[] thetaVector) { this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length); } public Double apply(Double[] featureVector) { // for computational reasons the first element has to be 1.0 assert featureVector[0] == 1.0; // simple, sequential implementation double prediction = 0; for (int j = 0; j < thetaVector.length; j++) { prediction += thetaVector[j] * featureVector[j]; } return prediction; } public double[] getThetas() { return Arrays.copyOf(thetaVector, thetaVector.length); } } 

In order to create a new instance of the LinearRegressionFunction, you must set the theta parameter. The theta parameter, or vector, is used to adapt the generic regression function to the underlying training data. The program's theta parameters will be tuned during the learning process, based on training examples. The quality of the trained target function can only be as good as the quality of the given training data.

En el siguiente ejemplo LinearRegressionFunction, se creará una instancia para predecir el precio de la vivienda en función del tamaño de la vivienda. Teniendo en cuenta que x 0 tiene que ser un valor constante de 1.0, la función objetivo se instancia utilizando dos parámetros theta. Los parámetros theta son el resultado de un proceso de aprendizaje. Después de crear la nueva instancia, el precio de una casa con un tamaño de 1330 metros cuadrados se predecirá de la siguiente manera:

 // the theta vector used here was output of a train process double[] thetaVector = new double[] { 1.004579, 5.286822 }; LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector); // create the feature vector function with x0=1 (for computational reasons) and x1=house-size Double[] featureVector = new Double[] { 1.0, 1330.0 }; // make the prediction double predictedPrice = targetFunction.apply(featureVector); 

La línea de predicción de la función de destino se muestra como una línea azul en el siguiente gráfico. La línea se ha calculado ejecutando la función objetivo para todos los valores del tamaño de la casa. El cuadro también incluye los pares de precio-tamaño utilizados para la capacitación.

Gregor Roth

Hasta ahora, el gráfico de predicción parece encajar bastante bien. Las coordenadas del gráfico (la intersección y la pendiente) están definidas por el vector theta { 1.004579, 5.286822 }. Pero, ¿cómo sabe que este vector theta es el que mejor se adapta a su aplicación? ¿La función encajaría mejor si cambiara el primer o segundo parámetro theta? Para identificar el vector de parámetro theta que mejor se ajusta, necesita una función de utilidad , que evaluará qué tan bien se desempeña la función objetivo.

Puntuación de la función objetivo

En el aprendizaje automático, se usa una función de costo (J (θ)) para calcular el error medio o "costo" de una función de destino determinada.

Gregor Roth