Giảm kích thước SVD cho chuỗi thời gian có độ dài khác nhau


13

Tôi đang sử dụng Phân tích giá trị số ít như một kỹ thuật giảm kích thước.

Đưa ra Ncác vectơ kích thước D, ý tưởng là thể hiện các tính năng trong một không gian biến đổi của các kích thước không tương quan, điều chỉnh hầu hết thông tin của dữ liệu trong các hàm riêng của không gian này theo thứ tự quan trọng giảm dần.

Bây giờ tôi đang cố gắng áp dụng quy trình này cho dữ liệu chuỗi thời gian. Vấn đề là không phải tất cả các chuỗi có cùng độ dài, do đó tôi không thể thực sự xây dựng num-by-dimma trận và áp dụng SVD. Suy nghĩ đầu tiên của tôi là đệm các ma trận bằng các số 0 bằng cách xây dựng một num-by-maxDimma trận và lấp đầy các khoảng trống bằng các số 0, nhưng tôi không chắc đó có phải là cách chính xác hay không.

Câu hỏi của tôi là làm thế nào để bạn tiếp cận SVD về giảm kích thước theo chuỗi thời gian có độ dài khác nhau? Ngoài ra, có bất kỳ phương pháp tương tự khác của biểu diễn không gian điện tử thường được sử dụng với chuỗi thời gian không?

Dưới đây là một đoạn mã MATLAB để minh họa ý tưởng:

X = randn(100,4);                       % data matrix of size N-by-dim

X0 = bsxfun(@minus, X, mean(X));        % standarize
[U S V] = svd(X0,0);                    % SVD
variances = diag(S).^2 / (size(X,1)-1); % variances along eigenvectors

KEEP = 2;                               % number of dimensions to keep
newX = U(:,1:KEEP)*S(1:KEEP,1:KEEP);    % reduced and transformed data

(Tôi đang viết mã chủ yếu bằng MATLAB, nhưng tôi cũng đủ thoải mái để đọc R / Python / ..)


Câu hỏi hay! Tôi nghĩ rằng bạn có thể cải thiện tiêu đề, có thể có một cái gì đó như "dữ liệu bị thiếu" ở đâu đó hoặc "chuỗi thời gian có độ dài khác nhau".
cướp girard

1
Tôi sẽ không gọi nó là "dữ liệu bị thiếu", có lẽ là "giảm kích thước SVD cho chuỗi thời gian có độ dài khác nhau"?
Amro

1
Tôi thích tiêu đề bạn đề xuất!
cướp girard

1
nó cũng sẽ giúp để biết tại sao bộ phim có độ dài khác nhau. Ví dụ: nếu chúng đại diện cho quỹ đạo của bút chì trong tác vụ viết tay, giả sử chuyển vị X trong khi viết ra một chữ số, thì bạn có thể muốn căn chỉnh chuỗi thời gian sao cho chúng có cùng độ dài. Nó cũng quan trọng để biết loại biến thể bạn quan tâm để giữ lại, và những gì bạn không.
vqv

Câu trả lời:


5

Có một lĩnh vực nghiên cứu hợp lý mới gọi là Hoàn thành Ma trận , đó có thể là những gì bạn muốn. Một lời giới thiệu thực sự hay được đưa ra trong bài giảng này của Emmanuel Candes


+1 cho trang web VideoLecture, tôi không biết, bạn có đề cập đến nó trong câu hỏi về bài giảng video không?
robin girard

Gần đây tôi chỉ đọc về những thứ này. Tôi thực sự thích bài viết gần đây của Candes và Tao về chủ đề arxiv.org/abs/0903.1476
Robby McKilliam

2

Điền bằng không là xấu. Hãy thử điền với việc lấy lại mẫu bằng cách sử dụng các quan sát từ quá khứ.


Sao chép +1 / lấy mẫu lại chắc chắn tốt hơn so với đệm không .. vẫn sẽ chờ xem liệu có ý tưởng nào khác không :)
Amro

2

