ОптимизируйтеПредупреждение: ковариацию параметров невозможно оценить в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 ОптимизируйтеПредупреждение: ковариацию параметров невозможно оценить в Python

Сообщение Anonymous »

Я пытаюсь получить оптимизированные параметры модели Нельсона-Зигеля. Ниже приведен простой пример, но я знаю, что оптимизированные параметры не полностью оптимизированы и содержат некоторые ошибки/предупреждения.
Я считаю, что предупреждающее сообщение связано с оптимизированными параметрами. Подскажите пожалуйста, как это исправить.
import numpy as np
from scipy.optimize import curve_fit

# Define the Nelson-Siegel model function
def nelson_siegel(tau, beta1, beta2, beta3, lambd):
term1 = beta1
term2 = beta2 * ((1 - np.exp(-lambd * tau)) / (lambd * tau))
term3 = beta3 * (((1 - np.exp(-lambd * tau)) / (lambd * tau)) - np.exp(-lambd * tau))
return term1 + term2 + term3

# Given example data (maturity and yields)
tau = np.array([0.25, 2, 5, 10])
yields = np.array([2.54, 2.36, 2.49, 2.96])

# Calculate dynamic initial estimates
beta1_initial = yields[-1] # Yield for the longest maturity
beta2_initial = yields[0] - yields[-1] # Difference between short-term and long-term yields
beta3_initial = (np.max(yields) - np.min(yields)) / 2 # Curvature is about half of the yield range
lambd_initial = 0.2 # Default value

initial_guess = [beta1_initial, beta2_initial, beta3_initial, lambd_initial]

# Set parameter bounds
param_bounds = ([0, -10, -10, 0.01], # Lower bounds (beta1, beta2, beta3, lambda)
[10, 10, 10, 10]) # Upper bounds (beta1, beta2, beta3, lambda)

# Optimization (using curve_fit)
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)

# Print optimized parameters
beta1, beta2, beta3, lambd = popt
print(f"Optimized Parameters: beta1 = {beta1:.4f}, beta2 = {beta2:.4f}, beta3 = {beta3:.4f}, lambda = {lambd:.4f}")

# Calculate fitted yields using the model
fitted_yields = nelson_siegel(tau, beta1, beta2, beta3, lambd)

# Print fitted values
print(f"Fitted Yields: {fitted_yields}")

# Print the covariance matrix of the optimized parameters
print(f"Parameter Covariance Matrix: {pcov}")

Результаты
Optimized Parameters: beta1 = 10.0000, beta2 = -7.6314, beta3 = 2.8412, lambda = 0.0100
Fitted Yields: [2.38171526 2.47248209 2.62498897 2.87073598]
Parameter Covariance Matrix: [[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]]

C:\Users\CHOI\AppData\Local\Temp\ipykernel_32884\269502971.py:29: OptimizeWarning: Covariance of the parameters could not be estimated
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)



Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»