Hồi quy tuyến tính trực tuyến hiệu quả


53

Tôi đang phân tích một số dữ liệu mà tôi muốn thực hiện hồi quy tuyến tính thông thường, tuy nhiên điều này là không thể vì tôi đang xử lý một cài đặt trực tuyến với một luồng dữ liệu đầu vào liên tục (sẽ nhanh chóng trở nên quá lớn cho bộ nhớ) và cần để cập nhật các ước tính tham số trong khi điều này đang được tiêu thụ. tức là tôi không thể tải tất cả vào bộ nhớ và thực hiện hồi quy tuyến tính trên toàn bộ tập dữ liệu.

Tôi đang giả sử một mô hình hồi quy đa biến tuyến tính đơn giản, nghĩa là

y=Ax+b+e

Thuật toán tốt nhất để tạo ước tính cập nhật liên tục các tham số hồi quy tuyến tính và gì?bAb

Lý tưởng nhất:

  • Tôi muốn một thuật toán có độ phức tạp về không gian và thời gian trên mỗi bản cập nhật, trong đó là chiều của biến độc lập ( ) và là chiều của biến phụ thuộc ( ).N x M yO(NM)NxMy
  • Tôi muốn có thể chỉ định một số tham số để xác định số lượng tham số được cập nhật cho mỗi mẫu mới, ví dụ: 0,000001 có nghĩa là mẫu tiếp theo sẽ cung cấp một phần triệu ước tính tham số. Điều này sẽ cung cấp một số loại phân rã theo cấp số nhân cho ảnh hưởng của các mẫu trong quá khứ xa.

2
Tra cứu (1) Hồi quy tuyến tính linh hoạt, (2) Bộ lọc Kalman.
Jase

Câu trả lời:


31

Maindonald mô tả một phương pháp tuần tự dựa trên các phép quay Givens . (Phép quay Givens là phép biến đổi trực giao của hai vectơ tạo ra một mục đã cho trong một trong các vectơ.) Ở bước trước, bạn đã phân tách ma trận thiết kế thành ma trận tam giác thông qua một biến đổi trực giao sao cho . (Thật nhanh chóng và dễ dàng để có được kết quả hồi quy từ ma trận tam giác.) Khi tiếp giáp một hàng mới bên dưới , bạn mở rộng một cách hiệu quả bởi một hàng khác cũng vậy, nóiT QXTQQX=(T,0)vX(T,0)t. Nhiệm vụ là loại bỏ hàng này trong khi vẫn giữ các mục ở vị trí đường chéo . Một chuỗi các phép quay Givens thực hiện điều này: phép quay với hàng đầu tiên của đổi phần tử đầu tiên của ; sau đó xoay với hàng thứ hai của không thành phần thứ hai, v.v. Hiệu quả là tạo tiền đề bằng một loạt các phép quay, không thay đổi tính trực giao của nó.TTtTQ

Khi ma trận thiết kế có các cột (đó là trường hợp khi hồi quy các biến cộng với một hằng số), số vòng quay cần thiết không vượt quá và mỗi vòng quay thay đổi hai -vector. Dung lượng cần thiết cho là . Do đó, thuật toán này có chi phí tính toán là cả về thời gian và không gian.p+1pp+1p+1TO((p+1)2)O((p+1)2)

Một cách tiếp cận tương tự cho phép bạn xác định ảnh hưởng của hồi quy xóa một hàng. Maindonald đưa ra công thức; do đó, làm Belsley, Kuh, & Welsh . Do đó, nếu bạn đang tìm kiếm một cửa sổ chuyển động để hồi quy, bạn có thể giữ lại dữ liệu cho cửa sổ trong một bộ đệm tròn, liền kề mốc thời gian mới và loại bỏ cửa sổ cũ với mỗi bản cập nhật. Điều này tăng gấp đôi thời gian cập nhật và yêu cầu lưu trữ bổ sung cho cửa sổ có chiều rộng . Dường như sẽ là tương tự của tham số ảnh hưởng.O(k(p+1))k1/k

