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

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最小时的参数。
但是奇怪的是我输入的数据都是相同的,不同的是:直接输入、从文件中读取后输入,排序后输入。这三种会得到不同的参数。
所以想问问大家这个问题怎么解决?

以上是 python中使用Scipy.optimize.minimize()优化求解时,同样的数据得到了不同的结果 的全部内容, 来源链接: utcz.com/p/937852.html

回到顶部