PyTorch - Regressione lineare
In questo capitolo, ci concentreremo sull'esempio di base dell'implementazione della regressione lineare utilizzando TensorFlow. La regressione logistica o regressione lineare è un approccio di apprendimento automatico supervisionato per la classificazione di categorie discrete di ordine. Il nostro obiettivo in questo capitolo è costruire un modello in base al quale un utente possa prevedere la relazione tra variabili predittive e una o più variabili indipendenti.
La relazione tra queste due variabili è considerata lineare, ovvero, se y è la variabile dipendente ex è considerata la variabile indipendente, la relazione di regressione lineare di due variabili sarà simile all'equazione menzionata di seguito:
Y = Ax+b
Successivamente, progetteremo un algoritmo per la regressione lineare che ci permetta di comprendere due importanti concetti riportati di seguito:
- Funzione di costo
- Algoritmi di discesa del gradiente
La rappresentazione schematica della regressione lineare è menzionata di seguito
Interpretare il risultato
$$ Y = ax + b $$
Il valore di a è la pendenza.
Il valore di b è il y − intercept.
r è il correlation coefficient.
r2 è il correlation coefficient.
La vista grafica dell'equazione della regressione lineare è menzionata di seguito:
I passaggi seguenti vengono utilizzati per implementare la regressione lineare utilizzando PyTorch -
Passo 1
Importa i pacchetti necessari per creare una regressione lineare in PyTorch utilizzando il codice seguente:
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
Passo 2
Crea un singolo set di allenamento con il set di dati disponibile come mostrato di seguito:
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)
Passaggio 3
Implementa la regressione lineare con le librerie PyTorch come indicato di seguito -
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')
Il grafico generato è il seguente: