Códigos Fuente de Python

Mostrando del 61 al 70 de 759 registros
Imágen de perfil

Descenso gradiente lineal múltiple


Python

Publicado el 9 de Octubre del 2023 por Hilario (122 códigos)
420 visualizaciones desde el 9 de Octubre del 2023
El descenso de gradiente en el contexto de la regresión lineal múltiple se refiere a un algoritmo de optimización utilizado para encontrar los valores óptimos de los coeficientes de una función de regresión lineal que se ajuste mejor a un conjunto de datos con múltiples características (variables independientes). El objetivo es minimizar una función de costo, generalmente el error cuadrático medio (MSE, por sus siglas en inglés), que mide la diferencia entre las predicciones del modelo y los valores reales.

A continuación, se explica cómo funciona el descenso de gradiente en el contexto de la regresión lineal múltiple:

Inicialización: Se inician los coeficientes del modelo con valores aleatorios o ceros.

Cálculo de las predicciones: Se utilizan los coeficientes actuales para hacer predicciones sobre el conjunto de datos de entrenamiento. Esto implica multiplicar cada característica de entrada por su correspondiente coeficiente y sumar todos estos productos para obtener una predicción.

Cálculo del error: Se calcula la diferencia entre las predicciones y los valores reales (etiquetas) del conjunto de entrenamiento. Esto da como resultado un vector de errores.

Cálculo del gradiente: Se calcula el gradiente de la función de costo con respecto a los coeficientes. El gradiente indica la dirección y la magnitud en la que los coeficientes deben actualizarse para minimizar la función de costo. Para el MSE, el gradiente se calcula como la derivada de la función de costo con respecto a cada coeficiente.

Actualización de coeficientes: Se actualizan los coeficientes multiplicándolos por una tasa de aprendizaje (learning rate) y restando el gradiente. Esta actualización mueve los coeficientes en la dirección que reduce el costo.

Iteración: Los pasos 2-5 se repiten iterativamente durante un número fijo de veces (épocas) o hasta que el costo converja a un valor mínimo.

Resultado final: Después de que el algoritmo haya convergido, los coeficientes resultantes se utilizan como los coeficientes óptimos para el modelo de regresión lineal múltiple.

El proceso se repite hasta que se alcance un criterio de convergencia o se haya realizado un número predeterminado de iteraciones. El descenso de gradiente es una técnica fundamental en el aprendizaje automático y la optimización, y se utiliza para ajustar los parámetros de los modelos de manera que se minimice la diferencia entre las predicciones y los valores reales.
Imágen de perfil

Vectores-Descenso de gradiente.


Python

Publicado el 27 de Septiembre del 2023 por Hilario (122 códigos)
302 visualizaciones desde el 27 de Septiembre del 2023
Vectores-27-Denso-Gradiente-AULA-G-86-SEP.py

Este código define una función cuadrática de ejemplo, inicia en un punto y realiza el descenso de gradiente para minimizar la función. Luego, grafica la superficie de la función y muestra la trayectoria del descenso de gradiente en 3D. A medida que el algoritmo de descenso de gradiente avanza, se acerca al mínimo de la función cuadrática.

Asegúrate de tener instaladas las bibliotecas NumPy y Matplotlib para ejecutar este código.
Imágen de perfil

Mini Batch


Python

Publicado el 26 de Septiembre del 2023 por Hilario (122 códigos)
426 visualizaciones desde el 26 de Septiembre del 2023
Cuaderno-Aula-B78-26-Sep-Rv-0.py

El Descenso de Gradiente Mini Batch (Mini Batch Gradient Descent en inglés) es una variante del algoritmo de Descenso de Gradiente que se utiliza comúnmente para entrenar modelos de aprendizaje automático, especialmente en problemas de optimización de grandes conjuntos de datos. El Descenso de Gradiente Mini Batch combina las ideas del Descenso de Gradiente Estocástico (SGD) y el Descenso de Gradiente por Lotes (Batch Gradient Descent).

Aquí están los conceptos clave del Descenso de Gradiente Mini Batch:

Descenso de Gradiente por Lotes (Batch Gradient Descent): En este enfoque, se calcula el gradiente de la función de pérdida utilizando todo el conjunto de datos de entrenamiento en cada iteración del algoritmo. Esto significa que se actualizan los parámetros del modelo una vez por ciclo completo a través del conjunto de datos. El enfoque Batch GD puede ser costoso en términos de memoria y tiempo de cómputo, especialmente para conjuntos de datos grandes.


Descenso de Gradiente Estocástico (SGD): En este enfoque, se calcula y actualiza el gradiente utilizando un solo ejemplo de entrenamiento en cada iteración. Esto conduce a actualizaciones de parámetros más frecuentes, pero a menudo más ruidosas y menos precisas. Aunque es más rápido y consume menos memoria que el enfoque por lotes, puede ser menos estable en la convergencia y requerir más iteraciones.