Đối với sự phân rã theo cấp số nhân, tôi nghĩ (theo suy đoán) rằng bạn có thể điều chỉnh cách tiếp cận này với bình phương tối thiểu có trọng số, cho mỗi giá trị mới có trọng số lớn hơn 1. Không cần phải duy trì bộ đệm của các giá trị trước đó hoặc xóa bất kỳ dữ liệu cũ nào.

Người giới thiệu

JH Maindonald, Tính toán thống kê. J. Wiley & Sons, 1984. Chương 4.

DA Belsley, E. Kuh, RE Welsch, Chẩn đoán hồi quy: Xác định dữ liệu có ảnh hưởng và nguồn của cộng tác. J. Wiley & Sons, 1980.


1
Phương pháp mà Maindonald mô tả có liên quan đến hoặc giống như thuật toán của quý ông không? jstor.org/ sóng 2347147
onestop

6
Trong trường hợp đó, xem thêm các phần mở rộng của Alan Miller jstor.org/urdy/2347583 . Một kho lưu trữ của trang web phần mềm Fortran của anh ấy hiện có tại jblevins.org/mirror/amiller
onestop

5
Một thuật toán rõ ràng xuất hiện ở dưới cùng của p. 4 của saba.kntu.ac.ir/eecd/people/aliyari/NN%20%20files/rls.pdf . Điều này có thể được tìm thấy bởi Googling "bình phương tối thiểu đệ quy". Nó không giống như một sự cải tiến trong cách tiếp cận của quý ông / Maindonald, nhưng ít nhất nó được mô tả rõ ràng và rõ ràng.
whuber

2
Liên kết cuối cùng trông giống như phương pháp tôi sẽ đề xuất. Danh tính ma trận họ sử dụng được biết đến ở những nơi khác là danh tính Sherman - Morrison - Woodbury. Nó cũng khá hiệu quả về mặt số để thực hiện, nhưng có thể không ổn định như xoay Givens.
Đức hồng y

2
@suncoolsu Hmm ... Cuốn sách của Maindonald mới được xuất bản khi tôi bắt đầu sử dụng nó :-).
whuber

8

Tôi nghĩ rằng việc mô tả lại mô hình hồi quy tuyến tính của bạn thành mô hình không gian trạng thái sẽ cung cấp cho bạn những gì bạn đang theo đuổi. Nếu bạn sử dụng R, bạn có thể muốn sử dụng gói dlm và xem cuốn sách đồng hành của Petris et al.


có thể tôi bối rối nhưng điều này dường như đề cập đến một mô hình chuỗi thời gian? Mô hình của tôi thực sự đơn giản hơn ở chỗ các mẫu không phải là một chuỗi thời gian (thực tế chúng là các mẫu độc lập (x-> y), chúng chỉ được tích lũy với khối lượng lớn theo thời gian)
mikera

1
Có, trong trường hợp chung, nó được sử dụng cho chuỗi thời gian với các quan sát không độc lập; nhưng bạn luôn có thể giả định sự tương quan giữa các quan sát liên tiếp, điều này mang lại cho bạn trường hợp đặc biệt quan tâm.
F. Tusell

7

Bạn luôn có thể thực hiện giảm độ dốc trên tổng bình phương chi phí các tham số của mô hình của bạn . Chỉ cần lấy độ dốc của nó nhưng không đi đến giải pháp dạng đóng mà chỉ thay vào hướng tìm kiếm.WEW

Hãy để là chi phí của i'th mẫu đào tạo cho các thông số . Cập nhật của bạn cho tham số thứ j là sau đóWE(i;W)W

WjWj+αE(i;W)Wj

Trong đó là một tỷ lệ bước, mà bạn nên chọn thông qua xác thực chéo hoặc biện pháp tốt.α

