"""
Realizamos un Descenso de Gradiente.
Función a utilizar:
f(x)=x^2
"""
#Importamos módulos necesarios
import numpy as np
import matplotlib.pyplot as plt
#Declaramos funciones
def FuncionDe_x(x):
return x**2
#Función para la derivada
def Derivada_Descendente(Coeficiente_Aprendizaje,Número_Interaciones):
#Almacenamiento de valores de inicio, valores x, valores y.
Valor_Inicio_x = 16.0 # Valor inicial de x
Valores_x = [] # Para almacenar los valores de x en cada iteración
Valores_y = [] # Para almacenar los valores de f(x) en cada iteración que daran coordenadas y.
for _ in range(Número_Interaciones):
Derivada_en_Punto = 2 * Valor_Inicio_x # El gradiente de la función f(x) = x^2 es 2x
Valor_Inicio_x -= Coeficiente_Aprendizaje * Derivada_en_Punto
#Almacenamos los valores en las variables abiertas utilizando:append
Valores_x.append(Valor_Inicio_x) # Guardar el valor actual de x
Valores_y.append(FuncionDe_x(Valor_Inicio_x)) # Guardar el valor actual de f(x) que da el primer valor en y.
#Deberías asegurarte de que el return esté fuera del bucle for,
#para que la función pueda realizar todas las iteraciones
#antes de devolver los resultados.
return Valor_Inicio_x, Valores_x, Valores_y
#Declaramos ciente de aprendizaje (CoefiLearning rate) y el número de interaciones.
Coeficiente_Aprendizaje = 0.01
Número_Interaciones = 1000
#Según los resultados podemos aumenta el número de iteraciones.
#Una vez finalizadas las interaciones le pedimos a la función que nos devuelva los valores.
Minimimo_Valor_x, Valores_x, Valores_y = Derivada_Descendente(Coeficiente_Aprendizaje,Número_Interaciones)
print('\n')
#Imprimimos el valor mínimo de regresión en x.
print("********************************************************")
print("Valor minimimo de regresión en x:", Minimimo_Valor_x)
Minimimo_Valor_y=Minimimo_Valor_x**2
print("Valor mínimo en y:",Minimimo_Valor_y)
print("********************************************************")
print('\n')
#Vamos a iniciar la construcción de la gráfica.
plt.scatter(Valores_x, FuncionDe_x(np.array(Valores_x)), color='black', label='Descenso de Gradiente')
plt.grid(True, which='both', linestyle='--', linewidth=0.5, color='red')
plt.minorticks_on()
plt.plot(Valores_x, Valores_y, label='f(x) = x^2')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.show()
"""
********************************************************
Valor minimimo de regresión en x: 2.6927477715455246e-08
Valor mínimo en y: 7.250890561163388e-16
********************************************************
"""