0% encontró este documento útil (0 votos)
5 vistas9 páginas

Entrenamiento de Redes Neuronales y Simulaciones

El documento presenta un código en Python que implementa un modelo de red neuronal para el aprendizaje de embeddings latentes, junto con funciones para optimizar hiperparámetros, realizar simulaciones de Monte Carlo, y calcular precios usando el modelo de Black-Scholes/Merton. Además, incluye la implementación de un modelo oculto de Markov (HMM) y funciones matemáticas avanzadas para cálculos de integrales. Finalmente, se ejecuta un ciclo principal que entrena el modelo, realiza simulaciones y calcula integrales, mostrando los resultados obtenidos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas9 páginas

Entrenamiento de Redes Neuronales y Simulaciones

El documento presenta un código en Python que implementa un modelo de red neuronal para el aprendizaje de embeddings latentes, junto con funciones para optimizar hiperparámetros, realizar simulaciones de Monte Carlo, y calcular precios usando el modelo de Black-Scholes/Merton. Además, incluye la implementación de un modelo oculto de Markov (HMM) y funciones matemáticas avanzadas para cálculos de integrales. Finalmente, se ejecuta un ciclo principal que entrena el modelo, realiza simulaciones y calcula integrales, mostrando los resultados obtenidos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

{

"cells": [

"cell_type": "code",

"execution_count": None,

"id": "f309c3c3",

"metadata": {},

"outputs": [],

"source": [

"import nest_asyncio\n",

"import asyncio\n",

"from binance import BinanceSocketManager, AsyncClient\n",

"import numpy as np\n",

"from [Link] import entropy\n",

"from [Link] import simps, tplquad, dblquad\n",

"from [Link] import ARIMA\n",

"from sympy import symbols, Function, Eq, dsolve\n",

"from [Link] import CubicSpline\n",

"import [Link] as plt\n",

"import torch\n",

"import [Link] as nn\n",

"import [Link] as optim\n",

"from hmmlearn import hmm\n",

"import pandas as pd\n",

"import [Link] as jnp\n",

"import jax\n",

"\n",

"nest_asyncio.apply() # Permite usar event loops en Google Colab\n",

"\n",

"# Configuración de claves API\n",

"API_KEY = 'XX(PONER AQUÍ TU API)XXXXXXXX'\n",


"API_SECRET = 'XXX(PONER AQUÍ TU API SECRETA)XXXXXXXXXXXX'\n",

"\n",

"# Clase de red neuronal avanzada con embeddings latentes\n",

"class LatentEmbedding([Link]):\n",

" def __init__(self, input_size, latent_dim):\n",

" super(LatentEmbedding, self).__init__()\n",

" [Link] = [Link](\n",

" [Link](input_size, 128),\n",

" [Link](),\n",

" [Link](128, latent_dim)\n",

" )\n",

" [Link] = [Link](\n",

" [Link](latent_dim, 128),\n",

" [Link](),\n",

" [Link](128, input_size)\n",

" )\n",

" \n",

" def forward(self, x):\n",

" latent = [Link](x)\n",

" reconstruction = [Link](latent)\n",

" return latent, reconstruction\n",

"\n",

"# Pérdida contrastiva para aprendizaje de embeddings\n",

"def contrastive_loss(anchor, positive, negative, margin=1.0):\n",

" positive_dist = [Link]((anchor - positive) ** 2, axis=1)\n",

" negative_dist = [Link]((anchor - negative) ** 2, axis=1)\n",

" loss = [Link]([Link](positive_dist - negative_dist + margin, min=0))\n",

" return loss\n",

"\n",

"# Crear datos de entrenamiento usando splines\n",

"def generar_datos_spline():\n",
" x_puntos = [Link]([-4, 3, 10])\n",

" y_puntos = [Link]([0.79, 481.38, 598744.17])\n",

" \n",

" spline = CubicSpline(x_puntos, y_puntos)\n",

" x_train = [Link](-4, 10, 50).reshape(-1, 1)\n",

" y_train = spline(x_train).reshape(-1, 1)\n",

" return x_train, y_train\n",

"\n",

"# Entrenamiento de embeddings latentes\n",

"def entrenar_embeddings(model, x_train, epochs=100, learning_rate=0.001):\n",

" optimizer = [Link]([Link](), lr=learning_rate)\n",

" criterion = [Link]()\n",

" \n",

" x_train_tensor = [Link](x_train, dtype=torch.float32)\n",

" for epoch in range(epochs):\n",

" [Link]()\n",

" optimizer.zero_grad()\n",

" latent, reconstruction = model(x_train_tensor)\n",

" loss = criterion(reconstruction, x_train_tensor)\n",

" [Link]()\n",

" [Link]()\n",

" if (epoch + 1) % 10 == 0:\n",

" print(f'Epoch [{epoch + 1}/{epochs}], Loss: {[Link]():.4f}')\n",

"\n",

"# Optimización de hiperparámetros\n",

"def optimizar_hiperparametros(x_train):\n",

" from itertools import product\n",

" latent_dims = [2, 3, 5]\n",

" learning_rates = [0.0001, 0.001, 0.01]\n",

" epochs_list = [50, 100, 200]\n",

"\n",
" mejor_loss = float('inf')\n",

" mejor_config = None\n",

"\n",

" for latent_dim, lr, epochs in product(latent_dims, learning_rates, epochs_list):\n",

" print(f'Probando: latent_dim={latent_dim}, learning_rate={lr}, epochs={epochs}')\n",

" model = LatentEmbedding(input_size=1, latent_dim=latent_dim)\n",

" optimizer = [Link]([Link](), lr=lr)\n",

" criterion = [Link]()\n",

" \n",

" x_train_tensor = [Link](x_train, dtype=torch.float32)\n",

" for epoch in range(epochs):\n",

" [Link]()\n",

" optimizer.zero_grad()\n",

" _, reconstruction = model(x_train_tensor)\n",

" loss = criterion(reconstruction, x_train_tensor)\n",

" [Link]()\n",

" [Link]()\n",

" \n",

" final_loss = criterion(model(x_train_tensor)[1], x_train_tensor).item()\n",

" print(f'Final Loss for config: {final_loss:.4f}')\n",

"\n",

" if final_loss < mejor_loss:\n",

" mejor_loss = final_loss\n",

" mejor_config = {\"latent_dim\": latent_dim, \"learning_rate\": lr, \"epochs\":


epochs}\n",

"\n",

" print(f'Mejor configuración: {mejor_config}, Loss: {mejor_loss:.4f}')\n",

" return mejor_config\n",

"\n",

"# Modelo Oculto de Markov (HMM)\n",

"def calcular_hmm(data, n_states):\n",


" model = [Link](n_components=n_states, covariance_type=\"diag\",
n_iter=1000)\n",

" [Link](data)\n",

" hidden_states = [Link](data)\n",

" return hidden_states\n",

"\n",

"# Simulación Monte Carlo\n",

"def simulacion_monte_carlo(initial_price, drift, volatility, time_horizon, n_simulations):\n",

" dt = 1 / 252\n",

" prices = [Link]((time_horizon, n_simulations))\n",

" prices[0] = initial_price\n",

" for t in range(1, time_horizon):\n",

" rand = [Link](0, 1, n_simulations)\n",

" prices[t] = prices[t - 1] * [Link]((drift - 0.5 * volatility ** 2) * dt + volatility * [Link](dt)


* rand)\n",

