什么是线性回归的BigO?

时间:2009-12-23 20:22:03

标签: big-o linear-regression blas gsl

尝试进行线性回归的系统有多大是合理的?

具体来说:我的系统有~300K采样点和~1200个线性项。这在计算上是否可行?

4 个答案:

答案 0 :(得分:7)

线性回归计算为(X'X)^ - 1 X'Y。

如果X是(n×k)矩阵:

  1. (X'X)需要O(n * k ^ 2)时间并产生(k x k)矩阵

  2. (k x k)矩阵的矩阵求逆需要O(k ^ 3)时间

  3. (X'Y)需要O(n * k ^ 2)时间并产生(k x k)矩阵

  4. 两个(k x k)矩阵的最终矩阵乘法需要O(k ^ 3)时间

  5. 因此Big-O运行时间为O(k ^ 2 *(n + k))。

    另请参阅:http://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations#Matrix_algebra

    如果你看上去好像你可以用Coppersmith-Winograd算法把时间缩短到O(k ^ 2 *(n + k ^ 0.376))。

答案 1 :(得分:5)

您可以将其表示为矩阵方程式:

alt text

其中矩阵alt text为300K行和1200列,系数向量alt text为1200x1,RHS向量alt text为1200x1。

如果将两边乘以矩阵alt text的转置,则有一个未知数的方程组,即1200x1200。您可以使用LU分解或您想要为系数求解的任何其他算法。 (这是最小二乘法正在做的事情。)

因此Big-O行为类似于O(m m n),其中m = 300K且n = 1200.您将考虑转置,矩阵乘法,LU分解,以及前后替换以获得系数。

答案 2 :(得分:1)

线性回归的计算方式为(X'X)^-1 X'y

据我了解, y 是结果的向量(或换句话说:因变量)。

因此,如果 X 是一个(n×m)矩阵,而 y 是一个(n×1)矩阵:

  1. (n×m)矩阵的转置花费 O(n⋅m)时间,并产生(m×n)矩阵
  2. (X'X)花费 O(n⋅m²)时间并生成(m×m)矩阵
  3. (m×m)矩阵的矩阵求逆花费 O(m³)时间
  4. (X'y)花费 O(n⋅m)时间并生成(m×1)矩阵
  5. (m×m)和(m x 1)矩阵的最终矩阵相乘需要 O(m²)时间

因此,Big-O的运行时间为 O(n⋅m+n⋅m²+m³+n⋅m+m²)

现在,我们知道:

  • m²≤m³
  • n⋅m≤n⋅m²

因此,渐近地,实际的Big-O运行时间为 O(n⋅m²+m³) = O(m²(n + m))

>

这就是我们所拥有的 http://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations#Matrix_algebra

但是,我们知道n→∞和m→∞之间存在显着差异。 https://en.wikipedia.org/wiki/Big_O_notation#Multiple_variables

那我们应该选择哪一个呢?显然,更可能增长的是观察值的数量,而不是属性的数量。 所以我的结论是,如果我们假设属性的数量保持不变,那么我们可以忽略m个项,这是一种解脱,因为多元线性回归的时间复杂度仅为线性 O(n) 。另一方面,当属性数量大大增加时,我们可以预期我们的计算时间会大幅增加。

答案 3 :(得分:0)

封闭形式模型的线性回归计算如下:

的衍生物
  

RSS(W)= -2H ^ t(y-HW)

所以,我们解决了

  

-2H ^ t(y-HW)= 0

然后,W值为

  

W =(H ^ t H)^ - 1 H ^ 2 y

其中: W :是预期权重的向量 H :是特征矩阵N * D,其中N是观测数,D是特征数 y :是实际值

然后,

的复杂性
  

H ^ t H是n D ^ 2

转置的复杂性是D ^ 3

所以,

的复杂性
  

(H^t H)^-1 is n * D^2 + D^3