Saltar al contenido

Cómo utilizar algoritmos de optimización para ajustar manualmente modelos de regresión

10 de febrero de 2021

Los modelos de regresión se ajustan a los datos de entrenamiento mediante regresión lineal y algoritmos de optimización de búsqueda local.

Los modelos como la regresión lineal y la regresión logística se entrenan mediante la optimización de mínimos cuadrados, y este es el enfoque más eficiente para encontrar coeficientes que minimicen el error para estos modelos.

Sin embargo, es posible utilizar alternativas algoritmos de optimización para adaptarse a un modelo de regresión a un conjunto de datos de entrenamiento. Este puede ser un ejercicio útil para aprender más sobre cómo funciona la regresión y la naturaleza central de la optimización en el aprendizaje automático aplicado. También puede ser necesario para la regresión con datos que no cumplen los requisitos de un procedimiento de optimización de mínimos cuadrados.

En este tutorial, descubrirá cómo optimizar manualmente los coeficientes de los modelos de regresión.

Después de completar este tutorial, sabrá:

  • Cómo desarrollar los modelos de inferencia para la regresión desde cero.
  • Cómo optimizar los coeficientes de un modelo de regresión lineal para predecir valores numéricos.
  • Cómo optimizar los coeficientes de un modelo de regresión logística utilizando escalada estocástica.

Empecemos.

Cómo utilizar algoritmos de optimización para ajustar manualmente modelos de regresión

Cómo utilizar algoritmos de optimización para ajustar manualmente modelos de regresión
Foto de Christian Collins, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en tres partes; son:

  1. Optimizar modelos de regresión
  2. Optimizar un modelo de regresión lineal
  3. Optimizar un modelo de regresión logística

Optimizar modelos de regresión

Los modelos de regresión, como la regresión lineal y la regresión logística, son algoritmos bien entendidos del campo de la estadística.

Ambos algoritmos son lineales, lo que significa que la salida del modelo es una suma ponderada de las entradas. La regresión lineal está diseñada para «regresión«Problemas que requieren la predicción de un número, y la regresión logística está diseñada para»clasificación”Problemas que requieren una etiqueta de clase para poder predecirse.

Estos modelos de regresión implican el uso de un algoritmo de optimización para encontrar un conjunto de coeficientes para cada entrada del modelo que minimiza el error de predicción. Debido a que los modelos son lineales y se entienden bien, se pueden utilizar algoritmos de optimización eficientes.

En el caso de la regresión lineal, los coeficientes se pueden encontrar mediante la optimización de mínimos cuadrados, que se puede resolver mediante álgebra lineal. En el caso de la regresión logística, se suele utilizar un algoritmo de optimización de búsqueda local.

Es posible utilizar cualquier algoritmo de optimización arbitrario para entrenar modelos de regresión lineal y logística.

Es decir, podemos definir un modelo de regresión y usar un algoritmo de optimización dado para encontrar un conjunto de coeficientes para el modelo que resulten en un mínimo de error de predicción o un máximo de precisión de clasificación.

Se espera que el uso de algoritmos de optimización alternativos sea menos eficiente en promedio que el uso de la optimización recomendada. Sin embargo, puede ser más eficiente en algunos casos específicos, como si los datos de entrada no cumplen con las expectativas del modelo como una distribución gaussiana y no están correlacionados con las entradas externas.

También puede ser un ejercicio interesante para demostrar la naturaleza central de la optimización en el entrenamiento de algoritmos de aprendizaje automático, y específicamente modelos de regresión.

A continuación, exploremos cómo entrenar un modelo de regresión lineal utilizando la escalada estocástica.

Optimizar un modelo de regresión lineal

El modelo de regresión lineal podría ser el modelo predictivo más simple que aprende de los datos.

El modelo tiene un coeficiente para cada entrada y la salida prevista son simplemente los pesos de algunas entradas y coeficientes.

En esta sección, optimizaremos los coeficientes de un modelo de regresión lineal.

Primero, definamos un problema de regresión sintética que podamos usar como foco de optimización del modelo.

Podemos usar la función make_regression () para definir un problema de regresión con 1,000 filas y 10 variables de entrada.

El siguiente ejemplo crea el conjunto de datos y resume la forma de los datos.

La ejecución del ejemplo imprime la forma del conjunto de datos creado, lo que confirma nuestras expectativas.

A continuación, necesitamos definir un modelo de regresión lineal.

