Ridge phạt GLMs bằng cách sử dụng hàng gia tăng?


12

Tôi đã đọc rằng có thể đạt được hồi quy sườn bằng cách thêm các hàng dữ liệu vào ma trận dữ liệu gốc, trong đó mỗi hàng được xây dựng bằng 0 cho các biến phụ thuộc và căn bậc hai của hoặc 0 cho các biến độc lập. Một hàng thêm sau đó được thêm vào cho mỗi biến độc lập.k

Tôi đã tự hỏi liệu có thể rút ra một bằng chứng cho tất cả các trường hợp, bao gồm cả hồi quy logistic hoặc GLM khác.


Không, tôi đã nhận nó từ ncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/... và nó đã được đề cập ngắn gọn trên trang 335-4
Snowflake

1
Xin lỗi về việc xóa bình luận về bạn ở đó. Tôi quyết định tôi đã nhầm trước khi tôi thấy câu trả lời của bạn và xóa nó.
Glen_b -Reinstate Monica

2
Một khái quát nhỏ của vấn đề này được hỏi và trả lời tại stats.stackexchange.com/questions/15991 . Bởi vì nó không giải quyết phần hồi quy logistic của câu hỏi này, tôi không bỏ phiếu để hợp nhất hai luồng.
whuber

Các GLM phù hợp bằng cách sử dụng các bình phương tối thiểu lặp lại, như trong bwlewis.github.io/GLM , và do đó, trong mỗi lần lặp, người ta có thể thực hiện bước bình phương nhỏ nhất có trọng số bằng một bước vuông góc có trọng số thấp nhất để có một sườn vuông bị phạt. Trên thực tế, kết hợp với các hình phạt sườn thích ứng, điều này được sử dụng để phù hợp với các GLM bị phạt L0, như trong gói l0ara, xem bioatamining.biomedcentral.com/articles/10.1186/ nháyjournals.plos.org/plosone/article?id=10.137 /
Lọ

Câu trả lời:


13

Ridge hồi quy giảm thiểu .ΣTôi= =1n(yTôi-xTôiTβ)2+λΣj= =1pβj2

(Thông thường một hằng số là cần thiết, nhưng không phải teo tóp lại Trong trường hợp đó nó được bao gồm trong. và dự đoán - nhưng nếu bạn không muốn thu nhỏ nó, bạn không có một hàng tương ứng cho các quan sát giả Hoặc nếu. bạn muốn thu nhỏ nó, bạn làm có một hàng cho nó. tôi sẽ viết nó như thể nó không được tính trong p , và không teo tóp lại, vì nó là trường hợp phức tạp hơn. các trường hợp khác là một sự thay đổi nhỏ từ này. )βp

Chúng ta có thể viết các nhiệm kỳ thứ hai như giả quan sát nếu chúng ta có thể viết mỗi "y" và mỗi người trong số tương ứng ( p + 1 ) -vectors "x" như vậyp(p+1)

(yn+j-xn+jTβ)2= =λβj2,j= =1,Giáo dục,p

Nhưng bằng cách kiểm tra, chỉ cần để , chúng ta hãy x n + j , j = yn+j=0 và để cho tất cả khácx n + j , kxn+j,j=λ (kể cả x n + j , 0 = 0 thường).xn+j,k=0xn+j,0=0

Sau đó

.(yn+j[xn+j,0β0+xn+j,1β1+xn+j,2β2+...+xn+j,pβp])2=λβj2

Điều này làm việc cho hồi quy tuyến tính. Nó không hoạt động cho hồi quy logistic, bởi vì hồi quy logistic thông thường không giảm thiểu một phần dư bình phương.

[Hồi quy sườn không phải là điều duy nhất có thể được thực hiện thông qua các thủ thuật quan sát giả như vậy - chúng xuất hiện trong một số bối cảnh khác]


