【问题标题】:Linear Regression with Python numpy使用 Python numpy 进行线性回归
【发布时间】:2010-10-13 03:25:35
【问题描述】:

我正在尝试做一个简单的线性回归函数但继续遇到一个

numpy.linalg.linalg.LinAlgError: 奇异矩阵错误

现有功能(带调试打印):

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 行上出错。这是一个教科书线性回归函数,我似乎无法弄清楚它为什么会失败。

什么是奇异矩阵误差?

【问题讨论】:

  • 你也可以使用np.polyfit(x, y, 1)

标签: python numpy linear-regression


【解决方案1】:

正如另一个答案linalg.solve 中所解释的那样,需要一个满秩矩阵。这是因为它试图求解矩阵方程,而不是进行应该适用于所有等级的线性回归。

线性回归有几种方法。我建议的最简单的方法是标准最小二乘法。只需使用 numpy.linalg.lstsq 代替。包含示例的文档是here

【讨论】:

    【解决方案2】:

    奇异矩阵是行列式为零的矩阵。这表明您的矩阵具有不是线性独立的行。例如,如果其中一行不是线性独立于其他行,则可以通过其他行的线性组合来构造它。我将使用 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
    

    这是一个非常明显的例子,因为第一行只是第二行的两倍,但希望你明白这一点。

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 2018-02-03
      • 1970-01-01
      • 2023-03-05
      • 2016-04-19
      • 2018-07-23
      • 2018-07-31
      • 2013-07-14
      相关资源
      最近更新 更多