我正在尝试使用python basinhopping优化(最大化)复杂函数,该函数从数据帧中的变量派生其值。我是最不熟悉优化技术的人,所以如果我对它太多的话请原谅。我已经搜索过,最接近的东西看起来像this。让我创建一个玩具数据框来描述问题。假设以下内容:
df = pd.DataFrame({"A":range(1,14), "B":range(5,18), "ID":
[1,1,2,2,2,2,3,3,3,4,5,6,7],"C":[0,0,10,0,0,16,0,0,22,1,1,1,1], "last":
[0,1,0,0,0,1,0,0,1,1,1,1,1],
"Value": [19.25,8,91.6,71.05,45.85,16,104.95,65.8,22,24,13,28,15], "Z":
[0,1,0,0,0,0,0,0,1,1,0,1,0]})
最困难的部分(在我看来)是目标函数的设计。就是这样。
我遇到的问题是,我看到的大多数优化示例even in the documentation返回单个值。就我而言,我有一个数据框,所以我不确定该如何工作。
这是我之前所做的:将数据集分为两个:具有重复ID的数据集和具有非重复ID的数据集。对于那些重复的对象,请使用if语句来计算目标函数的值。
对于具有重复ID的对象,创建一个变量,该变量标识每个ID的最后观察值,然后从“自下而上”计算值。然后,我追加两个数据集。但是,这导致了我的主要努力:基于数据集,目标函数不是“整个”而是“波动”。
我希望我能对此有所帮助。谢谢