为什么这段代码不起作用?我想做多元回归。 四种形式的方程式:
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
我做错了什么?
答案 0 :(得分:0)
我假设您从m, c = np.linalg.lstsq(A, y)[0]
example获取了lstsq
行。
在这个例子中,他们用一个变量和常数来解决线性回归问题。结果,此问题的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]