Regresión logística usando pytorch

Regresión logística usando pytorch
La regresión logística es un algoritmo de aprendizaje automático bien conocido que se utiliza para resolver problemas de clasificación binaria. Se deriva del algoritmo de regresión lineal, que tiene una variable de salida continua, y la regresión logística incluso puede clasificar más de dos clases modificándolo ligeramente. Veremos el concepto de regresión logística y cómo se implementa en Pytorch, una biblioteca útil para crear modelos de aprendizaje automático y aprendizaje profundo.

Concepto de regresión logística

La regresión logística es un algoritmo de clasificación binaria. Es un algoritmo de toma de decisiones, lo que significa que crea límites entre dos clases. Extiende el problema de regresión lineal que usa un función de activación en sus salidas para limitarlo entre 1 y 0. Como resultado, esto se utiliza para problemas de clasificación binaria. El gráfico de la regresión logística se parece a la siguiente figura:

Podemos ver que el gráfico está restringido entre 0 y 1. La regresión lineal normal puede dar el valor objetivo como cualquier número real, pero este no es el caso con la regresión logística debido a la función sigmoidea. La regresión logística se basa en el concepto de estimación de máxima verosimilitud (MLE). La máxima probabilidad es simplemente tomar una distribución de probabilidad con un conjunto dado de parámetros y preguntar: “¿Qué tan probable es que vería estos datos si se generara mis datos a partir de esta distribución de probabilidad??"Funciona calculando la probabilidad de cada punto de datos individual y luego multiplicando todas esas probabilidades juntas. En la práctica, agregamos los logaritmos de las probabilidades.

Si necesitamos construir un modelo de aprendizaje automático, cada punto de datos de variable independiente será x1 * w1 + x2 * w2 ... y así sucesivamente, produciendo un valor entre 0 y 1 cuando se pasa a través de la función de activación. Si tomamos 0.50 como factor decisivo o umbral. Entonces, cualquier resultado mayor que 0.5 se considera un 1, mientras que cualquier resultado menor que eso se considera un 0.

Para más de 2 clases, utilizamos el enfoque One-Vs-All. One-VS-All, también conocido como One-VS-Rest, es un proceso de clasificación MLILABEL y Multiclass ML. Funciona primero entrenando un clasificador binario para cada categoría, luego ajustando cada clasificador a cada entrada para determinar a qué clase pertenece la entrada. Si su problema tiene N clases, One-VS-All convertirá su conjunto de datos de capacitación en N Problemas de clasificación binaria.

La función de pérdida asociada con la regresión logística es Entropía cruzada binaria que es el reverso de la ganancia de información. Esto también se conoce como el nombre pérdida de registro. La función de pérdida viene dada por la ecuación:

¿Qué es la función de pérdida??

Una función de pérdida es una métrica matemática que queremos reducir. Queremos construir un modelo que pueda predecir con precisión lo que queremos, y una forma de medir el rendimiento del modelo es analizar la pérdida, ya que sabemos lo que el modelo produce y lo que deberíamos obtener. Podemos entrenar y mejorar nuestro modelo utilizando esta pérdida y ajustando los parámetros del modelo en consecuencia. Las funciones de pérdida varían según el tipo de algoritmo. Para la regresión lineal, el error al cuadrado medio y el error absoluto medio son las funciones de pérdida populares, mientras que la entropía cruzada es apropiada para problemas de clasificación.

¿Cuál es la función de activación??

Las funciones de activación son simplemente funciones matemáticas que modifican la variable de entrada para dar una nueva salida. Esto generalmente se hace en el aprendizaje automático para estandarizar los datos o restringir la entrada a un cierto límite. Las funciones de acción populares son sigmoides, unidad lineal rectificada (RELU), TAN (H), etc.

¿Qué es pytorch??