" return prices\n",

"\n",

"# Ecuación de Black-Scholes/Merton\n",

"def black_scholes(S, K, T, r, sigma, tipo='call'):\n",

" from [Link] import norm\n",

" d1 = ([Link](S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * [Link](T))\n",

" d2 = d1 - sigma * [Link](T)\n",

" if tipo == 'call':\n",

" return S * [Link](d1) - K * [Link](-r * T) * [Link](d2)\n",

" elif tipo == 'put':\n",

" return K * [Link](-r * T) * [Link](-d2) - S * [Link](-d1)\n",

"\n",

"# Funciones matemáticas avanzadas\n",

"def calcular_divergencia(F, x, y, z):\n",

" return 2 * x + 2 * y + 2 * z\n",

"\n",

"def integral_volumen():\n",
" def integrand(z, y, x):\n",

" return calcular_divergencia(None, x, y, z)\n",

" \n",

" R = 1\n",

" result, _ = tplquad(\n",

" integrand, \n",

" -R, R, \n",

" lambda x: -[Link](R**2 - x**2), lambda x: [Link](R**2 - x**2), \n",

" lambda x, y: -[Link](R**2 - x**2 - y**2), lambda x, y: [Link](R**2 - x**2 - y**2)\n",

" )\n",

" return result\n",

