"""
--------------------------
A fronte praecipitium a tergo lupi.
---------------------------
***************************
f(x,t)=(x**2/3)+t
Valores de predicción ([[8, 12]])
Valor de Salida prediccion:
(8**2/3)+12= 33,333333333
****************************
Realizado en plataforma Linux.
Ubuntu 20.04.6 LTS.
Editado con Google Colab.
"""
# Importamos las librerías
import numpy as np
from sklearn.neural_network import MLPRegressor
import matplotlib.pyplot as plt
# Generamos datos de ejemplo
Valores_Entrada = np.array([[1, 3], [8, 2], [6, 7], [5, 1], [9, 4], [7, 6],
[9, 5], [6, 8], [5, 7],[12,23],[19,2],[13,5],
[14,8],[21,7],[8.53,7],[12,23],[40,20],[27,35],[9,123]])
Valores_Salida = np.array([3.333, 23.333, 19, 9.3333, 31.333, 22.333, 32.333,
20, 15.33,71,122.333,61.333,73.33,
154,31.253,71,553.333,278,150])
# Creamos la red neuronal
mlp = MLPRegressor(hidden_layer_sizes=(12,), activation='relu', solver='adam', max_iter=18000)
# Entrenamos la red
mlp.fit(Valores_Entrada, Valores_Salida)
# Hacemos una predicción
prediccion = mlp.predict([[8, 12]])
print("Predicción:", prediccion[0])
# Generamos valores para la línea de regresión
x_range = np.linspace(0, 40, 100) # Generamos valores de x en el rango [0, 10]
y_pred = mlp.predict(np.column_stack((x_range, np.ones_like(x_range) * 1.5))) # Predicciones para x_range
# Graficamos los resultados
plt.scatter(Valores_Entrada[:, 0], Valores_Salida, color='red', label='Valores de Entrada')
plt.scatter([1.8], prediccion, color='blue', label='Predicción', marker='o')
plt.plot(x_range, y_pred, color='green', label='Línea de Regresión')
plt.xlabel('x')
plt.ylabel('f(x,t)')
plt.legend()
plt.show()
#Predicción de salida con 18000 iteraciones: 33.991723657953614