Estoy tratando de aprender el descenso de gradiente y en el curso de lo que estoy tratando de encontrar el óptimo m y c valor para mi modelo, para $y=mx+c$
Para ello, he trazado el MSE utilizando el siguiente código en python
#building the model
#lets start with random value of m and c
m=0
c=0
l=0.0001 #l is the learning rate
n=float(len(X_train)) # n=number of training data, we are converting it to float since we will need to divide n
mse=[]
for i in range (0,4000):
Y_pred=m*X_train+c
mse.append(numpy.sum((Y_train-Y_pred)**2)/n)
D_m= (-2/n) * sum(X_train*(Y_train-Y_pred))
D_c= (-2/n) * sum(Y_train-Y_pred)
m=m-l*D_m
c=c-l*D_c
plt.plot(mse)
Y la salida que estoy obteniendo para esto es esta-->
Por lo tanto, parece que la PYME es más o menos la misma después de 2000, y se mantiene más o menos igual hasta 4000
Así que estoy tomando los valores m y c que he obtenido en la iteración 4000. En el gráfico, podemos ver que el valor MSE es inferior a 0,2.
Pero para mi sorpresa cuando hago
mse[-1]
Tengo un NÚMERO ENORME como respuesta
La respuesta que obtengo para mse[-1] es 12041739532.188858
Y por esta razón, mi modelo final es el que peor funciona, produciendo algo así como la salida en el conjunto de entrenamiento.
Será de gran ayuda si alguien puede orientarme sobre por qué ocurre esto con el valor de MSE. Gracias.