Có các thuật toán để tính toán các tham số hồi quy tuyến tính hoặc logistic của Drake không?


32

Một bài báo "Tính toán chính xác phương sai đang chạy" tại http://www.johndcook.com/stiteria_deviation.html cho thấy cách tính toán trung bình, phương sai và độ lệch chuẩn đang chạy.

Có thuật toán nào mà các tham số của mô hình hồi quy tuyến tính hoặc logistic có thể được cập nhật "động" tương tự khi mỗi bản ghi đào tạo mới được cung cấp không?


1
Với một tập huấn luyện khổng lồ hoặc một luồng dữ liệu đầu vào liên tục, bạn có thể sử dụng các thuật toán lặp như Stochastic Gradient Descent và lấy đầu vào theo từng đợt nhỏ khi bạn di chuyển. Có phải đó là những gì bạn đã được hỏi?
andreister

1
Tra cứu thuật toán RLS và các biến thể của nó. vi.wikipedia.org/wiki/Recursive_least_squares_filter
Ghi nhớ

Câu trả lời:


20

Các hệ số tái tạo tuyến tính của y=ax+ba=cov(x,y)/var(x)b=mean(y)amean(x) .

Vì vậy, tất cả những gì bạn thực sự cần là một phương pháp gia tăng để tính cov(x,y) . Từ giá trị này và phương sai của x và giá trị trung bình của cả yx bạn có thể tính các tham số ab . Như bạn sẽ thấy trong mã giả được đưa ra bên dưới tính toán gia tăng của cov(x,y) rất giống với tính toán gia tăng của var(x) . Điều này không có gì đáng ngạc nhiên vì var(x)=cov(x,x) .

Đây là mã giả mà bạn có thể đang tìm kiếm:

init(): meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0

update(x,y):
n += 1
dx = x - meanX
dy = y - meanY
varX += (((n-1)/n)*dx*dx - varX)/n
covXY += (((n-1)/n)*dx*dy - covXY)/n
meanX += dx/n
meanY += dy/n

getA(): return covXY/varX
getB(): return meanY - getA()*meanX

Tôi tìm thấy câu hỏi này trong khi tìm kiếm một thuật toán tương đương từng bước tính toán một biến hồi quy đa là R=(XX)1XY sao cho XR=Y+ϵ


4
Cảm ơn sự đóng góp của bạn! Một phần của câu hỏi về hồi quy tuyến tính thực sự là một bản sao của stats.stackexchange.com/questions/6920/ mẹo có câu trả lời cho thấy cách cập nhật mô hình hồi quy tuyến tính đa biến. Chủ đề hiện tại được phép đứng vì phần hồi quy logistic của câu hỏi độc lập với lợi ích. Trên thực tế, ngay cả phần logistic cũng đã được sao chép tại stats.stackexchange.com/questions/59174/ .
whuber

1
Tôi nghĩ rằng câu trả lời này sẽ hữu ích khi xem xét văn bản tham khảo được đưa ra trong câu hỏi. Cảm ơn vi đương link. Tuy nhiên đó không phải là điều tôi đang tìm kiếm. Trường hợp sử dụng của tôi rõ ràng là đặc biệt.
chmike 16/12/13

3
Tôi tin rằng nó có thể hữu ích và là duy nhất trong việc cung cấp mã làm việc.
whuber

Tôi có thể hỏi bạn tại sao bạn để dx * dy lần (n-1) / n không?
FavourMylike

Bạn có thể cải thiện mã để tính giá trị p không?
Nathan

12

Đối với hai ví dụ cụ thể của bạn:

Hồi quy tuyến tính Bài báo "Hồi quy tuyến tính trực tuyến và ứng dụng của nó vào việc học tăng cường dựa trên mô hình" của Alexander Strehl và Michael Littman mô tả một thuật toán gọi là "Hồi quy tuyến tính KWIK" (xem thuật toán 1) cung cấp một xấp xỉ cho giải pháp hồi quy tuyến tính bằng cách sử dụng các cập nhật tăng dần . Lưu ý rằng điều này không được thường xuyên (tức là nó không phải là Hồi quy Ridge). Tôi khá chắc chắn rằng phương pháp của Strehl & Littman không thể mở rộng đến cài đặt đó.

Hồi quy logistic

Chủ đề này làm sáng tỏ vấn đề. Trích dẫn:

Ngay cả khi không có ràng buộc chính quy, hồi quy logistic là một vấn đề tối ưu hóa phi tuyến. Điều này đã không có một giải pháp phân tích, thường là điều kiện tiên quyết để có được một giải pháp cập nhật. Với một ràng buộc chính quy, nó trở thành một vấn đề tối ưu hóa bị ràng buộc. Điều này giới thiệu một loạt các biến chứng không phân tích hoàn toàn mới trên các vấn đề mà vấn đề không bị ràng buộc đã có.

Tuy nhiên, có các phương pháp trực tuyến (hoặc gia tăng) khác để hồi quy mà bạn có thể muốn xem xét, ví dụ: Hồi quy dự báo có trọng số cục bộ (LWPR)