Điều này rất hiệu quả và cách các mạng lưới thần kinh thường được đào tạo. Bạn có thể xử lý thậm chí rất nhiều mẫu song song (giả sử là 100 hoặc hơn) một cách hiệu quả.

Tất nhiên các thuật toán tối ưu hóa phức tạp hơn (động lượng, độ dốc liên hợp, ...) có thể được áp dụng.


Có vẻ rất giống với bài báo này eprints.pascal-network.org/archive/00002147/01/ . Nó đã được thực hiện trong một dự án nguồn mở có tên là jubatus.
sacarine

3

Ngạc nhiên không có ai khác chạm vào điều này cho đến nay. Hồi quy tuyến tính có hàm mục tiêu bậc hai. Vì vậy, một bước Rapton mới từ bất kỳ điểm bắt đầu nào dẫn bạn thẳng đến tối ưu. Bây giờ, giả sử bạn đã thực hiện hồi quy tuyến tính. Hàm mục tiêu là:

L(β)=(yXβ)t(yXβ)
Độ dốc trở thành Và hessian:
L(β)=2Xt(yXβ)
2L(β)=XtX

Bây giờ, bạn đã có một số dữ liệu trong quá khứ và thực hiện hồi quy tuyến tính và đang ngồi với các tham số của bạn ( ). Độ dốc tại điểm này bằng không theo định nghĩa. Các hessian như được đưa ra ở trên. Một điểm dữ liệu mới ( ) đến. Bạn chỉ cần tính toán độ dốc cho điểm mới thông qua:βxnew,ynew

Lnew(β)=2xnew(ynewxnewTβ)
và điều đó sẽ trở thành độ dốc tổng thể của bạn (vì độ dốc từ dữ liệu hiện tại là 0) . Hessian cho điểm dữ liệu mới là:

2Lnew=xnewxnewT
.

Thêm điều này vào hessian cũ được đưa ra ở trên. Sau đó, chỉ cần thực hiện một bước Newton Raphson.

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

Và bạn đã hoàn thành.


1
Tôi thích ý tưởng vì sự đơn giản của nó nhưng (a) vì mục đích không gây nhầm lẫn cho độc giả, nên thích xem định nghĩa rõ ràng về " " và (b) tin rằng bạn cần tính toán độ dốc chính xác (hoặc hiển thị tại sao bị tắt bởi hệ số 2 không quan trọng). Điều này sẽ thuyết phục hơn nếu bạn có thể đưa ra một ví dụ nhỏ chứng minh nó đúng. Đối với lớn hơn sẽ rất đáng để ước tính nỗ lực tính toán. Không đảo ngược Hessian mất thời gian ? p , O ( p 3 )Lnewp,O(p3)
whuber

Cảm ơn, sẽ thêm chi tiết một chút sau ngày hôm nay. Có, đảo ngược hessian mất cho lớn . Bạn cũng có thể thử và duy trì nghịch đảo hessian và cập nhật trực tiếp bằng chuỗi sức mạnh ( ). Nếu bạn có một triệu tham số, thì độ dốc giảm dần là tùy chọn duy nhất của bạn. p ( I - Một ) - 1 = I + Một + Một 2 + ...O(p3)p(IA)1=I+A+A2+
ryu576

2

Phù hợp tối thiểu tiêu chuẩn cho hệ số hồi quy

β=(XTX)1XTY

Trong đó X là ma trận các giá trị M cho mỗi điểm dữ liệu N và có kích thước NXM. Y là một ma trận NX1 của đầu ra. tất nhiên là một ma trận hệ số MX1. (Nếu bạn muốn chặn, chỉ cần tạo một bộ x x luôn bằng 1.)β

Để thực hiện trực tuyến này có lẽ bạn chỉ cần theo dõi và , do đó, một ma trận MXM và một ma trận MX1. Mỗi khi bạn nhận được một điểm dữ liệu mới, bạn cập nhật các phần tử đó và sau đó tính lại , điều này khiến bạn phải trả lại ma trận MXM và phép nhân của ma trận MXM và ma trận MX1.X T Y M 2 + MXTXXTYM2+Mβ

