我有一个线性方程Ax = b。我正在尝试在Python中使用纸浆来最小化(Ax-b)^ 2。 A的尺寸为(1000,500),b的尺寸为(1000,)。
到目前为止,我已经尝试过:
import pulp
mse = pulp.LpProblem("Example_Problem", LpMinimize)
vars = pulp.LpVariable.dicts('x', range(len(A[0])), lowBound=0,upBound =1,
cat='Integer')
for row, rhs in zip(A, b):
mse += sum([row[i]*vars[i] for i in range(len(row))]) - rhs
我如何使用平方表示功能。如果我尝试:
mse += (sum([row[i]*vars[i] for i in range(len(row))]) - rhs)**2
我收到此错误:
***或pow()不支持的操作数类型:'LpAffineExpression'和'int'*
答案 0 :(得分:0)
纸浆仅适用于线性模型。您创建了一个非线性模型。
理论上,您可以通过形成正规方程式来解决此问题(请参阅统计书):您可以获得线性方程组。可以使用LP解算器解决此问题,但不幸的是,此方法不是很可靠。
使用LP模型的更好方法是用偏差的绝对值代替偏差的平方。这将给您一个LP(请参阅link)。有时会使用这种方法来获得更可靠的估计,而不受异常值的影响较小。
由于增加了x必须采用整数值的约束,因此最终得到了MIP模型。