Mostrar los tags: n

Mostrando del 51 al 60 de 2.720 coincidencias
Se ha buscado por el tag: n
Imágen de perfil

Clasificacion de Datos Arboles de Decision


Python

Publicado el 17 de Octubre del 2023 por Hilario (129 códigos)
448 visualizaciones desde el 17 de Octubre del 2023
CuadernoAula-B-28-OCT-18.py
-----------------------------------------------------------------------------
La clasificación de datos mediante árboles de decisiones es un método de aprendizaje automático que se utiliza para categorizar o etiquetar datos en diferentes clases o categorías. Es una técnica de modelado predictivo que se basa en la creación de un "árbol" de decisiones, donde cada nodo interno del árbol representa una pregunta o una prueba sobre una característica específica de los datos, y las ramas que salen de ese nodo conducen a diferentes resultados o decisiones basadas en el valor de esa característica. Los nodos hoja del árbol representan las categorías o clases en las que se divide el conjunto de datos.

El proceso de clasificación a través de árboles de decisión implica:

Construcción del árbol: Se inicia con un nodo raíz que representa todo el conjunto de datos. Luego, se selecciona una característica y un umbral que se utilizará para dividir los datos en dos subconjuntos. Este proceso se repite recursivamente en cada subconjunto hasta que se alcanza un criterio de parada, como un tamaño máximo de profundidad del árbol, una cantidad mínima de muestras en los nodos hoja, o una impureza mínima.

Selección de características: En cada paso de división, se elige la característica que mejor separa los datos, lo que se logra al minimizar alguna métrica de impureza, como el índice de Gini o la entropía. La característica y el umbral que minimizan la impureza se utilizan para dividir los datos en dos ramas.

Predicción: Una vez construido el árbol, se utiliza para hacer predicciones sobre datos nuevos. Los datos nuevos se introducen en el árbol, siguiendo las ramas que corresponden a las características de esos datos, hasta llegar a un nodo hoja que representa la clase predicha.

Los árboles de decisión son atractivos porque son interpretables y fáciles de visualizar. Sin embargo, pueden ser propensos al sobreajuste (overfitting), especialmente si se construyen árboles muy profundos. Para abordar este problema, se pueden utilizar técnicas como la poda (pruning) o el uso de bosques aleatorios (random forests) que combinan múltiples árboles para mejorar la precisión y reducir el sobreajuste.

En resumen, la clasificación de datos mediante árboles de decisión es una técnica poderosa y ampliamente utilizada en aprendizaje automático para tareas de clasificación, donde el objetivo es predecir la categoría o clase a la que pertenecen los datos de entrada en función de sus características.
Imágen de perfil

Relieve 3D. Descenso de gradiente.


Python

Publicado el 15 de Octubre del 2023 por Hilario (129 códigos)
561 visualizaciones desde el 15 de Octubre del 2023
DesGraMul_Aula_B_228_15_oct_Github.ipynb

Este ejercicio trata de realizar un descenso de gradiente múltiple en un contexto de gráficos 3D a partir de un punto (x, y) específico. El descenso de gradiente múltiple es una técnica de optimización utilizada para encontrar los mínimos locales o globales de una función multivariable.

Aquí hay una descripción general de cómo puedes abordar este problema:

Función Objetivo: Primero, necesitas tener una función objetivo que desees optimizar en el contexto 3D. Supongamos que tienes una función f(x, y) que deseas minimizar.

Derivadas Parciales: Calcula las derivadas parciales de la función con respecto a x y a y. Estas derivadas parciales te dirán cómo cambia la función cuando modificas x e y.

Punto Inicial: Comienza en un punto (x0, y0) dado. Este será tu punto de inicio.

Tasa de Aprendizaje: Define una tasa de aprendizaje (alfa), que es un valor pequeño que controla cuánto debes moverte en cada iteración del descenso de gradiente. La elección de alfa es crucial y puede requerir ajustes.

Iteraciones: Itera a través de las siguientes fórmulas hasta que converjas a un mínimo:

