ริดจ์ลงโทษ GLM โดยใช้การเพิ่มแถว?


12

ฉันได้อ่านว่าการถดถอยของสันสามารถทำได้โดยการเพิ่มแถวของข้อมูลลงในเมทริกซ์ข้อมูลดั้งเดิมซึ่งแต่ละแถวถูกสร้างขึ้นโดยใช้ 0 สำหรับตัวแปรตามและรากที่สองของหรือศูนย์สำหรับตัวแปรอิสระ เพิ่มแถวพิเศษหนึ่งแถวสำหรับแต่ละตัวแปรอิสระk

ฉันสงสัยว่ามันเป็นไปได้ที่จะได้รับการพิสูจน์ในทุกกรณีรวมถึงการถดถอยโลจิสติกหรือ GLM อื่น ๆ


ไม่ฉันได้รับมาจากncss.com/wp-content/themes/ncss/pdf/Procedures/NCSS/…และมีการกล่าวถึงสั้น ๆ ในหน้า 335-4
เกล็ดหิมะ

1
ขออภัยที่ลบความคิดเห็นของคุณที่นั่น ฉันตัดสินใจว่าฉันเข้าใจผิดก่อนที่จะเห็นคำตอบของคุณและลบออก
Glen_b -Reinstate Monica

2
ลักษณะทั่วไปเล็กน้อยของปัญหานี้จะถามและตอบในstats.stackexchange.com/questions/15991 เนื่องจากไม่ได้อยู่ส่วนการถดถอยโลจิสติกของคำถามนี้ฉันไม่ได้ลงคะแนนเพื่อรวมสองเธรด
whuber

GLM นั้นเหมาะสมที่จะใช้กำลังสองน้อยที่สุดซ้ำในขณะที่ในbwlewis.github.io/GLMและในแต่ละรอบการวนซ้ำแต่ละครั้งสามารถรองรับขั้นตอนกำลังสองขั้นต่ำที่มีน้ำหนักปกติได้ ในความเป็นจริงเมื่อใช้ร่วมกับบทลงโทษปรับสันเขานี้จะใช้เพื่อให้พอดีกับ L0 GLMs ลงโทษเช่นเดียวกับในแพคเกจl0araดูbiodatamining.biomedcentral.com/articles/10.1186/และjournals.plos.org/plosone/article?id=10.1371 / …
Tom Wenseleers

คำตอบ:


14

ริดจ์ถดถอยลดขนาด 2i=1n(yixiTβ)2+λj=1pβj2

(มักจำเป็นต้องมีค่าคงที่ แต่ไม่ย่อขนาดในกรณีนั้นจะรวมอยู่ในและตัวทำนาย - แต่ถ้าคุณไม่ต้องการลดขนาดมันคุณไม่มีแถวที่สอดคล้องกันสำหรับการสังเกตแบบหลอก ถ้าคุณไม่ต้องการที่จะหดตัวลงนั้นคุณจะมีแถวสำหรับมัน. ฉันจะเขียนมันราวกับว่ามันไม่ได้นับในและไม่หดตัวเป็นเป็นกรณีที่มีความซับซ้อนมากขึ้น. กรณีอื่น ๆ คือการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ จากนี้ .)βp

เราสามารถเขียนเทอมที่สองเป็น pseudo-observations ถ้าเราสามารถเขียนแต่ละ "y" และแต่ละอันที่เกี่ยวข้อง -vector "x" เช่นนั้นp(p+1)

(yn+jxn+jTβ)2=λβj2,j=1,,p

แต่โดยการตรวจสอบเพียงแค่ให้ , ให้และปล่อยให้ (รวมถึงโดยทั่วไป)yn+j=0xn+j,j=λxn+j,k=0xn+j,0=0

แล้วก็

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

วิธีนี้ใช้สำหรับการถดถอยเชิงเส้น มันใช้ไม่ได้กับการถดถอยแบบโลจิสติกเพราะการถดถอยแบบโลจิสติกส์แบบธรรมดาไม่ได้ลดจำนวนผลรวมของเศษเหลือที่น้อยที่สุด

[การถดถอยของสันเขาไม่ใช่สิ่งเดียวที่สามารถทำได้ผ่านกลอุบายหลอกแบบสังเกตการณ์ - มันเกิดขึ้นในบริบทอื่น ๆ จำนวนมาก]