Descenso de Gradiente Mini Batch: En lugar de utilizar todo el conjunto de datos o un solo ejemplo de entrenamiento, el Descenso de Gradiente Mini Batch se encuentra en algún punto intermedio. Divide el conjunto de datos de entrenamiento en pequeños subconjuntos llamados mini lotes o mini-batches. Luego, en cada iteración, calcula y aplica las actualizaciones de gradiente utilizando uno de estos mini lotes en lugar del conjunto de datos completo o un solo ejemplo.

Las ventajas del Descenso de Gradiente Mini Batch incluyen:

Eficiencia computacional: Al utilizar mini lotes, se pueden aprovechar las ventajas del procesamiento paralelo y reducir la carga en la memoria, lo que lo hace más eficiente que el Descenso de Gradiente por Lotes en términos de tiempo y recursos.

Mayor estabilidad y convergencia: Comparado con SGD, el Descenso de Gradiente Mini Batch tiende a proporcionar actualizaciones de parámetros más estables y una convergencia más suave hacia el mínimo global de la función de pérdida.

Mejor generalización: En muchos casos, el Descenso de Gradiente Mini Batch puede conducir a modelos que generalizan mejor en comparación con SGD, ya que los mini lotes proporcionan un término medio entre el ruido de SGD y la lentitud de Batch GD.

El tamaño del mini lote es un hiperparámetro que debe ajustarse durante el entrenamiento del modelo. Suele ser un valor entre 16 y 256, pero puede variar según el problema y el conjunto de datos. El Descenso de Gradiente Mini Batch es una técnica muy comúnmente utilizada en el entrenamiento de redes neuronales y otros modelos de aprendizaje automático debido a su eficiencia y capacidad para encontrar mínimos globales de manera efectiva.
Imágen de perfil

MiniBatch-Datos-Aleatorios


Python

Publicado el 20 de Septiembre del 2023 por Hilario (122 códigos)
388 visualizaciones desde el 20 de Septiembre del 2023
MiniBatch_Aula-228-G.py


El ejercicio se configura y ejecuta con parámetros mínimos con el fin de
que las salidas impresas por consola no sean grandes. Se puede jugar con estos
valores:
np.random.seed(0)
X = 2 * np.random.rand(20, 1)
y = 4 + 3 * X + np.random.randn(20, 1)
learning_rate = 0.1
batch_size = 10
epochs = 10


***************************************************************************************************************
El descenso de gradiente Mini-Batch es una técnica de optimización ampliamente utilizada en el aprendizaje automático y la optimización numérica. Permite entrenar modelos de manera eficiente al actualizar los pesos del modelo en función de un subconjunto (mini-lote o mini-batch) de datos de entrenamiento en lugar de utilizar el conjunto de datos completo en cada iteración. Además, en algunos casos, se introducen elementos de aleatoriedad en la selección de estos mini-lotes para mejorar la convergencia y evitar que el algoritmo quede atrapado en mínimos locales.

Aquí hay un resumen de cómo funciona el descenso de gradiente Mini-Batch con entrada de datos aleatorios:

División del conjunto de datos: En lugar de usar todo el conjunto de datos de entrenamiento en cada iteración (como se hace en el descenso de gradiente por lotes), el conjunto de datos se divide en mini-lotes más pequeños. La elección del tamaño del mini-lote es un hiperparámetro importante que debe ajustarse según las características de los datos y el modelo.

Aleatorización de los datos: Para introducir aleatoriedad, el conjunto de datos se suele barajar (mezclar) al comienzo de cada época (una época se completa después de que el modelo haya visto todos los mini-lotes). Esto evita que el modelo se ajuste a patrones específicos del orden en que se presentan los datos y mejora la generalización.

Iteración: El algoritmo recorre las épocas, y en cada época, se selecciona un mini-lote aleatorio de datos. Los pesos del modelo se actualizan en función del gradiente calculado utilizando solo los ejemplos en ese mini-lote. La actualización de los pesos se realiza de acuerdo con la dirección del gradiente descendente, como en el descenso de gradiente estándar.

Convergencia: El proceso se repite durante varias épocas hasta que el algoritmo alcance un criterio de convergencia predefinido (por ejemplo, una pérdida baja o un número máximo de épocas).

La aleatorización de los mini-lotes y la aleatorización de los datos en cada época ayudan a evitar que el descenso de gradiente Mini-Batch quede atrapado en mínimos locales y mejora la capacidad del algoritmo para generalizar a nuevos datos. También hace que el entrenamiento sea más eficiente en términos de tiempo y memoria en comparación con el descenso de gradiente por lotes.