Antes de optimizar los coeficientes del modelo, debemos desarrollar el modelo y nuestra confianza en cómo funciona.

Comencemos por desarrollar una función que calcule la activación del modelo para una fila de datos de entrada determinada del conjunto de datos.

Esta función tomará la fila de datos y los coeficientes del modelo y calculará la suma ponderada de la entrada con la adición de un coeficiente de intersección con el eje y adicional (también llamado compensación o sesgo). los predecir fila () función a continuación implementa esto.

Estamos usando listas de Python simples y un estilo de programación imperativo en lugar de matrices NumPy o compresiones de listas intencionalmente para hacer que el código sea más legible para los principiantes de Python. Siéntase libre de optimizarlo y publicar su código en los comentarios a continuación.

A continuación, podemos llamar al predecir fila () función para cada fila en un conjunto de datos dado. los predict_dataset () función a continuación implementa esto.

Nuevamente, estamos usando intencionalmente un estilo de codificación imperativo simple para facilitar la lectura en lugar de las compresiones de listas.

Finalmente, podemos usar el modelo para hacer predicciones en nuestro conjunto de datos sintéticos para confirmar que todo funciona correctamente.

Podemos generar un conjunto aleatorio de coeficientes de modelo usando la función rand ().

Recuerde que necesitamos un coeficiente para cada entrada (diez entradas en este conjunto de datos) más un peso adicional para el coeficiente de intersección con el eje y.

Luego, podemos usar estos coeficientes con el conjunto de datos para hacer predicciones.

Podemos evaluar el error cuadrático medio de estas predicciones.

Eso es todo.

Podemos unir todo esto y demostrar nuestro modelo de regresión lineal para el modelado predictivo de regresión. El ejemplo completo se enumera a continuación.

Recomendado:  Explorando la relación tensa entre la inteligencia artificial y la ley con Joilson Melo

La ejecución del ejemplo genera una predicción para cada ejemplo en el conjunto de datos de entrenamiento y luego imprime el error cuadrático medio de las predicciones.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

Esperaríamos un gran error dado un conjunto de pesos aleatorios, y eso es lo que vemos en este caso, con un valor de error de aproximadamente 7,307 unidades.

Ahora podemos optimizar los coeficientes del conjunto de datos para lograr un error bajo en este conjunto de datos.

Primero, necesitamos dividir el conjunto de datos en conjuntos de prueba y de tren. Es importante retener algunos datos que no se utilizan en la optimización del modelo para que podamos preparar una estimación razonable del rendimiento del modelo cuando se utilizan para hacer predicciones sobre nuevos datos.

Usaremos el 67 por ciento de los datos para el entrenamiento y el 33 por ciento restante como un conjunto de prueba para evaluar el desempeño del modelo.

A continuación, podemos desarrollar un algoritmo de escalada estocástico.

El algoritmo de optimización requiere una función objetivo para optimizar. Debe tomar un conjunto de coeficientes y devolver una puntuación que se minimizará o maximizará correspondiente a un modelo mejor.

En este caso, evaluaremos el error cuadrático medio del modelo con un conjunto determinado de coeficientes y devolveremos la puntuación de error, que debe minimizarse.

los objetivo() La función siguiente implementa esto, dado el conjunto de datos y un conjunto de coeficientes, y devuelve el error del modelo.

A continuación, podemos definir el algoritmo estocástico de escalada de colinas.

El algoritmo requerirá una solución inicial (por ejemplo, coeficientes aleatorios) y seguirá haciendo pequeños cambios en la solución de forma iterativa y verificando si da como resultado un modelo de mejor rendimiento. La cantidad de cambio realizado en la solución actual se controla mediante un hiperparámetro step_size. Este proceso continuará durante un número fijo de iteraciones, también proporcionado como un hiperparámetro.

los Montañismo() La función siguiente implementa esto, tomando el conjunto de datos, la función objetivo, la solución inicial y los hiperparámetros como argumentos y devuelve el mejor conjunto de coeficientes encontrados y el rendimiento estimado.

Luego podemos llamar a esta función, pasando un conjunto inicial de coeficientes como la solución inicial y el conjunto de datos de entrenamiento como el conjunto de datos para optimizar el modelo.

Finalmente, podemos evaluar el mejor modelo en el conjunto de datos de prueba e informar el rendimiento.

Al unir esto, el ejemplo completo de optimización de los coeficientes de un modelo de regresión lineal en el conjunto de datos de regresión sintética se enumera a continuación.

