我试着做一个简单的线性回归函数,但是仍然会遇到
numpy.linalg.linalg.LinAlgError: Singular matrix error
现有函数(带有调试打印):
def makeLLS(inputData, targetData):
print "In makeLLS:"
print " Shape inputData:",inputData.shape
print " Shape targetData:",targetData.shape
term1 = np.dot(inputData.T, inputData)
term2 = np.dot(inputData.T, targetData)
print " Shape term1:",term1.shape
print " Shape term2:",term2.shape
#print term1
#print term2
result = np.linalg.solve(term1, term2)
return result
我的测试数据输出到控制台是:
In makeLLS:
Shape trainInput1: (773, 10)
Shape trainTargetData: (773, 1)
Shape term1: (10, 10)
Shape term2: (10, 1)
然后在linalg.solve行出错。这是一个教科书式的线性回归函数,我似乎不明白为什么它会失败。
什么是奇异矩阵误差?
奇异矩阵是行列式为零的矩阵。这表示矩阵中的行不是线性独立的。例如,如果其中一行与其他行不是线性独立的,则可以通过其他行的线性组合来构造它。我将使用numpy的linalg.solve示例来演示。下面是医生的例子:
现在,我将更改
a
使其成为单数。这是一个非常明显的例子,因为第一行是第二行的两倍,但希望你能抓住要点。
正如在另一个答案中所解释的,
linalg.solve
需要一个全秩矩阵。这是因为它试图解决一个矩阵方程,而不是做线性回归,这应该适用于所有级别。线性回归有几种方法。我建议的最简单的方法是标准最小二乘法。只需使用
numpy.linalg.lstsq
即可。包含示例的文档是here。相关问题 更多 >
编程相关推荐