Về hồi quy logistic, tôi nghĩ bạn bi quan không cần thiết. Hồi quy logistic tương đương với tính toán xác suất của lớp sau cho một vấn đề hai lớp với mỗi lớp Gaussian được phân phối, với các phương tiện khác nhau và hiệp phương sai được chia sẻ. MLE cho hiệp phương sai chỉ là một tổng trọng số của hiệp phương sai trên mỗi lớp, do đó, số liệu thống kê đầy đủ chỉ là số lượng, tổng và bình phương của mỗi lớp. Rõ ràng thật dễ dàng để có được một bản cập nhật chính xác bằng cách sử dụng số liệu thống kê đầy đủ.
Robert Dodier

3
@RobertDodier Bạn đã mô tả phân tích phân biệt tuyến tính, không phải hồi quy logistic. Đoạn cuối của phần giới thiệu ở đây làm rõ mối quan hệ.
ahfoss

@ahfoss Ngay cả khi dữ liệu trên mỗi lớp không được phân phối bình thường, người ta vẫn có thể xây dựng một mô hình tương đương với hồi quy logistic thông qua hiệp phương sai trên mỗi lớp.
Robert Dodier

1
@RobertDodier Mô hình tương đương là gì? Bạn dường như đang ám chỉ rằng có một giải pháp rõ ràng cho một vấn đề thực sự khó khăn. Giải pháp của bạn là tuyệt vời hơn bạn nghĩ, hoặc ít hơn như vậy.
ahfoss

11

Theo nguyên tắc chung:

0) bạn giữ đủ số liệu thống kê và ước tính ML hiện tại

1) khi bạn nhận được dữ liệu mới, hãy cập nhật số liệu thống kê đầy đủ và các ước tính

2) Khi bạn không có đủ số liệu thống kê, bạn sẽ cần sử dụng tất cả dữ liệu.

3) Thông thường, bạn không có giải pháp dạng đóng; sử dụng các MLE trước làm điểm bắt đầu, sử dụng một số phương pháp tối ưu hóa thuận tiện để tìm ra tối ưu mới từ đó. Bạn có thể cần thử nghiệm một chút để tìm ra cách tiếp cận nào tạo ra sự đánh đổi tốt nhất cho các loại vấn đề cụ thể của bạn.

Nếu vấn đề của bạn có cấu trúc đặc biệt, có lẽ bạn có thể khai thác nó.

Một vài tài liệu tham khảo tiềm năng có thể có hoặc không có giá trị:

McMahan, HB và M. Streeter (2012),
Vấn đề mở: Giới hạn tốt hơn cho hồi quy logistic trực tuyến ,
JMLR: Kỷ yếu hội thảo và hội thảo , tập 23, 44.1 Chuyện44.3

Penny, WD và SJ Roberts (1999),
Hồi quy logistic năng động ,
Kỷ yếu IJCNN '99


Tôi đồng ý với ý tưởng giữ đủ số liệu thống kê (nếu chúng tồn tại cho vấn đề), nhưng không có sự hiện diện của số liệu thống kê đầy đủ có làm cho các công cụ khác không cần thiết không? Nếu bạn có đủ số liệu thống kê, bạn có thể tính toán các tham số được cập nhật chính xác như thể bạn đã sử dụng toàn bộ tập dữ liệu. Không cần phải tính đến các tham số hiện tại và không cần thử nghiệm các phương pháp tối ưu hóa.
Robert Dodier

2
Điều quan trọng cần lưu ý là có đủ số liệu thống kê không có nghĩa là bạn có một giải pháp cho các phương trình, mặc dù.
Glen_b -Reinstate Monica

8

Thêm vào câu trả lời của tdc, không có phương pháp nào được biết để tính toán các ước tính chính xác của các hệ số tại bất kỳ thời điểm nào chỉ với thời gian không đổi trên mỗi lần lặp. Tuy nhiên, có một số lựa chọn thay thế là hợp lý và thú vị.

Mô hình đầu tiên để xem xét là cài đặt học tập trực tuyến . Trong cài đặt này, thế giới trước tiên thông báo giá trị x, thuật toán của bạn dự đoán giá trị cho y, thế giới thông báo giá trị thực y 'và thuật toán của bạn bị mất l (y, y'). Đối với cài đặt này, người ta biết rằng các thuật toán đơn giản (độ dốc gốc và độ dốc lũy thừa, trong số các thuật toán khác) đạt được sự hối tiếc tuyến tính. Điều này có nghĩa là khi bạn thấy nhiều ví dụ hơn, số lỗi thêm mà thuật toán của bạn mắc phải (khi so sánh với công cụ dự đoán tuyến tính tốt nhất có thể) không tăng theo số lượng ví dụ. Điều này hoạt động ngay cả trong các thiết lập nghịch cảnh. Có một bài viết hay giải thích một chiến lược phổ biến để chứng minh những giới hạn hối tiếc này. Ghi chú bài giảng của Shai Shalev-Schwartz cũng hữu ích.