Recomendado:  SenseTime y Alfa Romeo F1 Team ORLEN forjan un pacto de IA

La ejecución del ejemplo informará el número de iteración y el error cuadrático medio cada vez que se realice una mejora en el modelo.

Al final de la búsqueda, se informa el rendimiento del mejor conjunto de coeficientes en el conjunto de datos de entrenamiento y se calcula y se informa el rendimiento del mismo modelo en el conjunto de datos de prueba.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el algoritmo de optimización encontró un conjunto de coeficientes que lograron un error de aproximadamente 0.08 tanto en el tren como en el conjunto de datos de prueba.

El hecho de que el algoritmo haya encontrado un modelo con un rendimiento muy similar en los conjuntos de datos de prueba y tren es una buena señal, ya que muestra que el modelo no se ajustó en exceso (se optimizó en exceso) con el conjunto de datos de entrenamiento. Esto significa que el modelo se generaliza bien a nuevos datos.

Now that we are familiar with how to manually optimize the coefficients of a linear regression model, let’s look at how we can extend the example to optimize the coefficients of a logistic regression model for classification.

Optimize a Logistic Regression Model

A Logistic Regression model is an extension of linear regression for classification predictive modeling.

Logistic regression is for binary classification tasks, meaning datasets that have two class labels, class=0 and class=1.

The output first involves calculating the weighted sum of the inputs, then passing this weighted sum through a logistic function, also called a sigmoid function. The result is a Binomial probability between 0 and 1 for the example belonging to class=1.

In this section, we will build on what we learned in the previous section to optimize the coefficients of regression models for classification. We will develop the model and test it with random coefficients, then use stochastic hill climbing to optimize the model coefficients.

First, let’s define a synthetic binary classification problem that we can use as the focus of optimizing the model.

We can use the make_classification() function to define a binary classification problem with 1,000 rows and five input variables.

The example below creates the dataset and summarizes the shape of the data.

Running the example prints the shape of the created dataset, confirming our expectations.

Next, we need to define a logistic regression model.

Let’s start by updating the predict_row() function to pass the weighted sum of the input and coefficients through a logistic function.

The logistic function is defined as:

  • logistic = 1.0 / (1.0 + exp(-result))

Where result is the weighted sum of the inputs and the coefficients and exp() is mi (Euler’s number) raised to the power of the provided value, implemented via the exp() function.

The updated predict_row() function is listed below.

That’s about it in terms of changes for linear regression to logistic regression.

As with linear regression, we can test the model with a set of random model coefficients.

The predictions made by the model are probabilities for an example belonging to class=1.

We can round the prediction to be integer values 0 and 1 for the expected class labels.

We can evaluate the classification accuracy of these predictions.

Eso es todo.

We can tie all of this together and demonstrate our simple logistic regression model for binary classification. The complete example is listed below.

Running the example generates a prediction for each example in the training dataset then prints the classification accuracy for the predictions.

Note: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

We would expect about 50 percent accuracy given a set of random weights and a dataset with an equal number of examples in each class, and that is approximately what we see in this case.

We can now optimize the weights of the dataset to achieve good accuracy on this dataset.

The stochastic hill climbing algorithm used for linear regression can be used again for logistic regression.

The important difference is an update to the objective() function to round the predictions and evaluate the model using classification accuracy instead of mean squared error.

The hillclimbing() function also must be updated to maximize the score of solutions instead of minimizing in the case of linear regression.

Finally, the coefficients found by the search can be evaluated using classification accuracy at the end of the run.

Tying this all together, the complete example of using stochastic hill climbing to maximize classification accuracy of a logistic regression model is listed below.

Running the example will report the iteration number and classification accuracy each time there is an improvement made to the model.

At the end of the search, the performance of the best set of coefficients on the training dataset is reported and the performance of the same model on the test dataset is calculated and reported.

Note: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

In this case, we can see that the optimization algorithm found a set of weights that achieved about 87.3 percent accuracy on the training dataset and about 83.9 percent accuracy on the test dataset.

Further Reading

This section provides more resources on the topic if you are looking to go deeper.

APIs

Articles

Resumen

In this tutorial, you discovered how to manually optimize the coefficients of regression models.

Specifically, you learned:

  • How to develop the inference models for regression from scratch.
  • How to optimize the coefficients of a linear regression model for predicting numeric values.
  • How to optimize the coefficients of a logistic regression model using stochastic hill climbing.

Do you have any questions?
Ask your questions in the comments below and I will do my best to answer.