Regresi linier online yang efisien

53

Saya menganalisis beberapa data di mana saya ingin melakukan regresi linier biasa, namun ini tidak mungkin karena saya berurusan dengan pengaturan online dengan aliran input data yang berkelanjutan (yang dengan cepat akan terlalu besar untuk memori) dan perlu untuk memperbarui perkiraan parameter saat ini sedang dikonsumsi. yaitu saya tidak bisa hanya memuat semuanya ke dalam memori dan melakukan regresi linier pada seluruh kumpulan data.

Saya mengasumsikan model regresi multivariat linier sederhana, yaitu

y=Ax+b+e

Apa algoritme terbaik untuk membuat estimasi pembaruan berkelanjutan dari parameter regresi linier dan ?bAb

Idealnya:

  • Saya ingin algoritma yang paling kompleksitas ruang dan waktu per pembaruan, di mana adalah dimensi dari variabel independen ( ) dan adalah dimensi dari variabel dependen ( ).N x M yO(NM)NxMy
  • Saya ingin dapat menentukan beberapa parameter untuk menentukan berapa banyak parameter diperbarui oleh setiap sampel baru, misalnya 0,000001 akan berarti bahwa sampel berikutnya akan memberikan sepersejuta estimasi parameter. Ini akan memberikan semacam peluruhan eksponensial untuk efek sampel di masa lalu yang jauh.
mikera
sumber
2
Cari (1) Regresi linier fleksibel, (2) Filter Kalman.
Jase

Jawaban:

31

Maindonald menjelaskan metode berurutan berdasarkan rotasi Givens . (Rotasi Givens adalah transformasi ortogonal dari dua vektor yang nol dari entri yang diberikan di salah satu vektor.) Pada langkah sebelumnya Anda telah mendekomposisi matriks desain menjadi matriks segitiga melalui sebuah transformasi orthogonal sehingga . (Cepat dan mudah untuk mendapatkan hasil regresi dari matriks segitiga.) Setelah berdampingan dengan baris baru bawah , Anda secara efektif memperluas dengan baris bukan nol , juga, katakanT Q Q X = ( T , 0 ) v X ( T , 0 ) t T T t T T QXTQQX=(T,0)vX(T,0)t. Tugasnya adalah nol di luar baris ini sambil menjaga entri di posisi diagonal. Urutan rotasi Givens melakukan ini: rotasi dengan baris pertama nol elemen pertama ; lalu rotasi dengan baris kedua nol elemen kedua, dan seterusnya. Efeknya adalah premultiply oleh serangkaian rotasi, yang tidak mengubah ortogonalitasnya.TTtTQ

Ketika matriks desain memiliki kolom (yang merupakan kasus ketika melakukan regresi pada variabel ditambah konstanta), jumlah rotasi yang diperlukan tidak melebihi dan setiap rotasi mengubah dua vektor . Penyimpanan yang diperlukan untuk adalah . Jadi algoritma ini memiliki biaya komputasi baik dalam waktu dan ruang.p p + 1 p + 1 T O ( ( p + 1 ) 2 ) O ( ( p + 1 ) 2 )p+1pp+1p+1TO((p+1)2)O((p+1)2)

Pendekatan serupa memungkinkan Anda menentukan efek pada regresi menghapus baris. Maindonald memberikan formula; begitu juga Belsley, Kuh, & Welsh . Jadi, jika Anda mencari jendela bergerak untuk regresi, Anda bisa menyimpan data untuk jendela dalam buffer melingkar, berdampingan dengan datum baru dan menjatuhkan yang lama dengan setiap pembaruan. Ini menggandakan waktu pembaruan dan membutuhkan penyimpanan tambahan untuk jendela lebar . Tampaknya akan menjadi analog dari parameter pengaruh.k 1 / kO(k(p+1))k1/k

Untuk peluruhan eksponensial, saya pikir (secara spekulatif) bahwa Anda dapat mengadaptasi pendekatan ini ke kuadrat terkecil berbobot, memberi setiap nilai baru bobot lebih besar dari 1. Tidak boleh ada kebutuhan untuk mempertahankan buffer nilai sebelumnya atau menghapus data lama apa pun.

Referensi

JH Maindonald, Perhitungan Statistik. J. Wiley & Sons, 1984. Bab 4.

DA Belsley, E. Kuh, RE Welsch, Diagnostik Regresi: Mengidentifikasi Data Berpengaruh dan Sumber Collinearity. J. Wiley & Sons, 1980.

whuber
sumber
1
Apakah metode yang dijelaskan Maindonald terkait atau sama dengan algoritma Gentleman? jstor.org/stable/2347147
onestop
6
Dalam hal ini lihat juga ekstensi oleh Alan Miller jstor.org/stable/2347583 . Arsip situs perangkat lunak Fortran miliknya sekarang ada di jblevins.org/mirror/amiller
onestop
5
Algoritme eksplisit muncul di bagian bawah hal. 4 dari saba.kntu.ac.ir/eecd/people/aliyari/NN%20%20files/rls.pdf . Ini dapat ditemukan dengan Googling "kuadrat terkecil rekursif." Itu tidak terlihat seperti perbaikan pada pendekatan Gentleman / Maindonald, tetapi setidaknya itu dijelaskan secara jelas dan eksplisit.
whuber
2
Tautan terakhir terlihat seperti metode yang akan saya sarankan. Identitas matriks yang mereka gunakan dikenal di tempat lain sebagai identitas Sherman - Morrison - Woodbury. Ini juga cukup efisien secara numerik untuk diterapkan, tetapi mungkin tidak stabil seperti rotasi Givens.
kardinal
2
@suncoolsu Hmm ... Buku Maindonald baru diterbitkan ketika saya mulai menggunakannya :-).
whuber
8