Có một phần mở rộng của cài đặt học trực tuyến được gọi là cài đặt tên cướp trong đó thuật toán của bạn chỉ được cung cấp một số biểu thị mức độ sai của nó (và không có con trỏ cho câu trả lời đúng). Thật ấn tượng, nhiều kết quả từ việc học trực tuyến mang đến thiết lập này, ngoại trừ ở đây người ta buộc phải khám phá cũng như khai thác, dẫn đến tất cả các loại thử thách thú vị.


6

Các câu trả lời khác đã chỉ ra thế giới của máy học, và đó chắc chắn là một nơi mà vấn đề này đã được giải quyết.

Tuy nhiên, một cách tiếp cận khác có thể phù hợp hơn với nhu cầu của bạn là sử dụng hệ số QR với các cập nhật thứ hạng thấp. Phương pháp tiếp cận để làm điều này và sử dụng nó để giải quyết các vấn đề bình phương tối thiểu được đưa ra trong:

Cập nhật hệ số QR và vấn đề bình phương nhỏ nhất của Hammerling và Lucas.


5

Bạn có thể sử dụng một số gói Bộ lọc Kalman tiêu chuẩn trong R cho việc này - sspir, dlm, kfas, v.v. Tôi cảm thấy KF là một lĩnh vực phát triển hơn nhiều so với học trực tuyến, vì vậy nó có thể thực tế hơn. Bạn có thể sử dụng một mô hình

yt= =βtxt+εt,βt= =βt-1+ηt
để cho phép các hệ số hồi quy của bạn thay đổi chậm theo thời gian và KF sẽ ước tính lại chúng theo từng bước (với chi phí thời gian không đổi) dựa trên hầu hết các dữ liệu gần đây. Ngoài ra, bạn có thể đặt chúng không đổi
βt= =βt-1
và KF vẫn sẽ ước tính lại chúng theo từng bước nhưng lần này giả sử chúng không đổi và chỉ kết hợp dữ liệu quan sát mới để tạo ra ước tính tốt hơn và tốt hơn cho cùng các giá trị hệ số.

Bạn có thể xây dựng mô hình tương tự cho hồi quy logistic,

yt= =tôiogtôit(βtxt+εt),βt= =βt-1+ηt
vì nó sẽ không tuyến tính, bạn sẽ cần sử dụng phương pháp lọc phi tuyến tính từ các gói trên - EKF hoặc UKF.

2

Điều này là để thêm vào câu trả lời @chmike.

Phương pháp này có vẻ giống với thuật toán trực tuyến của BP Welford cho độ lệch chuẩn cũng tính toán giá trị trung bình. John Cook đưa ra một lời giải thích tốt ở đây . Tony Finch năm 2009 cung cấp một phương pháp cho trung bình di chuyển theo cấp số nhân và độ lệch chuẩn:

diff := x – mean 
incr := alpha * diff 
mean := mean + incr 
variance := (1 - alpha) * (variance + diff * incr)

Nhìn vào câu trả lời được đăng trước đó và mở rộng dựa trên nó để bao gồm một cửa sổ di chuyển theo cấp số nhân:

init(): 
    meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0,
    meanXY = 0, varY = 0, desiredAlpha=0.01 #additional variables for correlation

update(x,y):
    n += 1
    alpha=max(desiredAlpha,1/n) #to handle initial conditions

    dx = x - meanX
    dy = y - meanY
    dxy = (x*y) - meanXY #needed for cor

    varX += ((1-alpha)*dx*dx - varX)*alpha
    varY += ((1-alpha)*dy*dy - varY)*alpha #needed for corXY
    covXY += ((1-alpha)*dx*dy - covXY)*alpha

    #alternate method: varX = (1-alpha)*(varX+dx*dx*alpha)
    #alternate method: varY = (1-alpha)*(varY+dy*dy*alpha) #needed for corXY
    #alternate method: covXY = (1-alpha)*(covXY+dx*dy*alpha)

    meanX += dx * alpha
    meanY += dy * alpha
    meanXY += dxy  * alpha

getA(): return covXY/varX
getB(): return meanY - getA()*meanX
corXY(): return (meanXY - meanX * meanY) / ( sqrt(varX) * sqrt(varY) )

Trong "mã" ở trên, mong muốn có thể được đặt thành 0 và nếu vậy, mã sẽ hoạt động mà không có trọng số theo cấp số nhân. Có thể đề xuất đặt mong muốnAlpha thành 1 / wishWindowSize theo đề xuất của Modified_moving_alusive cho kích thước cửa sổ di chuyển.

Câu hỏi phụ: về các tính toán thay thế ở trên, có nhận xét nào tốt hơn từ quan điểm chính xác không?

Tài liệu tham khảo:

chmike (2013) https://stats.stackexchange.com/a/79845/70282

Cook, John (nd) Tính toán chính xác khi chạy phương sai http://www.johndcook.com/blog/stiteria_deviation/

Finch, Tony. (2009) Tính toán gia tăng của trung bình và phương sai trọng số. https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

Wikipedia. (nd) Thuật toán trực tuyến của Welford https://en.wikipedia.org/wiki/Alacticms_for_calculating_variance#Online_alerskym

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.