Código de Python - Estocástico-gradiente MSE.

Imágen de perfil

Estocástico-gradiente MSE.gráfica de visualizaciones


Python

Publicado el 18 de Septiembre del 2023 por Hilario (123 códigos)
365 visualizaciones desde el 18 de Septiembre del 2023
[
]Estocastico-MSE-AULA-U856.py
************************************


El descenso de gradiente estocástico (SGD, por sus siglas en inglés, Stochastic Gradient Descent) es un algoritmo de optimización utilizado para entrenar modelos de aprendizaje automático, como regresiones lineales o redes neuronales, minimizando una función de costo, como el error cuadrático medio (MSE). El SGD es una variante del descenso de gradiente que utiliza un solo ejemplo de entrenamiento (o un pequeño grupo de ejemplos, conocido como mini-lote o minibatch) en cada paso de actualización en lugar de utilizar todo el conjunto de datos en cada paso.

Requerimientos

[
Realizado bajo plataforma Linux.
Ubuntu 20.04.6 LTS

Editado con sublime Text.
----------------------------------------------------
Ejecución bajo consola de Linux:
python3 Estocastico-MSE-AULA-U856.py

V-0

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

descarga
descarga-2
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
"""
Estocastico-MSE-AULA-U856.py
************************************
Ejecución bajo consola de Linux:
python3 Estocastico-MSE-AULA-U856.py
"""
import numpy as np
import matplotlib.pyplot as plt
 
# Función de pérdida (MSE) y gradiente
def mse_loss(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)
 
def gradient_mse(y_true, y_pred, X):
    n = len(X)
    grad_theta0 = (-2 / n) * np.sum(y_true - y_pred)
    grad_theta1 = (-2 / n) * np.sum((y_true - y_pred) * X)
    return grad_theta0, grad_theta1
"""
Derivada de MSE con respecto a theta0:
∂MSE/∂theta0 = (1/n) * Σ(yi - (theta0 + theta1 * xi)) * (-1)
Derivada de MSE con respecto a theta1:
∂MSE/∂theta1 = (1/n) * Σ(yi - (theta0 + theta1 * xi)) * (-xi)
"""
# Datos de entrenamiento
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)  # Incluye ruido
 
# Inicialización de parámetros
theta0 = 0.5
theta1 = 0.5
 
# Hiperparámetros de SGD
learning_rate = 0.01
epochs = 10
 
# Listas para almacenar el historial de costos y los parámetros
cost_history = []
theta0_history = []
theta1_history = []
 
# Algoritmo de SGD
for epoch in range(epochs):
    for i in range(len(X)):
        # Selección aleatoria de un punto de datos
        random_index = np.random.randint(0, len(X))
        xi = X[random_index]
        yi = y[random_index]
 
        # Cálculo de la predicción
        prediction = theta0 + theta1 * xi
 
        # Cálculo del gradiente utilizando MSE
        grad_theta0, grad_theta1 = gradient_mse(yi, prediction, xi)
 
        # Actualización de parámetros
        theta0 -= learning_rate * grad_theta0
        theta1 -= learning_rate * grad_theta1
 
    # Cálculo de la pérdida total en esta época utilizando MSE
    y_pred = theta0 + theta1 * X
    total_loss = mse_loss(y, y_pred)
 
    # Almacenar el historial de costos y parámetros
    cost_history.append(total_loss)
    theta0_history.append(theta0)
    theta1_history.append(theta1)
 
    # Imprimir la pérdida en cada época
    print(f'Época {epoch+1}/{epochs}, Pérdida: {total_loss}')
 
# Parámetros finales
print(f'Parámetro theta0: {theta0}')
print(f'Parámetro theta1: {theta1}')
 
# Gráfico de ajuste lineal
plt.figure(figsize=(12, 6))
plt.scatter(X, y, label='Datos de entrenamiento')
plt.plot(X, theta0 + theta1 * X, color='red', label='Ajuste Lineal')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Ajuste Lineal con SGD y MSE')
plt.show()
 
# Gráfico del historial de costos
plt.figure(figsize=(12, 6))
plt.plot(range(epochs), cost_history, color='black', marker='o', markerfacecolor='red')
plt.xlabel('Época')
plt.ylabel('Pérdida (MSE)')
plt.title('Historial de Costos (MSE)')
plt.show()
"""
SALIDA IMPRIMIDA POR CONSOLA:
Época 1/10, Pérdida: 1.1932064385323073
Época 2/10, Pérdida: 1.1314938489460211
Época 3/10, Pérdida: 1.0477628396384442
Época 4/10, Pérdida: 1.0335604942750691
Época 5/10, Pérdida: 1.0475480258456065
Época 6/10, Pérdida: 1.035285300712662
Época 7/10, Pérdida: 1.0888298420413163
Época 8/10, Pérdida: 0.9958454978499078
Época 9/10, Pérdida: 0.9990065328074037
Época 10/10, Pérdida: 1.04096915247266
Parámetro theta0: 4.329576305574221
Parámetro theta1: 3.0780458813595915
"""



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/s7437