使用datafram进行Scipy优化最小化

2024-04-18 13:41:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有3列的数据帧:Y,X1,X2。我想通过最小化平方和来找到参数估计值b1和b2:

Objective function: minimize the sum of squares (Y - (b1*X1 + b2*X2))^2
Constraints: 0 < b1 < 2, 0 < b2 < 1
Initial guesses: b1=b2=0.5
Technique: Newton-Raphson

我知道我可以用

^{pr2}$

但是我不知道如何将数据帧中的列传入,因为我在搜索中找到的所有示例都没有使用数据帧中的列。在

我将非常感谢你的帮助。在


Tags: ofthe数据参数估计值functionb2b1
1条回答
网友
1楼 · 发布于 2024-04-18 13:41:19

这可能是你的起点。只要目标函数的返回是标量的,就不会有问题。通过元组中的args关键字传递数据帧。请参阅minimize函数的文档以检查要使用的方法。在

编辑:我根据您评论中的描述更改了代码。在

import numpy as np
import scipy.optimize as opt
import pandas as pd

def main(df):
    x0 = [0.5,0.5]
    res = opt.minimize(fun=obj, x0=np.array(x0), args=(df), method="BFGS", bounds=[(0,2),(0,1)])
    return res

def obj(x, df):
    #maybe use a global variable to get the dataframe or via args
    sumSquares = np.mean((df["Y"] - (x[0]*df["X1"] + x[1]*df["X2"]))**2)
    return sumSquares

df = pd.DataFrame({"Y":np.random.rand(100),
                   "X1":np.random.rand(100),
                   "X2":np.random.rand(100)})
print(main(df))

相关问题 更多 >