Pytorch es una alternativa de aprendizaje profundo popular que funciona con la antorcha. Fue creado por el departamento de IA de Facebook, pero se puede usar de manera similar a otras opciones. Se utiliza para desarrollar una variedad de modelos, pero se aplica más ampliamente en los casos de uso de procesamiento del lenguaje natural (PNL). Pytorch siempre es una excelente opción si desea crear modelos con muy pocos recursos y desea una biblioteca de luz fácil de usar y fácil de usar para sus modelos. También se siente natural, lo que ayuda a completar el proceso. Utilizaremos Pytorch para la implementación de nuestros modelos debido a las razones mencionadas. Sin embargo, el algoritmo sigue siendo el mismo con otras alternativas como TensorFlow.

Implementación de regresión logística en Pytorch

Usaremos los pasos a continuación para implementar nuestro modelo:

  1. Cree una red neuronal con algunos parámetros que se actualizarán después de cada iteración.
  2. Iterar a través de los datos de entrada dados.
  3. La entrada pasará a través de la red utilizando propagación hacia adelante.
  4. Ahora calculamos la pérdida usando entropía transversal binaria.
  5. Para minimizar la función de costo, actualizamos los parámetros utilizando descenso de gradiente.
  6. Nuevamente haga los mismos pasos utilizando parámetros actualizados.

Estaremos clasificando el Conjunto de datos MNIST dígitos. Este es un problema popular de aprendizaje profundo que se enseña a principiantes.

Primero importemos las bibliotecas y módulos requeridos.

antorcha de importación
de la antorcha.Variable de importación de Autograd
importación de torcedura.se transforma como transformaciones
importación de torcedura.conjuntos de datos como dsets

El siguiente paso es importar el conjunto de datos.

tren = dsets.Mnist (root = './Data ', Train = True, Transform = Transforms.Totensor (), descargar = falso)
prueba = dsets.Mnist (root = './Data ', Train = False, Transform = Transforms.Totensor ())

Use el cargador de datos para que sus datos sean itables

Train_loader = antorcha.tensiones.datos.DataLoader (dataSet = Train, Batch_Size = Batch_Size, Shuffle = True)
test_loader = antorcha.tensiones.datos.Dataloader (dataSet = test, batch_size = batch_size, shuffle = false)

Definir el modelo.

modelo de clase (antorcha.nn.Módulo):
def __init __ (self, inp, out):
super (modelo, yo).__en eso__()
ser.lineal = antorcha.nn.Lineal (inp, fuera)
Def Forward (Self, X):
salidas = self.lineal (x)
Salidas de retorno

Especificar los hiperparámetros, el optimizador y la pérdida.

lote = 50
n_iters = 1500
épocas = N_ITERS / (LEN (TRAIN_DATASET) / Batch)
INP = 784
Fuera = 10
alfa = 0.001
modelo = logisticRegression (inp, out)
pérdida = antorcha.nn.CrossEnentropyloss ()
optimizador = antorcha.óptimo.SGD (modelo.Parámetros (), lr = alfa)

Entrena el modelo finalmente.

ITR = 0
Para la época en el rango (int (épocas)):
Para I, (imágenes, etiquetas) en enumerate (Train_Loader):
imágenes = variable (imágenes.Ver (-1, 28 * 28))
etiquetas = variable (etiquetas)
optimizador.Zero_grad ()
salidas = modelo (imágenes)
Lossfunc = pérdida (salidas, etiquetas)
FUNC.hacia atrás()
optimizador.paso()
ITR+= 1
Si ITR%500 == 0:
correcto = 0
Total = 0
Para imágenes, etiquetas en test_loader:
imágenes = variable (imágenes.Ver (-1, 28*28))
salidas = modelo (imágenes)
_, predicho = antorcha.Max (salidas.datos, 1)
Total+= etiquetas.tamaño (0)
correcto+= (predicho == etiquetas).suma()
precisión = 100 * correcto/total
print ("La iteración es . La pérdida es . La precisión es .".formato (ITR, Lossfunc.item (), precisión))

Conclusión

Revisamos la explicación de la regresión logística y su implementación utilizando Pytorch, que es una biblioteca popular para desarrollar modelos de aprendizaje profundo. Implementamos el problema de clasificación del conjunto de datos MNIST donde reconocimos los dígitos en función de los parámetros de las imágenes.