python - 在使用数据框的目标函数上使用 Scipy 的蛮力优化
问题描述
我有一个函数,一个目标函数,它采用时间序列数据的数据框,用于计算时间数据上的估计投资回报。该功能如下图所示:
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])
数据框“已处理”是一个包含 3757 行的数据集。运行时我得到的错误是:
TypeError: bwp() takes 2 positional arguments but 3757 were given
我不确定为什么这不起作用,因为我使用“nelder-mead”方法使用 Scipy 运行了另一个函数,并以与上面相同的方式将数据帧提供给“args”并且它能够传递数据帧通过函数。
这个事情谁有经验?
解决方案
签名不应该bwp
是:
# HERE ----v
def bwp(x, *processed):
...
而不是:
def bwp(x, processed):
...
推荐阅读
- arrays - 如果重复 0 或 n 次,则找到可以产生两个给定字符串的最小字符串 x
- pandas - 给定第三列中的值,将两列相互绘制
- node.js - 在社交媒体上共享 Reactjs 链接时,react-helmet 中的元标记不显示
- asp.net-core - 考虑到用户可以使用哪些资源的基于策略的身份验证?
- c++ - 如何在同一个线程中运行 iostream 系统命令?
- javascript - JavaScript getElementAt() 命令仅返回 [object Object]
- c - 如何在 cmock 中为“读取”功能配置期望
- markdown - Gatsby Markdown URL / 链接损坏
- html - 两个等宽的列(宽度由最长的一个设置),第三个填充剩余空间
- vue.js - VueJs/Nuxt 过滤数组,错误_vm.filtered.. is not a function