Código de Python - (Batch Gradient Descent)

Imágen de perfil

(Batch Gradient Descent)gráfica de visualizaciones


Python

Publicado el 4 de Septiembre del 2023 por Hilario (124 códigos)
293 visualizaciones desde el 4 de Septiembre del 2023
ClaseB-238_Lunes_Sep_23.py
-----------------------------------
Hilario Iglesias Martínez
*************************************
Este es un programa en Python
se realiza una regresión lineal
utilizando el método de gradiente descendente
(Batch Gradient Descent)
El programa realiza una regresión lineal utilizando
el método de gradiente descendente
y visualiza los resultados a través de
gráficas. Es una implementación simple
pero efectiva de un modelo de regresión lineal.
***********************************************
Programa realizado bajo una plataforma Linux:
Ubuntu 20.04.6 LTS.
Editado con: Sublime Text.
*********************************
Ejecución bajo consola Linux.
python3 ParaClaseLunes-Sep-F543.PY
*******************************************
"""

Requerimientos

Programa realizado bajo una plataforma Linux:
Ubuntu 20.04.6 LTS.
Editado con: Sublime Text.
*********************************

V-0

Publicado el 4 de Septiembre del 2023gráfica de visualizaciones de la versión: V-0
294 visualizaciones desde el 4 de Septiembre del 2023
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

descarga
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
"""
ClaseB-238_Lunes_Sep_23.py
-----------------------------------
Hilario Iglesias Martínez
*************************************
Este es un programa en Python
se realiza una regresión lineal
utilizando el método de gradiente descendente
(Batch Gradient Descent)
El programa realiza una regresión lineal utilizando
el método de gradiente descendente
y visualiza los resultados a través de
gráficas. Es una implementación simple
pero efectiva de un modelo de regresión lineal.
***********************************************
Programa realizado bajo una plataforma Linux:
Ubuntu 20.04.6 LTS.
Editado con: Sublime Text.
*********************************
Ejecución bajo consola Linux.
python3 ParaClaseLunes-Sep-F543.PY
*******************************************
"""
 
#Importación de biblioteca:NumPy realiza operaciones matriciales.
#Importación de Matplotlib para la creación de gráficos.
import numpy as np
import matplotlib.pyplot as plt
 
# Datos aleatorios de ejemplo.
"""
Se generan datos de ejemplo Aleatorios_X, y
Aleatorios_y. Utilizando la función np.random.rand de NumPy.
Estos datos se utilizan para entrenar el modelo de regresión.
"""
np.random.seed(0)
Aleatorios_X = 2 * np.random.rand(150, 1)
Aleatorios_y = 4 + 3 * Aleatorios_X + np.random.randn(150, 1)
 
# Inicialización de parámetros (pendiente y ordenada al origen)
Pendiente = 0
Intercepto = 0
 
#Parámetros de Tasa de aprendizaje, y Iteraciones o epoch.
Tasa_Aprendizaje=0.01
Iteraciones = 100
 
# Listas para guardar los valores de pérdida y parámetros en cada iteración.
"""
Perdidas, Pendientes, e Interceptos
son listas vacías que se utilizarán
para almacenar los valores de pérdida,
y los parámetros en cada iteración.
"""
Perdidas = []
Pendientes = []
Interceptos = []
 
# Bucle de iteración
"""
Se ejecuta un bucle for que itera a través del
número de iteraciones especificado.
En cada iteración, se calculan las predicciones (Predicciones)
utilizando la ecuación de regresión lineal.
Se calcula el error entre las predicciones y los valores reales.
Se calculan los gradientes (Gradiente_Pendiente y Gradiente_Intercepto)
utilizando el gradiente descendente para actualizar los parámetros
(Pendiente e Intercepto).
Se calcula la función de pérdida, que es el error cuadrático medio.
Los valores de pérdida, pendiente e intercepto se almacenan en
las listas correspondientes para su posterior visualización.
"""
 
for vueltas in range(Iteraciones):
    # Cálculo de las predicciones
    Predicciones = Pendiente * Aleatorios_X + Intercepto
 
    # Cálculo del error
    Error = Aleatorios_y - Predicciones
 
    # Cálculo de los gradientes
    Gradiente_Pendiente = (-2 / len(Aleatorios_X)) * np.sum(Aleatorios_X * Error)
    Gradiente_Intercepto = (-2 / len(Aleatorios_X)) * np.sum(Error)
 
    # Actualización de parámetros
    Pendiente -= Tasa_Aprendizaje * Gradiente_Pendiente
    Intercepto -= Tasa_Aprendizaje * Gradiente_Intercepto
 
    # Cálculo de la función de pérdida (Error cuadrático medio)
    Perdida = np.mean(Error ** 2)
 
    # Almacenar valores para graficar
    Perdidas.append(Perdida)
    Pendientes.append(Pendiente)
    Interceptos.append(Intercepto)
 
# Parámetros finales
Final_Pendiente = Pendientes[-1] if Pendientes else 0
Final_Intercepto = Interceptos[-1] if Interceptos else 0
#******************************************************
"""
Se realizan tres predicciones (nuevo_x, nuevo1_x, y nuevo2_x)
utilizando la pendiente e intercepto finales obtenidos después
de todas las iteraciones.
"""
m = Pendiente
b = Intercepto
nuevo_x = np.array([[0.5]])  # Nuevo valor de x
nuevo_y = m * nuevo_x + b
nuevo1_x = np.array([[0.8]])  # Nuevo valor de x
nuevo1_y = m * nuevo1_x + b
nuevo2_x = np.array([[0.6]])  # Nuevo valor de x
nuevo2_y = m * nuevo2_x + b
#*****************************************************
# Gráfica de la pérdida en función de las Iteraciones.
"""
Se crea una figura con dos subgráficos:
El primer subgráfico muestra la pérdida
en función de las iteraciones.
El segundo subgráfico muestra los datos reales,
la línea de regresión ajustada y las predicciones realizadas.
"""
plt.figure(figsize=(14, 6))
plt.subplot(1, 2, 1)
plt.plot(range(1, Iteraciones + 1), Perdidas, marker='o')
plt.xlabel('Iteraciones')
plt.ylabel('Pérdida')
plt.title('Pérdida en función de las Iteraciones')
 
# Gráfica de la regresión lineal ajustada
plt.subplot(1, 2, 2)
plt.scatter(Aleatorios_X, Aleatorios_y, label='Datos reales')
plt.plot(Aleatorios_X, Final_Pendiente * Aleatorios_X + Final_Intercepto, color='red',
label='Regresión lineal,m: 3.4501,b: 3.2805')
 
plt.scatter(nuevo_x, nuevo_y, color='black', marker='o', s=100, label='Prueba de predicción_0')
plt.scatter(nuevo1_x, nuevo1_y, color='black', marker='o', s=100, label='Prueba de predicción_1')
plt.scatter(nuevo2_x, nuevo2_y, color='black', marker='o', s=100, label='Prueba de predicción_2')
 
 
 
plt.xlabel('Eje X')
plt.ylabel('Eje y')
plt.legend()
plt.title('Regresión Lineal')
 
plt.tight_layout()
plt.show()
 
#Impresión de parámetros finales:
print("*************************************************")
print(f"Pendiente final, m: {Final_Pendiente:.4f}")
print(f"Ordenada al origen final, b: {Final_Intercepto:.4f}")
print("*************************************************")
"""
*************************************************
Pendiente final, m: 3.4501
Ordenada al origen final, b: 3.2805
*************************************************
"""



Comentarios sobre la versión: V-0 (0)


No hay comentarios
 

Comentar la versión: V-0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7426