在使用数据帧的 objective 函数上使用 Scipy 的暴力优化
Using brute optimisaton with Scipy on an objective function that uses a dataframe
我有一个 objective 函数,它采用时间序列数据的数据帧,用于计算时间数据上的估计 return 投资。此函数如下所示:
def bwp(x, processed):
pred,real = x
money = 1000
for i in range(0, len(processed)):
if processed[i, 3] > pred and processed[i-1,4] > real:
money = money + (money * processed[i, 4])
return money * -1
我想最小化这个函数,它既便宜又不连续,所以我想用暴力的方法来优化它。
我正在尝试使用以下代码对此进行优化:
def opt_2(processed):
bounds = (slice(-1, 1), slice(-1, 1))
resbrute = optimize.brute(bwp, ranges=bounds, args=processed, full_output=True, finish=optimize.fmin)
print(resbrute[0])
print(resbrute[1])
数据框 'proceessed' 是一个包含 3757 行的数据集。我在 运行ning 时得到的错误是:
TypeError: bwp() takes 2 positional arguments but 3757 were given
我不确定为什么这不起作用,因为我有 运行 另一个函数 Scipy 使用 'nelder-mead' 方法并将数据帧提供给 'args'和我上面做的一样,它能够将数据帧传递给函数。
有人有这方面的经验吗?
bwp
的签名不应该是:
# HERE ----v
def bwp(x, *processed):
...
而不是:
def bwp(x, processed):
...
我有一个 objective 函数,它采用时间序列数据的数据帧,用于计算时间数据上的估计 return 投资。此函数如下所示:
def bwp(x, processed):
pred,real = x
money = 1000
for i in range(0, len(processed)):
if processed[i, 3] > pred and processed[i-1,4] > real:
money = money + (money * processed[i, 4])
return money * -1
我想最小化这个函数,它既便宜又不连续,所以我想用暴力的方法来优化它。
我正在尝试使用以下代码对此进行优化:
def opt_2(processed):
bounds = (slice(-1, 1), slice(-1, 1))
resbrute = optimize.brute(bwp, ranges=bounds, args=processed, full_output=True, finish=optimize.fmin)
print(resbrute[0])
print(resbrute[1])
数据框 'proceessed' 是一个包含 3757 行的数据集。我在 运行ning 时得到的错误是:
TypeError: bwp() takes 2 positional arguments but 3757 were given
我不确定为什么这不起作用,因为我有 运行 另一个函数 Scipy 使用 'nelder-mead' 方法并将数据帧提供给 'args'和我上面做的一样,它能够将数据帧传递给函数。
有人有这方面的经验吗?
bwp
的签名不应该是:
# HERE ----v
def bwp(x, *processed):
...
而不是:
def bwp(x, processed):
...