вычисление матрицы Ганкеля для больших рядов данных

Я хотел бы провести исследование по следующей теме:

я часто использую следующую матрицу в своей исследовательской части введите здесь описание изображения

я написал следующий код

Function [x ]=create_matrix1(b,l)
%This Function is used to Create Hankel Type Data Matrix
%x is a given data
%l represent window size
    n = length(b);
    m = n-l+1;
    x = zeros(m,l);
    for i=1:m
        x(i,:)=b(i:i+l-1);
    end;

для временных рядов с малым объемом данных работает корректно, но для больших временных рядов память давит, например, возьмем реальные данные из исторических цен yahoo Finance введите здесь описание изображения

длина временного ряда равна

>> length(BMW)

ans =

   257

для такой матрицы метод работает корректно

>> X=create_matrix(BMW,50);

размер X равен

>> size(X)

ans =

   208    50

теперь давайте рассмотрим следующую загрузку данных quakevibration.mat

который генерирует данные с размером выборки 10000, в этой программе будет раздавлен, моя конечная цель - оценить SVD данной матрицы, матрица создана, но мне нужна аппроксимация SVD, какой метод полезен для этого? и вообще для больших временных рядов , как я могу обработать?


person dato datuashvili    schedule 27.10.2017    source источник


Ответы (1)


Насколько я понимаю ваш вопрос, вы ищете метод усеченного или сокращенного SVD, который представлен здесь, например.

Этот метод реализован в Matlab и называется Fast SVD, и приблизиться к СВД по высокому КПД.

Кроме того, в случае ограниченной памяти вы можете использовать онлайн-алгоритмы, такие как это.

person OmG    schedule 27.10.2017
comment
Кстати, я использую Matlab 2017a, и программа работает правильно, может быть, последняя версия Matlab использует какую-то специальную библиотеку для ускорения программы? - person dato datuashvili; 27.10.2017
comment
@датодатуашвили Да, это возможно. Поскольку мы не знаем точную реализацию стоящих за ними кодов, это улучшение может произойти в последней версии. Кстати, вы можете использовать некоторые существующие бенчмарки, чтобы найти это. - person OmG; 27.10.2017
comment
но когда у нас недостаточно памяти? например, мы пытаемся проанализировать данные размером 500000, тогда можно ли создать SVD? - person dato datuashvili; 27.10.2017
comment
@datodatuashvili в случае ограниченной памяти вы можете использовать онлайн-алгоритмы, такие как stats.stackexchange.com/a/179539/144441 - person OmG; 27.10.2017
comment
спасибо, мой друг, мой первый вопрос о самой матрице, создании матрицы с размером, превышающим объем памяти, как я могу вычислить SVD матрицы из необработанных временных рядов без создания самой матрицы? - person dato datuashvili; 27.10.2017