Для какой большой системы разумно пытаться выполнить линейную регрессию?
В частности: у меня есть система с ~ 300 тыс. точек выборки и ~ 1200 линейных терминов. Выполнимо ли это вычислительно?
Для какой большой системы разумно пытаться выполнить линейную регрессию?
В частности: у меня есть система с ~ 300 тыс. точек выборки и ~ 1200 линейных терминов. Выполнимо ли это вычислительно?
Вы можете выразить это как матричное уравнение:
где матрица составляет 300 тыс. строк и 1200 столбцов, вектор коэффициентов
имеет размер 1200x1, а вектор RHS
1200x1.
Если вы умножите обе части на транспонирование матрицы , вы получите систему уравнений для неизвестных, которая 1200x1200. Вы можете использовать разложение LU или любой другой алгоритм, который вам нравится, для решения коэффициентов. (Это то, что делает метод наименьших квадратов.)
Таким образом, поведение Big-O похоже на O(mmn), где m = 300K и n = 1200. Вы должны учитывать транспонирование, матричное умножение, разложение LU и подстановка вперед-назад для получения коэффициентов.
n/m=C
), а умножение будет O (n < /i>n*m)~=O(n^3) и инверсия будет O(n^3) Теперь просто вычислить постоянный член.
- person BCS; 24.12.2009
Линейная регрессия рассчитывается как (X'X)^-1 X'Y.
Если X представляет собой (n x 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_алгебра
Если вам покажется фантазией, вы можете уменьшить время до O(k^2*(n+k^0,376)) с помощью алгоритма Копперсмита-Винограда.
Линейная регрессия рассчитывается как (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_алгебра< /а>
Но мы знаем, что между случаями n → ∞ и m → ∞ есть существенная разница. https://en.wikipedia.org/wiki/Big_O_notation#Multiple_variables
Итак, какой из них мы должны выбрать? Очевидно, что скорее всего будет расти количество наблюдений, а не количество атрибутов. Итак, мой вывод таков: если мы предположим, что количество атрибутов остается постоянным, мы можем игнорировать m членов, и это облегчение, потому что временная сложность многомерной линейной регрессии становится простой линейной O(n). . С другой стороны, мы можем ожидать, что наше вычислительное время резко увеличится, когда количество атрибутов существенно возрастет.
Линейная регрессия закрытой модели вычисляется следующим образом: производная от
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 is n D^2
Сложность транспонирования D^3
Итак, сложность
(H^t H)^-1 is n * D^2 + D^3