AI con Python - Apprendimento supervisionato: regressione

La regressione è uno dei più importanti strumenti statistici e di apprendimento automatico. Non sbaglieremmo se dicessimo che il viaggio del machine learning inizia dalla regressione. Può essere definita come la tecnica parametrica che ci consente di prendere decisioni basate sui dati o in altre parole ci permette di fare previsioni basate sui dati apprendendo la relazione tra variabili di input e output. Qui, le variabili di output dipendenti dalle variabili di input, sono numeri reali a valori continui. Nella regressione, la relazione tra variabili di input e output è importante e ci aiuta a capire come il valore della variabile di output cambia con il cambiamento della variabile di input. La regressione viene spesso utilizzata per la previsione di prezzi, aspetti economici, variazioni e così via.

Creazione di regressori in Python

In questa sezione impareremo come costruire un regressore singolo e multivariabile.

Regressore lineare / Regressore variabile singola

Diamo importanza ad alcuni pacchetti richiesti -

import numpy as np
from sklearn import linear_model
import sklearn.metrics as sm
import matplotlib.pyplot as plt

Ora, dobbiamo fornire i dati di input e abbiamo salvato i nostri dati nel file denominato linear.txt.

input = 'D:/ProgramData/linear.txt'

Dobbiamo caricare questi dati utilizzando il file np.loadtxt funzione.

input_data = np.loadtxt(input, delimiter=',')
X, y = input_data[:, :-1], input_data[:, -1]

Il prossimo passo sarebbe addestrare il modello. Cerchiamo di fornire formazione e campioni di prova.

training_samples = int(0.6 * len(X))
testing_samples = len(X) - num_training

X_train, y_train = X[:training_samples], y[:training_samples]

X_test, y_test = X[training_samples:], y[training_samples:]

Ora dobbiamo creare un oggetto regressore lineare.

reg_linear = linear_model.LinearRegression()

Addestra l'oggetto con i campioni di addestramento.

reg_linear.fit(X_train, y_train)

Dobbiamo fare la previsione con i dati dei test.

y_test_pred = reg_linear.predict(X_test)

Ora traccia e visualizza i dati.

plt.scatter(X_test, y_test, color = 'red')
plt.plot(X_test, y_test_pred, color = 'black', linewidth = 2)
plt.xticks(())
plt.yticks(())
plt.show()

Produzione

Ora possiamo calcolare le prestazioni della nostra regressione lineare come segue:

print("Performance of Linear regressor:")
print("Mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_pred), 2))
print("Mean squared error =", round(sm.mean_squared_error(y_test, y_test_pred), 2))
print("Median absolute error =", round(sm.median_absolute_error(y_test, y_test_pred), 2))
print("Explain variance score =", round(sm.explained_variance_score(y_test, y_test_pred),
2))
print("R2 score =", round(sm.r2_score(y_test, y_test_pred), 2))

Produzione

Prestazioni del regressore lineare -

Mean absolute error = 1.78
Mean squared error = 3.89
Median absolute error = 2.01
Explain variance score = -0.09
R2 score = -0.09

Nel codice sopra, abbiamo usato questi piccoli dati. Se desideri un set di dati di grandi dimensioni, puoi utilizzare sklearn.dataset per importare un set di dati più grande.

2,4.82.9,4.72.5,53.2,5.56,57.6,43.2,0.92.9,1.92.4,
3.50.5,3.41,40.9,5.91.2,2.583.2,5.65.1,1.54.5,
1.22.3,6.32.1,2.8

Regressore multivariabile

Innanzitutto, importiamo alcuni pacchetti richiesti:

import numpy as np
from sklearn import linear_model
import sklearn.metrics as sm
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures

Ora, dobbiamo fornire i dati di input e abbiamo salvato i nostri dati nel file denominato linear.txt.

input = 'D:/ProgramData/Mul_linear.txt'

Caricheremo questi dati utilizzando il file np.loadtxt funzione.

input_data = np.loadtxt(input, delimiter=',')
X, y = input_data[:, :-1], input_data[:, -1]

Il prossimo passo sarebbe addestrare il modello; daremo formazione e prove di campioni.

training_samples = int(0.6 * len(X))
testing_samples = len(X) - num_training

X_train, y_train = X[:training_samples], y[:training_samples]

X_test, y_test = X[training_samples:], y[training_samples:]

Ora dobbiamo creare un oggetto regressore lineare.

reg_linear_mul = linear_model.LinearRegression()

Addestra l'oggetto con i campioni di addestramento.

reg_linear_mul.fit(X_train, y_train)

Ora, finalmente, dobbiamo fare la previsione con i dati del test.

y_test_pred = reg_linear_mul.predict(X_test)

print("Performance of Linear regressor:")
print("Mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_pred), 2))
print("Mean squared error =", round(sm.mean_squared_error(y_test, y_test_pred), 2))
print("Median absolute error =", round(sm.median_absolute_error(y_test, y_test_pred), 2))
print("Explain variance score =", round(sm.explained_variance_score(y_test, y_test_pred), 2))
print("R2 score =", round(sm.r2_score(y_test, y_test_pred), 2))

Produzione

Prestazioni del regressore lineare -

Mean absolute error = 0.6
Mean squared error = 0.65
Median absolute error = 0.41
Explain variance score = 0.34
R2 score = 0.33

Ora creeremo un polinomio di grado 10 e addestreremo il regressore. Forniremo il punto dati di esempio.

polynomial = PolynomialFeatures(degree = 10)
X_train_transformed = polynomial.fit_transform(X_train)
datapoint = [[2.23, 1.35, 1.12]]
poly_datapoint = polynomial.fit_transform(datapoint)

poly_linear_model = linear_model.LinearRegression()
poly_linear_model.fit(X_train_transformed, y_train)
print("\nLinear regression:\n", reg_linear_mul.predict(datapoint))
print("\nPolynomial regression:\n", poly_linear_model.predict(poly_datapoint))

Produzione

Regressione lineare -

[2.40170462]

Regressione polinomiale -

[1.8697225]

Nel codice sopra, abbiamo usato questi piccoli dati. Se desideri un set di dati di grandi dimensioni, puoi utilizzare sklearn.dataset per importare un set di dati più grande.

2,4.8,1.2,3.22.9,4.7,1.5,3.62.5,5,2.8,23.2,5.5,3.5,2.16,5,
2,3.27.6,4,1.2,3.23.2,0.9,2.3,1.42.9,1.9,2.3,1.22.4,3.5,
2.8,3.60.5,3.4,1.8,2.91,4,3,2.50.9,5.9,5.6,0.81.2,2.58,
3.45,1.233.2,5.6,2,3.25.1,1.5,1.2,1.34.5,1.2,4.1,2.32.3,
6.3,2.5,3.22.1,2.8,1.2,3.6