วิธีการแก้ปัญหาแบบปิดเพื่อแก้ไขปัญหา lasso เมื่อ data matrix เป็นแนวทแยง


13

เรามีปัญหา: มีสมมติฐานว่า: \ sum_ {i = 1} ^ nx_ix_i ^ T = \ diag (\ sigma_1 ^ 2, ... , \ sigma_d ^ 2)

minwRd(1ni=1n(w,xiyi)2+2λ||w||1),
i=1nxixiT=diag(σ12,...,σd2).

ในกรณีนี้มีวิธีแก้ปัญหาแบบปิดหรือไม่?

ฉันมี:

(XTX)1=diag(σ12,...,σd2),
ดังนั้นฉันคิดว่าคำตอบคือ :
wj=yjmax{0,1λn|yj|},
สำหรับyj=i=1nyixijσi2แต่ฉันไม่แน่ใจ

คำตอบ:


9

ฉันจะต้องผ่านการค้นพบของ @ cardinal เกี่ยวกับการแก้ปัญหาแบบกัมมันตภาพรังสีแบบปิดเมื่อXTX=Iพบได้ที่นี่พร้อมการแก้ไขเล็กน้อย

ฉันจะสมมติว่าสำหรับทุกฉันนี่เป็นธรรมเพราะถ้าเรามีนี่จะบอกเราว่าคอลัมน์ th ของคือ 0 ทั้งหมดและฉันคิดว่ามันสมเหตุสมผลที่จะยกเว้นกรณีดังกล่าว ฉันจะให้D โปรดทราบว่านี่ยังหมายความว่านั้นเป็นอันดับเต็มและโซลูชัน OLSนั้นถูกกำหนดไว้โดยเฉพาะσi2>0iσi2=0iXXTX=DXβ^

ฉันจะปรับเปลี่ยนสัญกรณ์ของคุณให้ตรงกับที่ดีกว่าในคำตอบที่ฉันอ้างอิง ด้วยเหตุนี้ฉันจะต้องแก้

β^λ=argminβRp12||YXβ||22+λ||β||1.

นี่เป็นปัญหาของคุณ แต่ฉันสามารถเพิ่มรายละเอียดเพิ่มเติมได้ที่นี่หากคุณต้องการ

จากการติดตามของ @ cardinal เราจำเป็นต้องแก้

β^λ=argmin 12(YTY2YTXβ+βTXTXβ)+λ||β||1

=argmin YTXβ+12βTDβ+λ||β||1.

สังเกตว่าโซลูชัน OLS คือเรามี β^=(XTX)1XTY=D1XTY

β^λ=argmin β^TDβ+12βTDβ+λ||β||1

=argmin j=1pβ^jβjσj2+σj22βj2+λ|βj|.

เรากำลังปรับให้เหมาะสมกับแต่ละแยกต่างหากดังนั้นเราจึงสามารถแก้แต่ละเทอมของผลรวมนี้แยกกันได้ นั่นหมายความว่าเราต้องลดโดยที่ βjLj

Lj=β^jβjσj2+σj22βj2+λ|βj|.

จากการโต้แย้งอย่างถี่ถ้วนกับคำตอบที่เชื่อมโยงเราพบว่า

(β^λ)j=sgn(β^j)(|β^j|λσj2)+.

นอกจากนี้ดังนั้นเราจึงมี β^=D1XTYβ^j=XjTYσj2

(|β^j|λσj2)+=1σj2(|XjTY|λ)+

ดังนั้นปรากฎว่าตัวทำนายกลายเป็นศูนย์อย่างแน่นอนเมื่อมันเกิดขึ้นถ้าเมทริกซ์การออกแบบเป็นแบบออโธเทนนิกไม่ใช่ไม่ใช่แค่ฉากฉาก ดังนั้นเราจะเห็นได้ว่าในกรณีนี้ด้วยการเลือกตัวแปรไม่แตกต่างจากแต่ค่าสัมประสิทธิ์ที่เกิดขึ้นจริงจะถูกปรับสัดส่วนตามความแปรปรวนของผู้ทำนายXjXTX=DIXTX=Iβ^λ

ในฐานะที่เป็นบันทึกสุดท้ายเราจะหันแก้ปัญหานี้เป็นหนึ่งที่คุณคล้ายซึ่งหมายความว่าเราต้องคูณโดยบางสิ่งบางอย่างที่จะได้รับ\ ถ้าเราก็มี β^β^λ(β^λ)j0

(β^λ)j=sgn(β^j)(|β^j|λσj2)=β^jsgn(β^j)λσj2

=β^j(1λσj2|β^j|)

ตั้งแต่(ก)a|a|=sgn(a)

สังเกตว่าเมื่อ (β^λ)j=0

|β^j|λσj20|β^j|λσj21λσj2|β^j|1λσj2|β^j|0,

เราเห็นว่าเราสามารถแสดงเป็น β^λ

(β^λ)j=β^j(1λσj2|β^j|)+.

ดังนั้นนี่คือสิ่งที่คุณมี แต่ไม่เหมือนกัน

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