El descenso de gradiente Mini-Batch es especialmente útil cuando se trabaja con grandes conjuntos de datos que no caben en la memoria, ya que permite entrenar modelos de manera más rápida y escalable utilizando recursos computacionales limitados.
Imágen de perfil

Mini Batch. Descenso de gradiente.


Python

Publicado el 19 de Septiembre del 2023 por Hilario (122 códigos)
516 visualizaciones desde el 19 de Septiembre del 2023
Descenso de gradiente Mini Batch.
********************************
MiniBatch-Aula_228-B.py

******************************************************************************************
El descenso de gradiente mini batch, también conocido como Mini Batch Gradient Descent, es una variante del algoritmo de optimización del descenso de gradiente utilizado en el aprendizaje automático y la optimización de modelos de redes neuronales. A diferencia del descenso de gradiente estocástico (SGD) y el descenso de gradiente por lotes (Batch Gradient Descent), el descenso de gradiente mini batch combina características de ambos enfoques.

En el descenso de gradiente mini batch, los datos de entrenamiento se dividen en lotes más pequeños, cada uno de los cuales se utiliza para calcular una actualización parcial de los pesos del modelo. Estos lotes más pequeños se llaman "mini lotes". La idea detrás de esta técnica es encontrar un equilibrio entre la eficiencia de la actualización de parámetros y la variabilidad de las actualizaciones en comparación con el SGD y el Batch Gradient Descent.

Aquí hay una descripción paso a paso del proceso del descenso de gradiente mini batch:

División de los datos: Los datos de entrenamiento se dividen en mini lotes de tamaño fijo. El tamaño del mini lote es un hiperparámetro que se puede ajustar según las necesidades del problema. Por lo general, los tamaños de mini lotes varían desde 16 hasta 256 ejemplos, pero esto puede variar según el conjunto de datos y la arquitectura de la red.

Inicialización de pesos: Se inicializan los pesos del modelo de manera aleatoria o utilizando algún método de inicialización específico.

Cálculo del gradiente: Para cada mini lote, se calcula el gradiente de la función de pérdida con respecto a los pesos del modelo utilizando solo los ejemplos en ese mini lote. Esto se hace utilizando retropropagación (backpropagation).

Actualización de pesos: Los pesos del modelo se actualizan utilizando el gradiente calculado. La fórmula de actualización es similar a la del descenso de gradiente estocástico, pero en lugar de utilizar un solo ejemplo, se promedian los gradientes de todos los ejemplos en el mini lote. Esto suaviza las actualizaciones y reduce la variabilidad en comparación con el SGD.

Iteración: Se repiten los pasos 3 y 4 para cada mini lote. Este proceso se repite a lo largo de múltiples épocas hasta que se alcance un criterio de parada, como un número máximo de épocas o una convergencia satisfactoria.

Ventajas del descenso de gradiente mini batch:

Mayor eficiencia computacional en comparación con el Batch Gradient Descent, ya que se aprovecha el paralelismo en las operaciones matriciales.
Menor variabilidad en las actualizaciones de peso en comparación con el SGD, lo que puede llevar a una convergencia más rápida y estable.
El descenso de gradiente mini batch es una elección común para entrenar modelos de redes neuronales en la práctica, ya que combina las ventajas de SGD y Batch Gradient Descent. El tamaño del mini lote es un hiperparámetro crítico que debe ajustarse según el problema y la memoria disponible.
Imágen de perfil

Estocástico-gradiente MSE.


Python

