尝试进行线性回归的系统有多大是合理的?
具体来说:我的系统有~300K采样点和~1200个线性项。这在计算上是否可行?
答案 0 :(得分:7)
线性回归计算为(X'X)^ - 1 X'Y。
如果X是(n×k)矩阵:
(X'X)需要O(n * k ^ 2)时间并产生(k x k)矩阵
(k x k)矩阵的矩阵求逆需要O(k ^ 3)时间
(X'Y)需要O(n * k ^ 2)时间并产生(k x k)矩阵
两个(k x k)矩阵的最终矩阵乘法需要O(k ^ 3)时间
因此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)
您可以将其表示为矩阵方程式:
其中矩阵为300K行和1200列,系数向量为1200x1,RHS向量为1200x1。
如果将两边乘以矩阵的转置,则有一个未知数的方程组,即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)矩阵:
因此,Big-O的运行时间为 O(n⋅m+n⋅m²+m³+n⋅m+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