Ví dụ: nếu M = 1, thì một hệ số là

β=i=1Nxiyii=1Nxi2

do đó, mỗi khi bạn nhận được một điểm dữ liệu mới, bạn cập nhật cả hai tổng và tính tỷ lệ và bạn nhận được hệ số cập nhật.

Nếu bạn muốn làm giảm các ước tính trước đó về mặt hình học, tôi cho rằng bạn có thể cân và bằng mỗi lần trước khi thêm thuật ngữ mới, trong đó là một số nhỏ.X T Y ( 1 - λ ) λXTXXTY(1λ)λ


2
Thật tuyệt khi thấy trường hợp đơn giản này được giải thích. Tuy nhiên, bạn có nhận thấy rằng câu hỏi đặc biệt hỏi về hồi quy đa biến không? Thật không dễ dàng để cập nhật mẫu số của trong trường hợp đó! β
whuber

Tôi nghĩ rằng câu trả lời của tôi vẫn hoạt động: tức là bạn cần theo dõi ma trận MxM và ma trận Mx1 . Mỗi phần tử của các ma trận đó là một tổng như trong ví dụ M = 1. Hay tôi đang thiếu một cái gì đó? X T YXTXXTY
Mark Higgins

6
Có: ngoài việc tính toán một sản phẩm ma trận và áp dụng ma trận cho một vectơ, giờ đây bạn cần đảo ngược ở mỗi bước. Đó là đắt tiền. Toàn bộ vấn đề đối với các thuật toán trực tuyến là thay thế các bước đắt tiền bán buôn bằng các thủ tục cập nhật rẻ hơn. XX
whuber

1
@whuber Nhân tiện, một cách nhanh chóng, trực tuyến để ước tính cho ma trận thay đổi và vectơ được đưa ra bởi Schraudolph, NN (2002). Các sản phẩm vector ma trận độ cong nhanh cho độ dốc bậc hai. Về cơ bản, bạn để và là . C x z t + 1 = z t + x - C z t z C - 1 x t C1xCxzt+1=zt+xCztzC1xt
Neil G

1

Vấn đề dễ giải quyết hơn khi bạn viết lại mọi thứ một chút:

Y = y

X = [x, 1]

sau đó

Y = A * X

Một giải pháp một lần được tìm thấy bằng cách tính toán

V = X '* X

C = X '* Y

lưu ý V nên có kích thước N-by-N và C có kích thước N-by-M. Các tham số bạn đang tìm kiếm sau đó được đưa ra bởi:

A = inv (V) * C

Vì cả V và C đều được tính bằng cách tính tổng dữ liệu của bạn, bạn có thể tính A ở mỗi mẫu mới. Điều này có độ phức tạp thời gian của O (N ^ 3), tuy nhiên.

Vì V là hình vuông và bán xác định dương, nên một phân tách LU tồn tại, điều đó làm cho việc đảo ngược V ổn định hơn về mặt số lượng. Có các thuật toán để thực hiện cập nhật xếp hạng 1 thành nghịch đảo của ma trận. Tìm những cái đó và bạn sẽ có triển khai hiệu quả mà bạn đang tìm kiếm.

Các thuật toán cập nhật xếp hạng 1 có thể được tìm thấy trong "Tính toán ma trận" của Golub và van Loan. Đó là tài liệu khó, nhưng nó có một cái nhìn tổng quan toàn diện về các thuật toán như vậy.

Lưu ý: Phương pháp trên đưa ra ước tính bình phương nhỏ nhất ở mỗi bước. Bạn có thể dễ dàng thêm trọng số vào các bản cập nhật cho X và Y. Khi giá trị của X và Y tăng quá lớn, chúng có thể được thu nhỏ bằng một vô hướng duy nhất, mà không ảnh hưởng đến kết quả.

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.