【问题标题】:Solving linear regression minimizing quadratic cost求解线性回归最小化二次成本
【发布时间】:2021-11-26 00:15:30
【问题描述】:

我想通过以下方式解决线性回归

当我尝试最小化成本总和时,效果很好,

import cvxpy as cp
import numpy as np

n = 5
np.random.seed(1)
x = np.linspace(0, 20, n)
y = np.random.rand(x.shape[0])
theta = cp.Variable(2)


# This way it works
objective = cp.Minimize(cp.sum_squares(theta[0]*x + theta[1] - y))
prob = cp.Problem(objective)
result = prob.solve()
print(theta.value)

我想尝试按如下方式最小化二次成本:

#This way it does not work,
X = np.row_stack((np.ones_like(y), x)).T 
objective_function = (y - X*theta).T*(y-X*theta)
obj = cp.Minimize(objective_function)
prob = cp.Problem(obj)
result = prob.solve()
print(theta.value)

但是,我收到以下错误:

  raise DCPError("Problem does not follow DCP rules. Specifically:\n" + append)
  cvxpy.error.DCPError: The problem does not follow DCP rules. Specifically:

知道为什么会这样吗?

【问题讨论】:

  • 我猜X*theta 中的乘法是按元素工作的。如果你改用@ 可能会起作用?
  • 您有兴趣找到最小值还是有兴趣以这种特定方式找到最小值?因为这个问题有一个封闭式的公式……
  • @chthonicdaemon 我仍然得到同样的错误
  • @RiccardoBucco 是的,我想找到最小值,但不是 cp.sum_squares,而是我尝试的方式。
  • @RiccardoBucco 是的,我知道关闭表单的解决方案,我想知道为什么会出现这个错误?

标签: python optimization cvxpy convex-optimization


【解决方案1】:

我认为CVXPY不明白y - X*theta在中是一样的

  objective_function = (y - X*theta).T*(y-X*theta)

是

  objective = cp.Minimize(cp.norm(y - X*theta)**2)

或

  objective = cp.Minimize(cp.norm(y - X*theta))

可以接受吗? (两者都给出相同的解决方案)

【讨论】:

  • 如果是这样,那完全没问题,谢谢你
猜你喜欢
  • 2016-02-16
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 2023-04-02
  • 2011-02-17
相关资源
最近更新 更多