用pythonnumpy实现线性回归
我试图建立一个简单的线性回归函数,但仍然遇到一个问题 numpy.linalg.linalg.linalg误差:奇异矩阵误差 现有功能(带有调试打印): 控制台的测试数据输出为:用pythonnumpy实现线性回归,python,numpy,linear-regression,Python,Numpy,Linear Regression,我试图建立一个简单的线性回归函数,但仍然遇到一个问题 numpy.linalg.linalg.linalg误差:奇异矩阵误差 现有功能(带有调试打印): 控制台的测试数据输出为: In makeLLS: Shape trainInput1: (773, 10) Shape trainTargetData: (773, 1) Shape term1: (10, 10) Shape term2: (10, 1) 然后在linalg.solve行上显示错误。这是一个教
In makeLLS:
Shape trainInput1: (773, 10)
Shape trainTargetData: (773, 1)
Shape term1: (10, 10)
Shape term2: (10, 1)
然后在linalg.solve行上显示错误。这是一个教科书上的线性回归函数,我似乎不明白它为什么会失败
什么是奇异矩阵误差?奇异矩阵是行列式为零的矩阵。这表明矩阵中的行不是线性独立的。例如,若其中一行和其他行不是线性独立的,那个么它可以由其他行的线性组合来构造。我将使用numpy的linalg.solve示例来演示。以下是文档的示例:
>>> import numpy as np
>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> x = np.linalg.solve(a, b)
>>> x
array([ 2., 3.])
现在,我将更改a
,使其成为单数形式
>>> a = np.array([[2,4], [1,2]])
>>> x = np.linalg.solve(a, b)
...
LinAlgError: Singular matrix
这是一个非常明显的例子,因为第一行刚好是第二行的两倍,但希望您能理解这一点。如另一个答案
linalg中所述。solve
需要一个满秩矩阵。这是因为它试图解决一个矩阵方程,而不是线性回归,这应该适用于所有职级
线性回归有几种方法。我建议的最简单的方法是标准最小二乘法。只需使用
numpy.linalg.lstsq
即可。包含示例的文档是。您也可以使用np.polyfit(x,y,1)
。
>>> a = np.array([[2,4], [1,2]])
>>> x = np.linalg.solve(a, b)
...
LinAlgError: Singular matrix