【问题标题】:Python least squares regression qsPython最小二乘回归qs
【发布时间】:2014-02-16 16:34:36
【问题描述】:

为什么这段代码不起作用?我正在尝试进行多元回归。 四个方程的形式:

Ax + By + c = d

A + 2B + C = 0.2 etc.

A = np.array([[ 0.,  1, 1.],
   [ 1.,  2, 1.],
   [ 2.,  3, 1.],
   [ 3.,  4, 1.]])

y = np.array([-1, 0.2, 0.9, 2.1])
m, c = np.linalg.lstsq(A, y)[0]
print m, c

我做错了什么?

【问题讨论】:

  • 有什么不好的?错误?输出不好?给我们看看!
  • 自己尝试一下,然后弄清楚。我给了代码。 nnatarr - 感谢您的回答!

标签: python regression


【解决方案1】:

我假设您从lstsq example 中提取了m, c = np.linalg.lstsq(A, y)[0] 行。
在示例中,他们使用一个变量和常数解决线性回归问题。结果,此问题的np.linalg.lstsq(A, y) 返回四元素元组(array([ 1. , -0.95]), array([ 0.05]), 2, array([ 4.10003045, 1.09075677]))(第一个元素 - 解,第二个 - 残差,第三个 - 系数矩阵秩,最后一个元素 - 系数矩阵的奇异值)。 因此,np.linalg.lstsq(A, y)[0](在示例中)返回包含两个元素的数组,这些元素可以按照他们的操作方式解包:m, c = np.linalg.lstsq(A, y)[0] (m = 1., c = -0.95)。

您正在使用 两个 变量和常数解决回归问题。因此,np.linalg.lstsq(A, y)[0] 将返回包含三个元素的数组,如果您想按照示例中的方式对其进行解包,您可以这样做:

x1, x2, c = np.linalg.lstsq(A, y)[0]

但更方便的方法是(在我看来):

x, residuals, rank, s = np.linalg.lstsq(A, y) #lstsq func always return four-element tuple

print 'solution is %s.' % str(x)
print 'matrix A rank is %d.' % rank
print 'residuals are %s.' % str(residuals)
print 'singular values of A are %s.' % str(s)

print 'first variable is %f.' % x[0]
print 'second variable is %f.' % x[1]
print 'constant is %f.' % x[2]

【讨论】:

    猜你喜欢
    • 2015-05-15
    • 2015-10-31
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2021-04-23
    • 2012-04-28
    相关资源
    最近更新 更多