Dengan matriks data katakanlah pengamatan 1000000 100 fitur, apakah ada cara cepat untuk membangun perkiraan tridiagonal
?
Maka kita dapat faktor ,
semua 0 kecuali dan , dan melakukan hubungan dekorasi cepat (memutihkan) dengan memecahkan
. (Dengan "cepat" Maksudku .)
(Ditambahkan, mencoba mengklarifikasi): Saya mencari pemutih yang cepat dan kotor yang lebih cepat daripada full tetapi lebih baik daripada diagonal. Katakanlah adalah titik data fitur , mis. 1000000 100, dengan fitur 0-mean.
1) membangun , faktor Cholesky sebagai , pecahkan untuk memutihkan baru . Ini kuadratik dalam jumlah fitur.
2) diagonal: mengabaikan korelasi silang sepenuhnya.
Orang bisa mendapatkan matriks tridiagonal dari hanya dengan -zeroing semua entri di luar tridiagonal, atau tidak mengakumulasinya di tempat pertama. Dan di sini saya mulai tenggelam: harus ada perkiraan yang lebih baik, mungkin hierarkis, blok diagonal → tridiagonal?
(Ditambahkan 11 Mei): Biarkan saya membagi pertanyaan menjadi dua:
1) apakah ada perkiraan cepat ?
Tidak (whuber), seseorang harus melihat semua {N \ pilih 2} pasangan (atau memiliki struktur, atau sampel).
2) diberikan , seberapa cepat dapat satu memutihkan baru s?
Nah, memfaktorkan , segitiga bawah, satu kali, lalu menyelesaikan
cukup cepat; scipy.linalg.solve_triangular, misalnya, menggunakan Lapack.
Saya mencari whiten () yang lebih cepat, masih mencari.
Jawaban:
Hanya menghitung matriks kovarians - yang Anda perlukan untuk memulai dalam peristiwa apa pun - adalah jadi, asimtotik dalam , tidak ada yang diperoleh dengan memilih algoritma untuk memutihkan.O((Nf)2) N O(Nf)
Ada perkiraan ketika variabel memiliki struktur tambahan, seperti ketika mereka membentuk deret waktu atau realisasi proses stokastik spasial di berbagai lokasi. Ini secara efektif bergantung pada asumsi yang memungkinkan kita menghubungkan kovarians antara sepasang variabel dengan pasangan variabel lainnya, seperti antara pasangan yang dipisahkan oleh jeda waktu yang sama. Ini adalah alasan konvensional untuk menganggap suatu proses stasioner atau intrinsik stasioner , misalnya. Perhitungan bisa dalam kasus seperti itu ( misalnya , menggunakan Fast Fourier Transform seperti dalam Yao & Journel 1998 ). Tanpa model seperti itu, saya tidak melihat bagaimana Anda dapat menghindari menghitung semua kovarian berpasangan.O(Nflog(Nf)
sumber
Pada saat yang bersamaan, saya memutuskan untuk mencoba menghitung (dalam R) matriks kovarians untuk dataset sebesar ukuran yang disebutkan dalam OP:
Ini membutuhkan waktu kurang dari satu menit, pada laptop yang cukup umum yang menjalankan Windows XP 32-bit. Mungkin butuh waktu lebih lama untuk menghasilkan
z
daripada menghitung matriksvcv
. Dan R tidak terlalu optimal untuk operasi matriks di luar kotak.Mengingat hasil ini, apakah kecepatan itu penting? Jika N >> p, waktu yang dibutuhkan untuk menghitung perkiraan Anda mungkin tidak akan jauh lebih sedikit daripada untuk mendapatkan matriks kovarians yang sebenarnya.
sumber