IA con Python - Aprendizaje supervisado: regresión

La regresión es una de las herramientas estadísticas y de aprendizaje automático más importantes. No nos equivocaríamos al decir que el viaje del aprendizaje automático comienza con la regresión. Puede definirse como la técnica paramétrica que nos permite tomar decisiones basadas en datos o, en otras palabras, nos permite hacer predicciones basadas en datos aprendiendo la relación entre las variables de entrada y salida. Aquí, las variables de salida que dependen de las variables de entrada son números reales de valor continuo. En la regresión, la relación entre las variables de entrada y salida es importante y nos ayuda a comprender cómo cambia el valor de la variable de salida con el cambio de la variable de entrada. La regresión se utiliza con frecuencia para predecir precios, economía, variaciones, etc.

Construyendo regresores en Python

En esta sección, aprenderemos cómo construir un regresor tanto simple como multivariable.

Regresor lineal / Regresor de variable única

Permítanos importantes algunos paquetes obligatorios:

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

Ahora, necesitamos proporcionar los datos de entrada y hemos guardado nuestros datos en el archivo llamado linear.txt.

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

Necesitamos cargar estos datos usando el np.loadtxt función.

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

El siguiente paso sería entrenar el modelo. Démosle muestras de entrenamiento y prueba.

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:]

Ahora, necesitamos crear un objeto regresor lineal.

reg_linear = linear_model.LinearRegression()

Entrena el objeto con las muestras de entrenamiento.

reg_linear.fit(X_train, y_train)

Necesitamos hacer la predicción con los datos de prueba.

y_test_pred = reg_linear.predict(X_test)

Ahora trace y visualice los datos.

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()

Salida

Ahora, podemos calcular el rendimiento de nuestra regresión lineal de la siguiente manera:

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))

Salida

Rendimiento del regresor lineal -

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

En el código anterior, hemos utilizado estos pequeños datos. Si desea un gran conjunto de datos, puede usar sklearn.dataset para importar un conjunto de datos más 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

Regresor multivariable

Primero, importemos algunos paquetes obligatorios:

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

Ahora, necesitamos proporcionar los datos de entrada y hemos guardado nuestros datos en el archivo llamado linear.txt.

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

Cargaremos estos datos usando el np.loadtxt función.

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

El siguiente paso sería entrenar el modelo; Daremos muestras de entrenamiento y prueba.

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:]

Ahora, necesitamos crear un objeto regresor lineal.

reg_linear_mul = linear_model.LinearRegression()

Entrena el objeto con las muestras de entrenamiento.

reg_linear_mul.fit(X_train, y_train)

Ahora, por fin tenemos que hacer la predicción con los datos de prueba.

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))

Salida

Rendimiento del regresor lineal -

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

Ahora, crearemos un polinomio de grado 10 y entrenaremos el regresor. Proporcionaremos el punto de datos de muestra.

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))

Salida

Regresión lineal -

[2.40170462]

Regresión polinomial -

[1.8697225]

En el código anterior, hemos utilizado estos pequeños datos. Si desea un gran conjunto de datos, puede usar sklearn.dataset para importar un conjunto de datos más 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