Cảm ơn, tôi đã vật lộn với việc viết lại mọi thứ từ hồi quy logistic, nhưng tôi đơn giản là không thể thực hiện phương pháp dữ liệu điện thoại. Và tôi không đủ tin tưởng vào khả năng của chính mình để có thể nói rằng điều đó là không thể.
Bông tuyết

Ít nhất tôi không nghĩ rằng nó là. Tôi sẽ xem xét lại chức năng khả năng.
Glen_b -Reinstate Monica

3
+1 Các thủ thuật hồi quy liên quan bổ sung được giới thiệu trong các câu trả lời tại stats.stackexchange.com/a/32753stats.stackexchange.com/a/26187 , inter alia .
whuber

Mặc dù vậy, GLM phù hợp bằng cách sử dụng các ô vuông nhỏ nhất lặp lại, như trong bwlewis.github.io/GLM , và do đó, trong mỗi lần lặp, người ta có thể đặt bước vuông bình phương có trọng số nhỏ nhất bằng một bước hình vuông có trọng số thấp nhất Trên thực tế, kết hợp với các hình phạt sườn thích ứng, điều này được sử dụng để phù hợp với các GLM bị phạt L0, như trong gói l0ara, xem bioatamining.biomedcentral.com/articles/10.1186/ nháyjournals.plos.org/plosone/article?id=10.137 /
Lọ

@TomWenseleers cảm ơn, vâng, điều đó hoàn toàn có ý nghĩa
Glen_b -Reinstate Monica

0

Việc khái quát hóa công thức này cho GLM thực sự không khó vì GLM thường phù hợp bằng cách sử dụng các bình phương tối thiểu lặp lại . Do đó, trong mỗi lần lặp, người ta có thể thực hiện bước bình phương tối thiểu có trọng số thông thường với một bước vuông bình phương có trọng số nhỏ nhất để có được một sườn núi bị phạt GLM. Trong thực tế, kết hợp với hình phạt sườn thích ứng, công thức này được sử dụng để phù hợp với GLM bị phạt L0 (hay còn gọi là tập hợp con tốt nhất, tức là GLM trong đó tổng số hệ số khác không bị phạt). Điều này đã được thực hiện ví dụ trong gói l0ara , xem bài viết nàybài này để biết chi tiết.

Cũng đáng lưu ý rằng cách thức nhanh nhất để giải quyết hồi quy sườn thông thường là sử dụng

lmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  solve(crossprod(X) + diag(lambdas), crossprod(X, y))[, 1]
}

cho trường hợp n>=p, hoặc sử dụng

lmridge_solve_largep = function (X, Y, lambda) (t(X) %*% solve(tcrossprod(X)+lambda*diag(nrow(X)), Y))[,1]

khi p>nvà cho một mô hình mà không bị chặn.

Điều này nhanh hơn so với việc sử dụng công thức tăng cường hàng , tức là làm

lmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  qr.solve(rbind(X, diag(sqrt(lambdas))), c(y, rep(0, ncol(X))))
}

Nếu bạn có thể cần các ràng buộc không âm trên các hệ số được trang bị thì bạn có thể làm

library(nnls)

nnlmridge_solve = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x
}

mà sau đó cho kết quả btw chính xác hơn một chút so với

nnlmridge_rbind = function (X, y, lambda, intercept = TRUE) {
  if (intercept) {
    lambdas = c(0, rep(lambda, ncol(X)))
    X = cbind(1, X)
  } else { lambdas = rep(lambda, ncol(X)) }
  nnls(A=rbind(X,diag(sqrt(lambdas))), b=c(Y,rep(0,ncol(X))))$x 
}

(và nói đúng ra chỉ có giải pháp nnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x thì mới đúng).

Tôi vẫn chưa tìm ra làm thế nào trường hợp bị hạn chế không âm thanh có thể được tối ưu hóa hơn nữa cho p > nvụ án - hãy cho tôi biết nếu có ai đó sẽ biết cách làm điều này ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xkhông hoạt động]

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.