PyTorch - Regresión lineal

En este capítulo, nos centraremos en un ejemplo básico de implementación de regresión lineal con TensorFlow. La regresión logística o regresión lineal es un enfoque de aprendizaje automático supervisado para la clasificación de categorías discretas de orden. Nuestro objetivo en este capítulo es construir un modelo mediante el cual un usuario pueda predecir la relación entre las variables predictoras y una o más variables independientes.

La relación entre estas dos variables se considera lineal, es decir, si y es la variable dependiente y x se considera la variable independiente, entonces la relación de regresión lineal de dos variables se verá como la ecuación que se menciona a continuación:

Y = Ax+b

A continuación, diseñaremos un algoritmo de regresión lineal que nos permita comprender dos conceptos importantes que se dan a continuación:

  • Función de costo
  • Algoritmos de descenso de gradiente

La representación esquemática de la regresión lineal se menciona a continuación.

Interpretando el resultado

$$ Y = ax + b $$

  • El valor de a es la pendiente.

  • El valor de b es el y − intercept.

  • r es el correlation coefficient.

  • r2 es el correlation coefficient.

La vista gráfica de la ecuación de regresión lineal se menciona a continuación:

Los siguientes pasos se utilizan para implementar la regresión lineal usando PyTorch:

Paso 1

Importe los paquetes necesarios para crear una regresión lineal en PyTorch usando el siguiente código:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import seaborn as sns
import pandas as pd
%matplotlib inline

sns.set_style(style = 'whitegrid')
plt.rcParams["patch.force_edgecolor"] = True

Paso 2

Cree un único conjunto de entrenamiento con el conjunto de datos disponible como se muestra a continuación:

m = 2 # slope
c = 3 # interceptm = 2 # slope
c = 3 # intercept
x = np.random.rand(256)

noise = np.random.randn(256) / 4

y = x * m + c + noise

df = pd.DataFrame()
df['x'] = x
df['y'] = y

sns.lmplot(x ='x', y ='y', data = df)

Paso 3

Implemente la regresión lineal con las bibliotecas de PyTorch como se menciona a continuación:

import torch
import torch.nn as nn
from torch.autograd import Variable
x_train = x.reshape(-1, 1).astype('float32')
y_train = y.reshape(-1, 1).astype('float32')

class LinearRegressionModel(nn.Module):
   def __init__(self, input_dim, output_dim):
      super(LinearRegressionModel, self).__init__()
      self.linear = nn.Linear(input_dim, output_dim)

   def forward(self, x):
      out = self.linear(x)
      return out
input_dim = x_train.shape[1]
output_dim = y_train.shape[1]
input_dim, output_dim(1, 1)
model = LinearRegressionModel(input_dim, output_dim)
criterion = nn.MSELoss()
[w, b] = model.parameters()

def get_param_values():
   return w.data[0][0], b.data[0]

def plot_current_fit(title = ""):
plt.figure(figsize = (12,4))
plt.title(title)
plt.scatter(x, y, s = 8)
w1 = w.data[0][0]
b1 = b.data[0]
x1 = np.array([0., 1.])
y1 = x1 * w1 + b1
plt.plot(x1, y1, 'r', label = 'Current Fit ({:.3f}, {:.3f})'.format(w1, b1))
plt.xlabel('x (input)')
plt.ylabel('y (target)')
plt.legend()
plt.show()
plot_current_fit('Before training')

La trama generada es la siguiente: