python - 在python中寻求优化建议
问题描述
我在 python 中的优化逻辑有问题。我有创建优化功能。逻辑是我需要更改 2 个参数,它们是monthly_cci
和rho
。monthly_cci
随机 numpy 数组包含 40 个值,并且rho
是一个必须为正的单个值(也是随机的)。
我需要这两个参数来适应公式来找到fitted_upper
. 我循环了 40 个循环,得到 40 个fitted_upper
组合为单个数组,称为monthly_fitted
. 然后我monthly_fitted
用另一个公式转换得到fitted_matrix
. 我将fitted_matrix
定义误差函数,即error_matrix
.
我需要通过更改and来最小化error_matrix
尽可能低的方差。我试图编写如下代码,但它不起作用。对这个案子有什么建议吗?monthly_cci
rho
谢谢!
from scipy.optimize import minimize
def cci(monthly_cci, rho):
monthly_cci = np.random.randn(40)
rho = np.random.rand(1)
monthly_fitted = []
for i in range(0, len(monthly_cci)):
fitted_upper = (upper_array - (np.sqrt(rho) * monthly_cci[i])) / np.sqrt(1 - rho)
monthly_fitted.append(fitted_upper)
monthly_fitted = np.vstack(monthly_fitted)
#Fitted matrix
m_0 = 1 - norm.cdf(monthly_fitted[0:, 1])
m_1 = norm.cdf(monthly_fitted[0:, 1]) - norm.cdf(monthly_fitted[0:, 2])
m_2 = norm.cdf(monthly_fitted[0:, 2]) - norm.cdf(monthly_fitted[0:, 3])
m_3 = norm.cdf(monthly_fitted[0:, 3]) - norm.cdf(monthly_fitted[0:, 4])
m_4 = norm.cdf(monthly_fitted[0:, 4])
fitted_matrix = np.stack((m_0, m_1, m_2, m_3, m_4), axis = 1)
fitted_matrix = fitted_matrix.reshape(cci['Monthkey'].max(), -1)
error_matrix = n_array * ((monthly_array - fitted_matrix) ** 2) / (fitted_matrix * (1 - fitted_matrix))
return np.var(error_matrix)
res = minimize(cci, x0 = [monthly_cci, rho], method='Nelder-Mead')
我收到错误消息
ValueError: setting an array element with a sequence.
解决方案
代码还有其他问题我无法解决,因为我没有您的设置,但我可以帮助您解决一些错误。首先,在您的最小化函数cci
中,输入参数会立即被覆盖,这对最小化不起作用,因此我们将其删除。其次,minimize
将最小化标量参数。我假设monthly_cci
您已经加载了一些数据,所以我们将其传递args
给minimize
. 我已编辑您的代码以包含以下修复:
from scipy.optimize import minimize
from scipy.stats import norm
import numpy as np
def cci(rho, monthly_cci):
# we are minimising rho, so that is first argument
# we pass through monthly_cci to args of minimise below
# removed random variable creation
upper_array = np.random.randn(40)
monthly_fitted = []
for i in range(0, len(monthly_cci)):
fitted_upper = (upper_array - (np.sqrt(rho) * monthly_cci[i])) / np.sqrt(1 - rho)
monthly_fitted.append(fitted_upper)
monthly_fitted = np.vstack(monthly_fitted)
#Fitted matrix
m_0 = 1 - norm.cdf(monthly_fitted[0:, 1])
m_1 = norm.cdf(monthly_fitted[0:, 1]) - norm.cdf(monthly_fitted[0:, 2])
m_2 = norm.cdf(monthly_fitted[0:, 2]) - norm.cdf(monthly_fitted[0:, 3])
m_3 = norm.cdf(monthly_fitted[0:, 3]) - norm.cdf(monthly_fitted[0:, 4])
m_4 = norm.cdf(monthly_fitted[0:, 4])
fitted_matrix = np.stack((m_0, m_1, m_2, m_3, m_4), axis = 1)
fitted_matrix = fitted_matrix.reshape(cci['Monthkey'].max(), -1)
error_matrix = n_array * ((monthly_array - fitted_matrix) ** 2) / (fitted_matrix * (1 - fitted_matrix))
return np.var(error_matrix)
# use test data
monhtly_cci = np.random.randn(40)
# x0 are the parameters to be minimises
# other arguments are passed as args
res = minimize(cci, x0=[rho], method='Nelder-Mead', args=(monthly_cci,))
推荐阅读
- azure-logic-apps - (Azure 逻辑应用):如何从授权应用获取访问令牌
- javascript - bug:ReferenceError: self 未定义 exif-js
- oracle - 数字中尾随零的数量
- git - 在 Gitlab 中使用 SVN 自动同步 Git 存储库
- wso2 - 如何将用户存储和 Oauth 从 4.5.0 迁移到 5.5.0 WSO2 IS
- android - Android Geofencing API 在后台可以正常工作,但不能用于 GPS
- jenkins - How to fetch a Value from List using groovy?
- sql - 不在sql server中的运算符不起作用
- javascript - 动态地将类添加到来自数组的 *ngFor 内容
- rest - Flask REST - 更新用户模型