"\n",

"def integral_superficie():\n",

" def integrand(phi, theta):\n",

" R = 1\n",

" x = R * [Link](theta) * [Link](phi)\n",

" y = R * [Link](theta) * [Link](phi)\n",

" z = R * [Link](theta)\n",

" return [Link]([x**2, y**2, z**2], [x, y, z]) * R**2 * [Link](theta)\n",

" \n",

" result, _ = dblquad(\n",

" integrand,\n",

" 0, 2 * [Link], \n",

" lambda _: 0, lambda _: [Link]\n",

" )\n",

" return result\n",

"\n",

"async def calcular_entropia(precios):\n",

" histograma, _ = [Link](precios, bins=10, density=True)\n",

" return entropy(histograma)\n",

"\n",
"async def modelo_arima(precios):\n",

" model = ARIMA(precios, order=(5, 1, 0))\n",

" fitted_model = [Link]()\n",

" forecast = fitted_model.forecast(steps=1)\n",

" return forecast[0]\n",

"\n",

"# Ciclo principal\n",

"async def main():\n",

" x_train, _ = generar_datos_spline()\n",

" mejor_config = optimizar_hiperparametros(x_train)\n",

" print(f'Mejor configuración encontrada: {mejor_config}')\n",

" model = LatentEmbedding(input_size=1, latent_dim=mejor_config[\"latent_dim\"])\n",

" entrenar_embeddings(model, x_train, epochs=mejor_config[\"epochs\"],


learning_rate=mejor_config[\"learning_rate\"])\n",

" volumen_integral = integral_volumen()\n",

" superficie_integral = integral_superficie()\n",

" print(f'Integral del volumen: {volumen_integral}')\n",

" print(f'Integral de la superficie: {superficie_integral}')\n",

" print(f'Diferencia: {abs(volumen_integral - superficie_integral)}')\n",

"\n",

" # Simulación Monte Carlo\n",

" simulated_prices = simulacion_monte_carlo(initial_price=50000, drift=0.05,


volatility=0.2, time_horizon=252, n_simulations=1000)\n",

" [Link](simulated_prices.mean(axis=1), label='Monte Carlo Simulation')\n",

" [Link]('Simulación de precios - Monte Carlo')\n",

" [Link]()\n",

" [Link]()\n",

"\n",

" # HMM\n",

" hidden_states = calcular_hmm(x_train, n_states=3)\n",

" print('Estados ocultos (HMM):', hidden_states)\n",

"\n",
" # Black-Scholes/Merton\n",

" call_price = black_scholes(S=50000, K=55000, T=1, r=0.05, sigma=0.2, tipo='call')\n",

" print(f'Precio Call (Black-Scholes/Merton): {call_price:.2f}')\n",

"\n",

"# Ejecutar el bot\n",

"if __name__ == '__main__':\n",

" [Link](main())"

],

"metadata": {

"kernelspec": {

"display_name": "Python 3",

"language": "python",

"name": "python3"

},

"language_info": {

"codemirror_mode": {

"name": "ipython",

"version": 3

},

"file_extension": ".py",

"mimetype": "text/x-python",

"name": "python",

"nbconvert_exporter": "python",

"pygments_lexer": "ipython3",

"version": "3.9.12"

},

"nbformat": 4,

"nbformat_minor": 5
}

También podría gustarte