"""
]ClaseAula-F896.py
"""
# Importar librerías
import numpy as np
import matplotlib.pyplot as plt
# Generar datos aleatorios para entrada y salida
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# Definir los parámetros iniciales del modelo
w = 0 # Peso
b = 0 # Sesgo
alpha = 0.1 # Tasa de aprendizaje
iteraciones = 100 # Número de iteraciones
# Definir la función de costo
def costo(w, b):
return np.mean((y - (w * X + b)) ** 2)#f(x)=m*X+b
# Definir la función de gradiente
def gradiente(w, b):
dw = -2 * np.mean(X * (y - (w * X + b))) # Derivada parcial respecto a w
db = -2 * np.mean(y - (w * X + b)) # Derivada parcial respecto a b
return dw, db
# Definir el algoritmo de descenso de gradiente tipo Batch
def descenso_gradiente(w, b, alpha, iteraciones):
historial_costo = [] # Lista para guardar los valores de la función de costo en cada iteración
for i in range(iteraciones):
dw, db = gradiente(w, b) # Calcular el gradiente
w = w - alpha * dw # Actualizar el peso
b = b - alpha * db # Actualizar el sesgo
c = costo(w, b) # Calcular el costo
historial_costo.append(c) # Guardar el costo en la lista
print(f"Iteraciones {i+1}: w = {w:.3f}, b = {b:.3f}, costo = {c:.3f}") # Imprimir los valores en cada iteración
return w, b, historial_costo
# Ejecutar el algoritmo y obtener los parámetros óptimos y el historial de costo
w_optimo, b_optimo, historial_costo = descenso_gradiente(w, b, alpha, iteraciones)
plt.figure(figsize=(12,6))
# Graficar el historial de costo
plt.plot(historial_costo)
plt.scatter(range(iteraciones),historial_costo, color='red',marker='o',label='Valor de los saltos del descenso MSE')
plt.xlabel("Epoch")
plt.ylabel("Costo")
plt.show()
plt.figure(figsize=(12,6))
# Graficar los datos y la recta ajustada por el modelo
plt.scatter(X, y)
plt.plot(X, w_optimo * X + b_optimo, c="red")
plt.xlabel("X")
plt.ylabel("y")
plt.show()
"""
Iteraciones 1: w = 1.527, b = 1.406, costo = 19.153
Iteraciones 2: w = 2.413, b = 2.242, costo = 7.373
Iteraciones 3: w = 2.924, b = 2.743, costo = 3.308
Iteraciones 4: w = 3.215, b = 3.047, costo = 1.901
Iteraciones 5: w = 3.376, b = 3.236, costo = 1.409
Iteraciones 6: w = 3.463, b = 3.356, costo = 1.233
Iteraciones 7: w = 3.505, b = 3.436, costo = 1.166
Iteraciones 8: w = 3.522, b = 3.491, costo = 1.137
Iteraciones 9: w = 3.525, b = 3.533, costo = 1.122
Iteraciones 10: w = 3.519, b = 3.565, costo = 1.112
Iteraciones 11: w = 3.508, b = 3.593, costo = 1.103
Iteraciones 12: w = 3.495, b = 3.617, costo = 1.096
Iteraciones 13: w = 3.480, b = 3.638, costo = 1.089
Iteraciones 14: w = 3.465, b = 3.658, costo = 1.083
Iteraciones 15: w = 3.450, b = 3.677, costo = 1.078
Iteraciones 16: w = 3.435, b = 3.695, costo = 1.072
Iteraciones 17: w = 3.420, b = 3.712, costo = 1.067
Iteraciones 18: w = 3.406, b = 3.729, costo = 1.062
Iteraciones 19: w = 3.392, b = 3.745, costo = 1.058
Iteraciones 20: w = 3.378, b = 3.760, costo = 1.054
Iteraciones 21: w = 3.365, b = 3.775, costo = 1.050
Iteraciones 22: w = 3.352, b = 3.790, costo = 1.046
Iteraciones 23: w = 3.340, b = 3.803, costo = 1.043
Iteraciones 24: w = 3.328, b = 3.817, costo = 1.040
Iteraciones 25: w = 3.316, b = 3.830, costo = 1.037
Iteraciones 26: w = 3.305, b = 3.843, costo = 1.034
Iteraciones 27: w = 3.294, b = 3.855, costo = 1.031
Iteraciones 28: w = 3.284, b = 3.867, costo = 1.029
Iteraciones 29: w = 3.274, b = 3.878, costo = 1.026
Iteraciones 30: w = 3.264, b = 3.889, costo = 1.024
Iteraciones 31: w = 3.254, b = 3.900, costo = 1.022
Iteraciones 32: w = 3.245, b = 3.910, costo = 1.020
Iteraciones 33: w = 3.236, b = 3.920, costo = 1.019
Iteraciones 34: w = 3.228, b = 3.930, costo = 1.017
Iteraciones 35: w = 3.219, b = 3.939, costo = 1.015
Iteraciones 36: w = 3.211, b = 3.949, costo = 1.014
Iteraciones 37: w = 3.203, b = 3.957, costo = 1.013
Iteraciones 38: w = 3.196, b = 3.966, costo = 1.011
Iteraciones 39: w = 3.189, b = 3.974, costo = 1.010
Iteraciones 40: w = 3.181, b = 3.982, costo = 1.009
Iteraciones 41: w = 3.175, b = 3.990, costo = 1.008
Iteraciones 42: w = 3.168, b = 3.997, costo = 1.007
Iteraciones 43: w = 3.162, b = 4.005, costo = 1.006
Iteraciones 44: w = 3.155, b = 4.012, costo = 1.005
Iteraciones 45: w = 3.149, b = 4.018, costo = 1.004
Iteraciones 46: w = 3.143, b = 4.025, costo = 1.004
Iteraciones 47: w = 3.138, b = 4.031, costo = 1.003
Iteraciones 48: w = 3.132, b = 4.037, costo = 1.002
Iteraciones 49: w = 3.127, b = 4.043, costo = 1.002
Iteraciones 50: w = 3.122, b = 4.049, costo = 1.001
Iteraciones 51: w = 3.117, b = 4.055, costo = 1.001
Iteraciones 52: w = 3.112, b = 4.060, costo = 1.000
Iteraciones 53: w = 3.108, b = 4.065, costo = 1.000
Iteraciones 54: w = 3.103, b = 4.070, costo = 0.999
Iteraciones 55: w = 3.099, b = 4.075, costo = 0.999
Iteraciones 56: w = 3.095, b = 4.080, costo = 0.998
Iteraciones 57: w = 3.091, b = 4.085, costo = 0.998
Iteraciones 58: w = 3.087, b = 4.089, costo = 0.998
Iteraciones 59: w = 3.083, b = 4.093, costo = 0.997
Iteraciones 60: w = 3.079, b = 4.097, costo = 0.997
Iteraciones 61: w = 3.076, b = 4.101, costo = 0.997
Iteraciones 62: w = 3.072, b = 4.105, costo = 0.996
Iteraciones 63: w = 3.069, b = 4.109, costo = 0.996
Iteraciones 64: w = 3.066, b = 4.113, costo = 0.996
Iteraciones 65: w = 3.062, b = 4.116, costo = 0.996
Iteraciones 66: w = 3.059, b = 4.120, costo = 0.995
Iteraciones 67: w = 3.057, b = 4.123, costo = 0.995
Iteraciones 68: w = 3.054, b = 4.126, costo = 0.995
Iteraciones 69: w = 3.051, b = 4.129, costo = 0.995
Iteraciones 70: w = 3.048, b = 4.132, costo = 0.995
Iteraciones 71: w = 3.046, b = 4.135, costo = 0.995
Iteraciones 72: w = 3.043, b = 4.138, costo = 0.994
Iteraciones 73: w = 3.041, b = 4.141, costo = 0.994
Iteraciones 74: w = 3.038, b = 4.143, costo = 0.994
Iteraciones 75: w = 3.036, b = 4.146, costo = 0.994
Iteraciones 76: w = 3.034, b = 4.148, costo = 0.994
Iteraciones 77: w = 3.032, b = 4.151, costo = 0.994
Iteraciones 78: w = 3.030, b = 4.153, costo = 0.994
Iteraciones 79: w = 3.028, b = 4.155, costo = 0.994
Iteraciones 80: w = 3.026, b = 4.157, costo = 0.994
Iteraciones 81: w = 3.024, b = 4.159, costo = 0.994
Iteraciones 82: w = 3.022, b = 4.161, costo = 0.993
Iteraciones 83: w = 3.021, b = 4.163, costo = 0.993
Iteraciones 84: w = 3.019, b = 4.165, costo = 0.993
Iteraciones 85: w = 3.017, b = 4.167, costo = 0.993
Iteraciones 86: w = 3.016, b = 4.169, costo = 0.993
Iteraciones 87: w = 3.014, b = 4.171, costo = 0.993
Iteraciones 88: w = 3.013, b = 4.172, costo = 0.993
Iteraciones 89: w = 3.011, b = 4.174, costo = 0.993
Iteraciones 90: w = 3.010, b = 4.175, costo = 0.993
Iteraciones 91: w = 3.009, b = 4.177, costo = 0.993
Iteraciones 92: w = 3.007, b = 4.178, costo = 0.993
Iteraciones 93: w = 3.006, b = 4.180, costo = 0.993
Iteraciones 94: w = 3.005, b = 4.181, costo = 0.993
Iteraciones 95: w = 3.004, b = 4.182, costo = 0.993
Iteraciones 96: w = 3.003, b = 4.184, costo = 0.993
Iteraciones 97: w = 3.001, b = 4.185, costo = 0.993
Iteraciones 98: w = 3.000, b = 4.186, costo = 0.993
Iteraciones 99: w = 2.999, b = 4.187, costo = 0.993
Iteraciones 100: w = 2.998, b = 4.188, costo = 0.993
"""