Nuevo x: x1 = x0 - alfa * (∂f/∂x)
Nuevo y: y1 = y0 - alfa * (∂f/∂y)


Condición de Parada: Puedes definir una condición de parada, como un número máximo de iteraciones o un umbral de convergencia (por ejemplo, cuando las derivadas parciales son muy cercanas a cero).

Resultados: Al final de las iteraciones, obtendrás los valores de (x, y) que minimizan la función en el contexto 3D.

Es importante recordar que el éxito del descenso de gradiente depende de la elección adecuada de la tasa de aprendizaje, la función objetivo y las condiciones iniciales. Además, en problemas 3D más complejos, es posible que desees considerar algoritmos de optimización más avanzados, como el descenso de gradiente estocástico o métodos de optimización de segundo orden.

Este es un enfoque general para el descenso de gradiente múltiple en un contexto 3D. Los detalles pueden variar según la función objetivo y las necesidades específicas de tu aplicación.
descarga
Imágen de perfil

Mostrar zonas en un plano ("usted está aquí")


FoxPro/Visual FoxPro

Publicado el 9 de Octubre del 2023 por Baldo (17 códigos)
788 visualizaciones desde el 9 de Octubre del 2023
Quizá esto os pueda ayudar.

Tuve necesidad por un cliente de mostrar pasillos en su (inmenso) almacén para que al menos el interesado se aproximara a la zona (y planta, porque el edificio tenía dos alturas).

zonaplano01

El comienzo fue "hard-codeo" puro pero, al hacer cambios de distribución constante me planteé el que el esquema fuera configurable.

Así que... aqui está: Un sistema basado en Una tabla (TMPLANO0.DBF) que contiene definición de las zonas (rectángulos) y sus datos de posición (X/Y), anchura y altura. Al final puede ser útil en una empresa como en un evento (imaginad el plano de mesas de una fiesta, una boda...)

zonaplano02

El sistema es simple (lanzad el Form "MUESTRA_PLANO": la tabla comentada contiene la i nformación de las áreas, que se muestran como objetos (definidos en "PLANO_OBJ.VCX"). Estos objetos son objetos del formulario, con lo que al haber dos planos (planta baja y primera planta, por ejemplo) se coloca "por debajo de los objetos" un pageframe que contiene pestañas con los diferentes mapas (en el ejemplo 2, pero podeis aumentarlo hasta vuestra necesidad). Lo único que hay que hacer es ir mostrando/ocultando objetos en función de la página del frame que en ese momento hay en pantalla.

zonaplano03

Hay dos objetos definidos:

- Zona (el rectángulo)
- Punto (algo así como el "Pin" de Google, para una definición pás exacta ("Vd. está aquí")

Si quereis dar este servicio cerrado a cliente, solo debeis aportar la tabla con las def iniciones propias de cliente, el form de muestra (MUESTRA_PLANO) y otro que simplemente es para mostrar un grid con los diponobles ("consulta_planos")

Para vuestra comodidad (o aportarlo a cliente en su caso), teneis un Form configurador de las zonas y guardado en tabla (MTO_PLANOS).

zonaplano04

Por favor, tomad esto como 'lo que es'. Una herramienta creada ante la necesidad.

Puede que el código no sea óptimo, lo sé, pero ser conscientes de mi simple ánimo de dejar aquí la 'semillita'. Por supuesto, el código es mejorable, pero os aseguro que tal y como está, ya funciona.


Un saludo a toda la comunidad
Baldo Martorell
[email protected]
http://www.baldoweb.eu
Imágen de perfil

Descenso gradiente lineal múltiple


Python

Publicado el 9 de Octubre del 2023 por Hilario (129 códigos)
458 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

Mini Batch


Python

Publicado el 26 de Septiembre del 2023 por Hilario (129 códigos)
463 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 (129 códigos)
445 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 (129 códigos)
605 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 (129 códigos)
421 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

Descenso de Gradiente Estocástico (SGD)


Python

Publicado el 14 de Septiembre del 2023 por Hilario (129 códigos)
500 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.