我正在尝试将scipy的basinhopping与我创建的函数结合使用。尽管我的问题与此thread有关,但区别在于我的函数未返回单个值,而是返回一个python系列
from scipy.optimize import basinhopping
############ Simple DataFrame ###########
data = pd.DataFrame({'def': [0, 0, 1, 1, 1], 'amt': [40, 20, 30, 50, 60],
'prob': [0.20, 0.10, 0.15, 0.30, 0.28],
'cost': [0.05, 0.01, 0.02, 0.09, 0.08],
'rate': [0.98, 0.75, 0.95, 0.76, 0.89]})
############ Function ############
def pred_money(row):
if (row["def"] == 0):
money = (row["amt"] * row["cost"]) * (1 - row["prob"])
return money
else:
money = row["amt"] * row["rate"] * row["prob"]
return money
我尝试使用优化功能,如下所示:
x0=[1.]
minimizer_kwargs = {"method": "BFGS", "args":(something_goes_here)}
ret = basinhopping(func=pred_money, x0=x0,
minimizer_kwargs=minimizer_kwargs,niter=200)
根据函数basinhopping documentation的其他参数可以作为 minimizer_kwargs 词典的一部分传递。上面的代码中将其留空,因为我根本不知道里面有什么。我怀疑它不会返回单个值。我可能是错的。
文档中的大多数示例都是相当简单的函数,与数据框没有任何关系。任何帮助表示赞赏。谢谢。