in

Regresión logística desde cero

1yPI0uutvHKDFGhYe8UCuVw

Regresión logística desde cero

Arseny Turín

4 de junio de 2020·5 min de lectura

1*yPI0uutvHKDFGhYe8UCuVw
Créditos: Fabio Rose

Introducción

En esta publicación, vamos a construir nuestro propio modelo de regresión logística desde cero usando Gradient Descent. Para probar nuestro modelo, usaremos «Breast Cancer Wisconsin Dataset» de la sklearn empaquetar y predecir si el bulto es benigno o maligno con más del 95% de precisión. El repositorio de GitHub está aquí. Entonces empecemos.

Núcleo del modelo

El modelo de regresión esencialmente logística consta de dos componentes: función sigmoidea y características con pesos:

1*HwoyV8PkILVCSQdlc VrrA

Función sigmoidea

La función sigmoidea g (z) toma características y pesos z como entrada y devuelve un resultado entre 0 y 1. La salida de la función sigmoidea es una predicción real ŷ.

1*mWyU3Xo pjJpDBnnp789Sw

Características y pesos

AftUna vez que el modelo hizo una predicción, podemos evaluar el resultado con una función de pérdida de entropía cruzada:

1*b34ODnrbJpAfOpy2PQcUJQ

Función de pérdida de entropía cruzada binaria

El logaritmo natural funciona aquí a nuestro favor, porque penaliza mucho si la predicción está lejos del valor real. Por ejemplo, si el modelo predijo el valor ŷ = 0,16 y verdadero y = 1, el error es alto y viceversa:

1*ohzMSQSEMHkcMt2Mz7GdNw

La función de pérdida consta de dos partes, pero podemos combinarlas en una sola ecuación:

1*h9idzK6YjMKKxfCl Zq8eA

Función de pérdida de entropía cruzada binaria

Aquí agregamos y y (1 – año) para cancelar una parte sobre otra dependiendo de la salida. Usaremos esta función en nuestro modelo para calcular la pérdida y también en la parte Gradient Descent del entrenamiento del modelo.

Entrenamiento de modelos

El entrenamiento de modelos es esencialmente la minimización de la función de pérdida. Lo logramos con la técnica Gradient Descent, que se puede dividir en unos pocos pasos:

  1. Primero, encontramos derivadas de la función de pérdida con respecto a cada peso. Las derivadas pueden decir en qué dirección y cuánto debemos cambiar el peso para hacer que la pérdida del modelo sea un poco menor.
  2. Actualizando cada peso según la derivada hasta encontrar el mínimo local, es decir, el modelo ya no mejora, por lo que podemos detenernos.

Derivados

Ésta es la parte más crucial y más difícil. Sin derivados, el modelo no se entrenaría, por lo que entraremos en gran detalle en esta parte.

En este punto, podemos eliminar la función de suma y centrarnos en lo que hay dentro:

Función de pérdida para 1 muestra

Notación: y – verdadero valor, ŷ – valor predicho (sigmoide)

Para encontrar derivadas usaremos el cadena de reglas:

1*Lm78vLno4CLJezjHtpSznA

Usamos la regla de la cadena cuando necesitamos encontrar una derivada de una función que contiene otra función y así sucesivamente. En nuestro caso, tenemos una función de pérdida que contiene una función sigmoidea que contiene características y pesos. Entonces hay Tres funciones en el futuro y las vamos a derivar una por una.

1. Primera derivada de la cadena

La derivada del logaritmo natural es bastante fácil de calcular:

1*el aYa96OrA3MuIIbe7BRg

La derivada del logaritmo natural

Dado que tenemos dos partes en la ecuación, podemos derivarlas por separado:

Derivadas de funciones logarítmicas

Ahora podemos volver a combinar dos partes y simplificar:

1*SS7Q3 hp3tmFqfC8A14CiA

Simplificación de derivadas logarítmicas

Esto se ve bastante bien, ahora nos enfocamos en la función sigmoidea.

2. Segunda derivada de la cadena

De acuerdo con la regla de la cadena, tenemos que encontrar la derivada de ŷ (sigmoidea). Puede encontrar explicaciones detalladas de su derivado en Internet porque se usa con bastante frecuencia en modelos de aprendizaje automático, por lo que solo escribiré el resultado final:

1* fhDH9l6YFkZzQkYsPymgg

Derivado sigmoide

3. Tercera derivada de la cadena

La última función de la cadena es la que contiene en z – nuestras características y pesos. Una derivada con respecto a cada peso (w) sería su valor de característica (X), por ejemplo: (x1 * w1) ‘= x1, porque derivada de w es 1.

1*XI6bDHDkN3713CM11jNe8w

La derivada de x * w

De acuerdo con la regla de la cadena, multiplicamos cada función derivada, por lo que obtenemos lo siguiente:

1*YZrH4piWgKSm0F iC2baYQ

Ecuación final

Hemos terminado. Al final, obtuvimos una función bastante compacta que usaremos en el Gradient Descent.

Descenso de gradiente

Esta parte es muy sencilla en comparación con la búsqueda de derivados. En el lenguaje de los programadores, es simplemente en bucle donde actualizamos constantemente los pesos.

En este proceso, multiplicamos cada valor derivado por el parámetro de tasa de aprendizaje y luego restamos este valor del peso:

# example of updating one weightepochs = 50
lr = 0.1
for _ in range(epochs):

w1 -= lr * x1 * (y_hat - y) # y_hat is predicted value

La tasa de aprendizaje suele ser un número pequeño para controlar qué tan rápido o lento queremos avanzar hacia la minimización. Echemos un vistazo al código completo:

Evaluación

Breast Cancer Wisconsin Dataset 569 muestras y 30 características:

Conjunto de datos de cáncer de mama

Después de una prueba de tren, el modelo dividido predijo bultos malignos y benignos con un 97% y un 95% de precisión, lo que es un resultado decente.

1*OZdLTStaX3o6wK1VNhDeKA

Conclusión

El modelo que creamos podría usarse en aplicaciones de la vida real y es excelente para fines educativos. Aunque sklearn LogisticRegression funcionará más rápido y con mayor precisión, podremos seguir optimizando lo que tenemos y eventualmente lograr un rendimiento similar. Déjame saber en los comentarios si tienes alguna pregunta o recomendación.

Gracias por leer,

Arseniy.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

QnLiNpcUgai3VUXPpwURWj 1200 80

Las mejores aplicaciones de Smart TV para televisores Samsung

Líder del Cuadrante Mágico de Gartner 2020 | HCM