python optimize_python中使用Scipy.optimize.minimize()优化求解时,同样的数据得到了不同的结果...

import numpy as np

import pandas as pd

from scipy.optimize import minimize

def get_y_hat(x_, y_, args):

return (x_ * 100) / (1 + args[0]) + (x_ * 100 + y_) / (1 + args[1]) ** 2

def opt_target(args, df):

# 优化目标--> error_sum最小

df["Y_hat"] = df[["X1", "Y"]].apply(lambda x: get_y_hat(x[0], x[1], args), axis=1)

error_sum = np.sum((df["Y_hat"] - df["Y"])**2)

return error_sum

def main(target_df):

x0 = [1.0, 1.0]

bound = [(0, None), (0, 2)]

con = {"type": "ineq", "fun": lambda x: 3 - x[0] - x[1]}

return minimize(fun=opt_target, x0=np.array(x0), method="SLSQP", args=(target_df, ), bounds=bound, constraints=con)

np.random.seed(1)

y = pd.DataFrame(np.random.randint(90, 110, size=(5, 1)), columns=["Y"])

x1 = pd.DataFrame(np.random.random(size=(5, 1)), columns=["X1"])

y["Y"] = y["Y"] + x1["X1"]

sample = pd.concat([y, x1], axis=1)

sample.to_csv("sample.csv", index=False)

print("-------------------------------------------------------")

# 原始数据直接输入函数

df1 = sample.copy(deep=True)

res = main(df1)

print("original_sample result:", res.x)

print("-------------------------------------------------------")

# 从上述的df.csv读取数据输入函数

df2 = pd.read_csv("sample.csv")

res2 = main(df2)

print("read from file result:", res2.x)

print("-------------------------------------------------------")

# 按照"Y"列排序后输入函数

df3 = sample.sort_values(by="Y")

res3 = main(df3)

print("sorted by column 'Y' result:", res3.x)

我的目标想得到errorsum最小时的参数。

但是奇怪的是我输入的数据都是相同的,不同的是:直接输入、从文件中读取后输入,排序后输入。这三种会得到不同的参数。

所以想问问大家这个问题怎么解决?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值