Saya pikir menyusun kembali model regresi linier Anda menjadi model state-space akan memberi Anda apa yang Anda cari. Jika Anda menggunakan R, Anda mungkin ingin menggunakan paket dlm dan melihat buku pendamping oleh Petris et al.

F. Tusell
sumber
mungkin saya bingung tetapi ini tampaknya merujuk pada model deret waktu? model saya sebenarnya lebih sederhana karena sampelnya bukan deret waktu (efektif mereka adalah sampel independen (x-> y), mereka hanya terakumulasi dalam volume besar dari waktu ke waktu)
mikera
1
Ya, dalam kasus umum ini digunakan untuk deret waktu dengan pengamatan tidak independen; tetapi Anda selalu dapat mengasumsikan keterkaitan antara pengamatan berturut-turut, yang memberikan kasus khusus yang menarik bagi Anda.
F. Tusell
7

Anda selalu dapat hanya melakukan gradient descent pada jumlah kuadrat biaya wrt parameter model . Ambil saja gradiennya tetapi jangan gunakan solusi form tertutup tetapi hanya untuk arahan pencarian.EW

Mari menjadi biaya sampel pelatihan i'th diberikan parameter . Pembaruan Anda untuk parameter j'th adalahE(i;W)W

WjWj+αE(i;W)Wj

di mana adalah tingkat langkah, yang harus Anda pilih melalui validasi silang atau ukuran yang baik.α

Ini sangat efisien dan cara jaringan saraf biasanya dilatih. Anda dapat memproses bahkan banyak sampel secara paralel (katakanlah, 100 atau lebih) secara efisien.

Tentu saja algoritma optimasi yang lebih canggih (momentum, gradien konjugat, ...) dapat diterapkan.

bayerj
sumber
Tampaknya sangat mirip dengan makalah ini eprints.pascal-network.org/archive/00002147/01/… . Ini telah diimplementasikan dalam proyek open source yang disebut jubatus.
saccharine
3

Terkejut tidak ada orang lain yang menyinggung ini sejauh ini. Regresi linier memiliki fungsi tujuan kuadratik. Jadi, langkah newton Raphson dari titik awal mana pun membawa Anda langsung ke optima. Sekarang, katakanlah Anda sudah melakukan regresi linier Anda. Fungsi obyektif adalah:

L(β)=(yXβ)t(yXβ)
Gradien menjadi Dan hessian:
L(β)=2Xt(yXβ)
2L(β)=XtX

Sekarang, Anda mendapatkan beberapa data sebelumnya dan melakukan regresi linier dan duduk dengan parameter Anda ( ). Gradien pada titik ini adalah nol menurut definisi. Goni seperti yang diberikan di atas. Titik data baru ( ) tiba. Anda cukup menghitung gradien untuk titik baru melalui:βxnew,ynew

Lnew(β)=2xnew(ynewxnewTβ)
dan itu akan menjadi gradien keseluruhan Anda (karena gradien dari data yang ada adalah nol) . Goni untuk titik data baru adalah:

2Lnew=xnewxnewT
.

Tambahkan ini ke goni tua yang diberikan di atas. Kemudian, ambil langkah Newton Raphson.

βnew=βold+(2L)1Lnew

Dan kamu sudah selesai.

ryu576
sumber
1
Lnewp,O(p3)
O(p3)p(IA)1=I+A+A2+
2

Standar terkecil-kuadrat memberikan koefisien regresi

β=(XTX)1XTY

β

XTXXTYM2+Mβ

Misalnya, jika M = 1, maka koefisien satu adalah

β=i=1Nxiyii=1Nxi2

jadi setiap kali Anda mendapatkan titik data baru Anda memperbarui kedua jumlah dan menghitung rasio dan Anda mendapatkan koefisien yang diperbarui.

XTXXTY(1λ)λ

Mark Higgins
sumber
2
β
XTXXTY
6
XX
1
C1xCxzt+1=zt+xCztzC1xt
1

Masalahnya lebih mudah dipecahkan ketika Anda menulis ulang sedikit hal:

Y = y

X = [x, 1]

kemudian

Y = A * X

Solusi satu kali ditemukan dengan menghitung

V = X '* X

dan

C = X '* Y

perhatikan V harus memiliki ukuran N-by-N dan C ukuran N-by-M. Parameter yang Anda cari kemudian diberikan oleh:

A = inv (V) * C

Karena V dan C dihitung dengan menjumlahkan data Anda, Anda dapat menghitung A di setiap sampel baru. Namun, ini memiliki kompleksitas waktu O (N ^ 3).

Karena V adalah kuadrat dan semi-pasti positif, dekomposisi LU ada, yang membuat pembalikan V secara numerik lebih stabil. Ada algoritma untuk melakukan pembaruan peringkat-1 ke kebalikan dari matriks. Temukan itu dan Anda akan memiliki implementasi efisien yang Anda cari.

Algoritma pembaruan peringkat-1 dapat ditemukan di "Perhitungan matriks" oleh Golub dan van Loan. Ini bahan yang sulit, tetapi memiliki ikhtisar yang komprehensif tentang algoritma tersebut.

Catatan: Metode di atas memberikan estimasi kuadrat-terkecil pada setiap langkah. Anda dapat dengan mudah menambahkan bobot ke pembaruan ke X dan Y. Ketika nilai X dan Y tumbuh terlalu besar, mereka dapat diskalakan dengan skalar tunggal, tanpa memengaruhi hasilnya.

Tuan Putih
sumber