gpt4 book ai didi

python - 使用代数约束和边界最小化最小二乘法

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:17 24 4
gpt4 key购买 nike

我试图根据一些矢量求和来最小化最小二乘和。简而言之,我正在创建一个方程式,它采用理想向量,用确定的系数对它们进行加权,然后对加权向量求和。一旦将此总和与为某些观察发现的实际矢量测量值进行比较,就会得出最小二乘和。

举个例子:

# Observation A has the following measurements:
A = [0, 4.1, 5.6, 8.9, 4.3]

# How similar is A to ideal groups identified by the following:
group1 = [1, 3, 5, 10, 3]
group2 = [6, 3, 2, 1, 10]
group3 = [3, 3, 4, 2, 1]

# Let y be the predicted measurement for A with coefficients s1, s2, and s3:
y = s1 * group1 + s2 * group2 + s3 * group3

# y will be some vector of length 5, similar to A
# Now find the sum of least squares between y and A
sum((y_i - A_i)** 2 for y_i in y for A_i in A)

Necessary bounds and constraints

0 <= s1, s2, s3 <= 1

s1 + s2 + s3 = 1

y = s1 * group1 + s2 * group2 + s3 * group3

y 和 A 的最小二乘和是我想要最小化以获得系数 s1、s2、s3 的值,但我很难确定 scipy.optimize 中的正确选择可能是什么。那里用于最小化最小二乘和的函数似乎无法处理代数变量约束。我正在处理的数据是使用这些矢量化测量值进行的数千次观察。任何想法或想法将不胜感激!

最佳答案

对于您的情况,您可以使用 minimize()从 scipy.optimize 像这样:

minimize(fun=obj_fun, args=argtpl x0=xinit, bounds=bnds, constraints=cons)

obj_fun(x, *args) 是您的目标函数,argtpl 是您目标函数的(可选)参数元组,xinit 初始点,bnds 是变量边界的元组列表,cons 是约束的字典列表。

import numpy as np
from scipy.optimize import minimize

# Observation A has the following measurements:
A = np.array([0, 4.1, 5.6, 8.9, 4.3])
# How similar is A to ideal groups identified by the following:
group1 = np.array([1, 3, 5, 10, 3])
group2 = np.array([6, 3, 2, 1, 10])
group3 = np.array([3, 3, 4, 2, 1])

# Define the objective function
# x is the array containing your wanted coefficients
def obj_fun(x, A, g1, g2, g3):
y = x[0] * g1 + x[1] * g2 + x[2] * g3
return np.sum((y-A)**2)

# Bounds for the coefficients
bnds = [(0, 1), (0, 1), (0, 1)]
# Constraint: x[0] + x[1] + x[2] - 1 = 0
cons = [{"type": "eq", "fun": lambda x: x[0] + x[1] + x[2] - 1}]

# Initial guess
xinit = np.array([1, 1, 1])
res = minimize(fun=obj_fun, args=(A, group1, group2, group3), x0=xinit, bounds=bnds, constraints=cons)
print(res.x)

您的示例的解决方案:

array([9.25609756e-01, 7.43902439e-02, 6.24242179e-12])

关于python - 使用代数约束和边界最小化最小二乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com