ขอบคุณฉันกำลังดิ้นรนกับการเขียนใหม่ทุกอย่างจากการถดถอยโลจิสติกส์ แต่ฉันก็ไม่สามารถใช้วิธีการทางโทรศัพท์ และฉันไม่ไว้วางใจความสามารถของตัวเองอย่างเพียงพอที่จะพูดได้ว่าเป็นไปไม่ได้
เกล็ดหิมะ

อย่างน้อยฉันก็ไม่คิดว่ามันเป็น ฉันจะดูอีกครั้งเกี่ยวกับฟังก์ชันความน่าจะเป็น
Glen_b -Reinstate Monica

3
1 เทคนิคการถดถอยที่เกี่ยวข้องเพิ่มเติมจะนำมาใช้ในคำตอบที่stats.stackexchange.com/a/32753และstats.stackexchange.com/a/26187 , อนึ่ง
whuber

GLM นั้นเหมาะสมที่จะใช้การลดความซ้ำของกำลังสองน้อยที่สุดในขณะที่ในbwlewis.github.io/GLMและดังนั้นในการทำซ้ำแต่ละครั้งเราสามารถรองรับขั้นตอนการยกกำลังสองขั้นต่ำที่มีน้ำหนักปกติได้ ในความเป็นจริงเมื่อใช้ร่วมกับบทลงโทษปรับสันเขานี้จะใช้เพื่อให้พอดีกับ L0 GLMs ลงโทษเช่นเดียวกับในแพคเกจl0araดูbiodatamining.biomedcentral.com/articles/10.1186/และjournals.plos.org/plosone/article?id=10.1371 / …
Tom Wenseleers

@ TomWenseleers ขอบคุณใช่ว่าเหมาะสมแล้ว
Glen_b

0

Generalizing สูตรนี้เพื่อ GLMs แน่นอนไม่ได้เป็นเรื่องยากที่ GLMs มักจะพอดีกับการใช้reweighted ซ้ำสองน้อยที่สุด ดังนั้นในการทำซ้ำแต่ละครั้งเราสามารถทำการลดขั้นตอนกำลังสองน้อยที่สุดตามปกติด้วยสันเขาลงโทษขั้นต่ำกำลังสองขั้นต่ำเพื่อรับการลงโทษ GLM ในความเป็นจริงเมื่อใช้ร่วมกับบทลงโทษปรับสันเขาสูตรนี้จะใช้เพื่อให้พอดีกับ L0 GLMs ลงโทษ (aka ส่วนย่อยที่ดีที่สุดคือ GLMs ที่จำนวนรวมของค่าสัมประสิทธิ์ที่ไม่ใช่ศูนย์จะถูกลงโทษ) สิ่งนี้ได้ถูกนำไปใช้เช่นในแพ็คเกจ l0araดูเอกสารนี้และเอกสารนี้สำหรับรายละเอียด

นอกจากนี้ยังเป็นที่น่าสังเกตว่าวิธีการแบบปิดที่เร็วที่สุดในการแก้ปัญหาการถดถอยของสันเขาเป็นประจำคือการใช้

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]
}

สำหรับกรณีที่n>=pหรือใช้

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

เมื่อใดp>nและสำหรับโมเดลที่ไม่มีการสกัดกั้น

สิ่งนี้เร็วกว่าการใช้สูตรการเพิ่มแถวเช่นทำ

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))))
}

หากคุณต้องการข้อ จำกัด ที่ไม่เป็นค่าลบในค่าสัมประสิทธิ์การติดตั้งของคุณคุณสามารถทำได้

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
}

ซึ่งจะให้ผลลัพธ์ที่แม่นยำกว่าเล็กน้อยเล็กน้อย

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 
}

(และการพูดอย่างเคร่งครัดเพียงวิธีการแก้ปัญหาnnls(A=crossprod(X)+diag(lambdas), b=crossprod(X,Y))$x นั้นเป็นหนึ่งที่ถูกต้อง)

ฉันยังไม่ทราบว่ากรณีที่มีข้อ จำกัด แบบ nonnegativity สามารถปรับให้เหมาะสมสำหรับp > nกรณีได้อย่างไร - แจ้งให้เราทราบหากใครจะรู้วิธีการทำเช่นนี้ ... [ lmridge_nnls_largep = function (X, Y, lambda) t(X) %*% nnls(A=tcrossprod(X)+lambda*diag(nrow(X)), b=Y)$xไม่ทำงาน]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.