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


13

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

minw∈Rd(1n∑i=1n(⟨w,xi⟩−yi)2+2λ||w||1),
∑i=1nxixiT=diag⁡(σ12,...,σd2).

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

ฉันมี:

(XTX)−1=diag⁡(σ1−2,...,σd−2),
ดังนั้นฉันคิดว่าคำตอบคือ :
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||Y−Xβ||22+λ||β||1.

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

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

β^λ=argmin 12(YTY−2YTXβ+βTXTXβ)+λ||β||1

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

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

β^λ=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)+.

นอกจากนี้ดังนั้นเราจึงมี β^=D−1XTY⟹β^j=XjTYσj2

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

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

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

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

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

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

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

|β^j|−λσj2≤0⟺|β^j|≤λσj2⟺1≤λσ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.