เรามีปัญหา: มีสมมติฐานว่า: \ sum_ {i = 1} ^ nx_ix_i ^ T = \ diag (\ sigma_1 ^ 2, ... , \ sigma_d ^ 2)
ในกรณีนี้มีวิธีแก้ปัญหาแบบปิดหรือไม่?
ฉันมี:
เรามีปัญหา: มีสมมติฐานว่า: \ sum_ {i = 1} ^ nx_ix_i ^ T = \ diag (\ sigma_1 ^ 2, ... , \ sigma_d ^ 2)
ในกรณีนี้มีวิธีแก้ปัญหาแบบปิดหรือไม่?
ฉันมี:
คำตอบ:
ฉันจะต้องผ่านการค้นพบของ @ cardinal เกี่ยวกับการแก้ปัญหาแบบกัมมันตภาพรังสีแบบปิดเมื่อพบได้ที่นี่พร้อมการแก้ไขเล็กน้อย
ฉันจะสมมติว่าสำหรับทุกฉันนี่เป็นธรรมเพราะถ้าเรามีนี่จะบอกเราว่าคอลัมน์ th ของคือ 0 ทั้งหมดและฉันคิดว่ามันสมเหตุสมผลที่จะยกเว้นกรณีดังกล่าว ฉันจะให้D โปรดทราบว่านี่ยังหมายความว่านั้นเป็นอันดับเต็มและโซลูชัน OLSนั้นถูกกำหนดไว้โดยเฉพาะ
ฉันจะปรับเปลี่ยนสัญกรณ์ของคุณให้ตรงกับที่ดีกว่าในคำตอบที่ฉันอ้างอิง ด้วยเหตุนี้ฉันจะต้องแก้
นี่เป็นปัญหาของคุณ แต่ฉันสามารถเพิ่มรายละเอียดเพิ่มเติมได้ที่นี่หากคุณต้องการ
จากการติดตามของ @ cardinal เราจำเป็นต้องแก้
สังเกตว่าโซลูชัน OLS คือเรามี
เรากำลังปรับให้เหมาะสมกับแต่ละแยกต่างหากดังนั้นเราจึงสามารถแก้แต่ละเทอมของผลรวมนี้แยกกันได้ นั่นหมายความว่าเราต้องลดโดยที่
จากการโต้แย้งอย่างถี่ถ้วนกับคำตอบที่เชื่อมโยงเราพบว่า
นอกจากนี้ดังนั้นเราจึงมี
ดังนั้นปรากฎว่าตัวทำนายกลายเป็นศูนย์อย่างแน่นอนเมื่อมันเกิดขึ้นถ้าเมทริกซ์การออกแบบเป็นแบบออโธเทนนิกไม่ใช่ไม่ใช่แค่ฉากฉาก ดังนั้นเราจะเห็นได้ว่าในกรณีนี้ด้วยการเลือกตัวแปรไม่แตกต่างจากแต่ค่าสัมประสิทธิ์ที่เกิดขึ้นจริงจะถูกปรับสัดส่วนตามความแปรปรวนของผู้ทำนาย
ในฐานะที่เป็นบันทึกสุดท้ายเราจะหันแก้ปัญหานี้เป็นหนึ่งที่คุณคล้ายซึ่งหมายความว่าเราต้องคูณโดยบางสิ่งบางอย่างที่จะได้รับ\ ถ้าเราก็มี
ตั้งแต่(ก)
สังเกตว่าเมื่อ
เราเห็นว่าเราสามารถแสดงเป็น
ดังนั้นนี่คือสิ่งที่คุณมี แต่ไม่เหมือนกัน
ฉันมักจะตรวจสอบ derivations เช่นนี้กับห้องสมุดที่รู้จักกันดีถ้าเป็นไปได้ดังนั้นนี่คือตัวอย่างใน R:
## generating `x`
set.seed(1)
n = 1000
p = 5
sigma2s = 1:p
x = svd(matrix(rnorm(n * p), n, p))$u %*% diag(sqrt(sigma2s))
## check this
# t(x) %*% x
## generating `y`
betas = 1:p
y = x %*% betas + rnorm(nrow(x), 0, .5)
lambda = 2
## using a well-known library to fit lasso
library(penalized)
penalized(y, x, lambda1 = lambda)@penalized
## using closed form solution
betahat = lm(y ~ x - 1)$coef
ifelse(betahat > 0, 1, -1) * sapply(abs(betahat) - lambda / sigma2s, function(v) max(c(0, v)))