【问题标题】:What is the BigO of linear regression?什么是线性回归的 BigO?
【发布时间】:2020-05-07 00:47:21
【问题描述】:

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

具体来说:我有一个具有约 30 万个样本点和约 1200 个线性项的系统。这在计算上可行吗?

【问题讨论】:

  • 哪种算法?最小二乘?
  • 是的,最小二乘。我不知道还有其他的。

标签: big-o linear-regression blas gsl


【解决方案1】:

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

如果 X 是一个 (n x 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) 时间

所以 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))。

【讨论】:

  • Coppersmith-Winograd 算法实际上不可用,因为系数太大,需要一个如此大的矩阵才能开始看到渐近效率的好处,这是不现实的:en.m.wikipedia.org/wiki/Coppersmith–Winograd_algorithm跨度>
【解决方案2】:

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

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

如果你将两边都乘以矩阵 的转置,你就会得到一个未知数的方程组,即 1200x1200。您可以使用 LU 分解或您喜欢的任何其他算法来求解系数。 (这就是最小二乘所做的。)

所以 Big-O 的行为类似于 O(mmn),其中 m = 300K 和 n = 1200。您需要考虑转置、矩阵乘法和 LU 分解, 以及前后代换得到系数。

【讨论】:

  • 所以,如果我没看错(和 IIRC),生成 A 将是 O(nm)~=O(m^2) (在我的情况下是 n/m=C ) 乘法为 O(nn*m)~=O(n^3) 求逆为 O(n^3) 现在只需计算常数项。
【解决方案3】:

线性回归计算为(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. a (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) .另一方面,当属性数量大幅增加时,我们可以预期我们的计算时间会大幅增加。

【讨论】:

  • 一个合理的答案,但有一个隐藏的假设:您假设所考虑的实现是最有效的解决方案(我怀疑这实际上很可能,但我还没有看到证明) .
【解决方案4】:

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

的导数

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

【讨论】:

  • 这不只是实现的复杂性吗?有没有证据证明这是最快的实现?
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2019-03-03
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2012-08-22
相关资源
最近更新 更多