Saya menggunakan Dekomposisi Nilai Singular sebagai teknik reduksi dimensi.
Mengingat N
vektor dimensiD
, idenya adalah untuk mewakili fitur-fitur dalam ruang yang ditransformasi dari dimensi yang tidak berkorelasi, yang memadatkan sebagian besar informasi data dalam vektor eigen ruang ini dalam urutan kepentingan yang menurun.
Sekarang saya mencoba menerapkan prosedur ini ke data deret waktu. Masalahnya adalah bahwa tidak semua urutan memiliki panjang yang sama, jadi saya benar-benar tidak bisa membangun num-by-dim
matriks dan menerapkan SVD. Pikiran pertama saya adalah mengisi matriks dengan nol dengan membangun num-by-maxDim
matriks dan mengisi ruang kosong dengan nol, tapi saya tidak begitu yakin apakah itu cara yang benar.
Pertanyaan saya adalah bagaimana Anda pendekatan pengurangan dimensi SVD ke deret waktu dengan panjang yang berbeda? Atau adakah metode representasi eigenspace serupa lainnya yang biasa digunakan dengan deret waktu?
Di bawah ini adalah bagian dari kode MATLAB untuk menggambarkan ide:
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
(Saya mengkode sebagian besar dalam MATLAB, tapi saya cukup nyaman untuk membaca R / Python / .. juga)
Jawaban:
Ada bidang penelitian yang cukup baru yang disebut Matrix Completion , yang mungkin melakukan apa yang Anda inginkan. Pengantar yang sangat bagus diberikan dalam kuliah ini oleh Emmanuel Candes
sumber
Mengisi dengan nol itu buruk. Coba isi dengan resampling menggunakan pengamatan dari masa lalu.
sumber
Hanya pemikiran: Anda mungkin tidak membutuhkan SVD lengkap untuk masalah Anda. Misalkan M = USV * menjadi SVD dari matriks d oleh n Anda ( yaitu , deret waktu adalah kolom). Untuk mencapai pengurangan dimensi Anda akan menggunakan matriks V dan S . Anda dapat menemukannya dengan mendiagonalisasi M * M = V (S * S) V * . Namun, karena Anda kehilangan beberapa nilai-nilai, Anda tidak bisa menghitung M * M . Namun demikian, Anda dapat memperkirakannya. Entri-entrinya adalah jumlah produk dari kolom M . Saat menghitung salah satu SSP, abaikan pasangan yang melibatkan nilai yang hilang. Skala ulang setiap produk untuk memperhitungkan nilai-nilai yang hilang: yaitu, setiap kali SSP melibatkan pasangan nk , skala ulang dengan n / (nk). Prosedur ini merupakan penaksir "masuk akal" dari M * M dan Anda dapat melanjutkan dari sana. Jika Anda ingin menjadi pelamun, mungkin beberapa teknik imputasi atau Matrix Completion akan membantu.
(Ini dapat dilakukan dalam banyak paket statistik dengan menghitung matriks kovarians berpasangan dari dataset yang dialihkan dan menerapkan PCA atau analisis faktor untuknya.)
sumber
Anda dapat memperkirakan model deret waktu univariat untuk seri 'pendek' dan mengekstrapolasi mereka ke masa depan untuk 'menyelaraskan' semua seri.
sumber
Saya agak bingung dengan kode contoh Anda, karena sepertinya Anda menjatuhkan
V
variabel dari perhitungannewX
. Apakah Anda ingin memodelkanX
sebagai produk peringkat yang diperkecil, atau apakah Anda tertarik pada ruang kolom yang diperkecilX
? dalam kasus terakhir, saya pikir pendekatan EM-PCA akan bekerja. Anda dapat menemukan kode matlab dengan judul Probabilistic PCA dengan nilai yang hilang .hth,
sumber