Publicado el 18 de Septiembre del 2023 por Hilario (122 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.
Imágen de perfil

Historial de Costos. Descenso estocástico


Python

Publicado el 17 de Septiembre del 2023 por Hilario (122 códigos)
212 visualizaciones desde el 17 de Septiembre del 2023
Ejercicio sencillo para aprendizaje de un descenso de gradiente tipo estocástico.
----------------------------------------------------------------------------------------------------------
Descenso de Gradiente Estocástico (Stochastic Gradient Descent, SGD):

El descenso de gradiente estocástico es un enfoque de optimización en el que se actualizan los parámetros del modelo utilizando un solo ejemplo de entrenamiento o un pequeño subconjunto de ejemplos (mini-batch) en cada iteración.

En cada iteración, se selecciona aleatoriamente un ejemplo o un mini-batch para calcular el gradiente y actualizar los parámetros.

SGD es mucho más eficiente computacionalmente que el muestreo histórico de costos y es especialmente útil cuando se tienen grandes conjuntos de datos, ya que permite un entrenamiento más rápido y escalable.

En resumen, el muestreo histórico de costos utiliza todo el conjunto de datos en cada iteración, mientras que el descenso de gradiente estocástico utiliza un subconjunto aleatorio de datos en cada iteración. SGD tiende a ser más ruidoso debido a su aleatoriedad, pero puede converger a una solución aceptable en menos iteraciones. Ambos enfoques tienen sus ventajas y desventajas, y la elección entre ellos depende de las características del problema y los recursos computacionales disponibles. También existen variantes intermedias, como el Mini-batch Gradient Descent, que utilizan un tamaño de mini-batch moderado para combinar eficiencia y estabilidad en el entrenamiento de modelos.
Imágen de perfil
Val: 712
Bronce
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Generador de valores hash para contraseñas.


Python

Actualizado el 16 de Septiembre del 2023 por Antonio (75 códigos) (Publicado el 20 de Noviembre del 2022)
1.729 visualizaciones desde el 20 de Noviembre del 2022
El siguiente programa genera valores hash para una contraseña, utilizando distintos algoritmos. También permite la copia de las salidas generadas.
ph
Imágen de perfil

ESTOCÁSTICO


Python

Publicado el 15 de Septiembre del 2023 por Hilario (122 códigos)
208 visualizaciones desde el 15 de Septiembre del 2023
"""
Hilario Iglesias Martínez.
*****************************************
Ejercicio:
CuadernoEstocas-Aula-48-15-SEP-RV-2.py
-----------------------------------------
Ejecución:python3 CuadernoEstocas-Aula-48-15-SEP-RV-2.py
******************************************
Se prueba con los valores con pareamétros mínimos,
con el fin de apreciar su funcionamiento:

learning_rate = 0.01
n_iterations = 4
np.random.seed(0)
X = 2 * np.random.rand(4, 1)
y = 4 + 3 * X + np.random.randn(4, 1)

-------------------------------------------
Creado bajo plataforma Linux.
Ubuntu 20.04.6 LTS
Editado con Sublime Text.
Ejecutado bajo consola linux:
python3 CuadernoEstocas-Aula-48-15-SEP-RV-2.py

"""
Imágen de perfil

Descenso de Gradiente Estocástico (SGD)


Python

Publicado el 14 de Septiembre del 2023 por Hilario (122 códigos)
455 visualizaciones desde el 14 de Septiembre del 2023
Hilario Iglesias Marínez

*******************************************************************
Ejercicio:
Estocástico_Aula_F-890.py
Ejecucion bajo Consola Linux:
python3 Estocástico_Aula_F-890.py

******************************************************************
Diferencias.
El descenso de gradiente es un algoritmo de optimización utilizado comúnmente en el aprendizaje automático y la optimización de funciones. Hay dos variantes principales del descenso de gradiente: el descenso de gradiente tipo Batch (también conocido como descenso de gradiente por lotes) y el descenso de gradiente estocástico. Estas dos variantes difieren en la forma en que utilizan los datos de entrenamiento para actualizar los parámetros del modelo en cada iteración.

Descenso de Gradiente Tipo Batch:

En el descenso de gradiente tipo Batch, se utiliza el conjunto completo de datos de entrenamiento en cada iteración del algoritmo para calcular el gradiente de la función de costo con respecto a los parámetros del modelo.
El gradiente se calcula tomando el promedio de los gradientes de todas las muestras de entrenamiento.
Luego, se actualizan los parámetros del modelo utilizando este gradiente promedio.
El proceso se repite hasta que se alcanza una convergencia satisfactoria o se ejecuta un número predefinido de iteraciones.

Descenso de Gradiente Estocástico (SGD):

En el descenso de gradiente estocástico, en cada iteración se selecciona una sola muestra de entrenamiento al azar y se utiliza para calcular el gradiente de la función de costo.
Los parámetros del modelo se actualizan inmediatamente después de calcular el gradiente para esa única muestra.
Debido a la selección aleatoria de muestras, el proceso de actualización de parámetros es inherentemente más ruidoso y menos suave que en el descenso de gradiente tipo Batch.
SGD es más rápido en cada iteración individual y a menudo converge más rápidamente, pero puede ser más ruidoso y menos estable en términos de convergencia que el descenso de gradiente tipo Batch.
Diferencias clave:

Batch GD utiliza todo el conjunto de datos en cada iteración, lo que puede ser costoso computacionalmente, mientras que SGD utiliza una sola muestra a la vez, lo que suele ser más eficiente en términos de tiempo.
Batch GD tiene una convergencia más suave y estable debido a que utiliza gradientes promedio, mientras que SGD es más ruidoso pero a menudo converge más rápido.
Batch GD puede quedar atrapado en óptimos locales, mientras que SGD puede escapar de ellos debido a su naturaleza estocástica.
En la práctica, también existen variantes intermedias como el Mini-Batch Gradient Descent, que utiliza un pequeño conjunto de datos (mini-lote) en lugar del conjunto completo, equilibrando así los beneficios de ambas técnicas. La elección entre estas variantes depende de la naturaleza del problema y las restricciones computacionales.