Chỉ cần một suy nghĩ: bạn có thể không cần SVD đầy đủ cho vấn đề của bạn. Đặt M = USV * là SVD của ma trận d theo n của bạn ( nghĩa là chuỗi thời gian là các cột). Để đạt được việc giảm chiều bạn sẽ sử dụng các ma trận VS . Bạn có thể tìm thấy chúng bằng cách chéo M * M = V (S * S) V * . Tuy nhiên, bởi vì bạn đang thiếu một số giá trị, bạn có thể không tính toán M * M . Tuy nhiên, bạn có thể ước tính nó. Các mục của nó là tổng các sản phẩm của cột M. Khi tính toán bất kỳ SSP nào, hãy bỏ qua các cặp liên quan đến các giá trị bị thiếu. Bán lại từng sản phẩm để tính các giá trị còn thiếu: nghĩa là, bất cứ khi nào SSP liên quan đến các cặp nk , hãy bán lại nó bằng n / (nk). Quy trình này là một ước tính "hợp lý" của M * M và bạn có thể tiến hành từ đó. Nếu bạn muốn nhận fancier, có thể nhiều kỹ thuật cắt bỏ hoặc Hoàn thành Ma trận sẽ giúp ích.

(Điều này có thể được thực hiện trong nhiều gói thống kê bằng cách tính ma trận hiệp phương sai theo cặp của bộ dữ liệu được chuyển đổi và áp dụng PCA hoặc phân tích nhân tố cho nó.)


MTM

Đó là một điểm tốt, nhưng kết quả có thể không quá tệ. Điều người ta hy vọng là ước tính của M * M đủ gần với giá trị thực mà sự nhiễu loạn của giá trị bản địa là khá nhỏ. Do đó, bằng cách chiếu vào không gian eigens tương ứng với các giá trị riêng lớn nhất, bạn chỉ đạt được một chút nhiễu loạn của giải pháp chính xác, vẫn đạt được mức giảm kích thước tìm kiếm. Có lẽ vấn đề lớn nhất có thể là thuật toán: vì bạn không còn có thể giả định tính linh hoạt, bạn có thể cần phải sử dụng thuật toán có mục đích chung hơn để tìm hệ thống eigensystem.
whuber

1

Bạn có thể ước tính các mô hình chuỗi thời gian đơn biến cho chuỗi 'ngắn' và ngoại suy chúng vào tương lai để 'căn chỉnh' tất cả các chuỗi.


phép ngoại suy sẽ bao gồm độ mịn trong phần được điền không tồn tại trong phần hiện có. Bạn phải thêm tính ngẫu nhiên ... do đó, việc lấy lại mẫu (và lập lại sơ đồ trên phép ngoại suy dường như là một ý tưởng hay)
robin girard

Phép ngoại suy mô hình sẽ yêu cầu lấy mẫu thuật ngữ lỗi sẽ tạo ra tính ngẫu nhiên mong muốn.

IMO cả hai đề xuất sôi sục để dự đoán các giá trị trong tương lai từ các giá trị hiện tại (mô hình AR / ARMA có lẽ?). Tôi đoán tôi vẫn hy vọng một giải pháp không liên quan đến các giá trị lấy mẫu (do đó khả năng đưa ra lỗi) .. Bên cạnh đó, việc ước tính các mô hình như vậy tự nó là một hình thức giảm kích thước :)
Amro

1

Tôi hơi bối rối bởi mã ví dụ của bạn, vì có vẻ như bạn bỏ Vbiến từ tính toán của newX. Bạn đang tìm kiếm mô hình Xnhư một sản phẩm xếp hạng giảm, hoặc bạn quan tâm đến một không gian cột giảm X? trong trường hợp sau, tôi nghĩ rằng phương pháp EM-PCA sẽ hoạt động. bạn có thể tìm thấy mã MATLAB dưới tiêu đề Xác suất PCA với các giá trị bị thiếu .

hth


Tôi không cố gắng tính xấp xỉ X giảm thứ hạng, thay vào đó là X biến đổi. Bạn thấy mục tiêu của tôi không phải là lọc các chuỗi nhiễu, mà là tìm một đại diện với thứ nguyên giảm (được sử dụng để phân loại / phân cụm chuỗi thời gian ) ... Bạn có thể nói rõ hơn một chút về phương pháp EM-PCA không?
Amro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.