Thực hiện hồi quy sườn: Chọn lưới thông minh cho


17

df(λ)= =ΣTôi= =1pdTôi2dTôi2+λ,
dTôi2XTXdf(λtối đa)0df(λtối thiểu)= =pλtối đa= =ΣTôipdTôi2/cλtối đa»dTôi2clà một hằng số nhỏ và đại diện cho mức độ tự do tối thiểu mà bạn muốn lấy mẫu (ví dụ: c= =0,1 ). Tất nhiên giới hạn thứ hai là λtối thiểu= =0 .

Như tiêu đề cho thấy, sau đó, tôi cần lấy mẫu từ đến trong một số thang đo sao cho \ mathrm {df} (\ lambda) được lấy mẫu (khoảng) 0,1 khoảng từ c đến p ... có cách nào dễ dàng để làm điều này không? Tôi nghĩ rằng việc giải phương trình \ mathrm {df} (\ lambda) cho mỗi \ lambda bằng phương pháp Newton-Raphson, nhưng điều này sẽ thêm quá nhiều lần lặp, đặc biệt khi p lớn. Bất kỳ đề xuất?λ phút λ max d f ( λ ) 0,1 c p d f ( λ ) λ pλλtối thiểuλtối đadf(λ)0,1cpdf(λ)λp


1
Hàm này là hàm hữu tỉ lồi giảm của . Rễ, đặc biệt nếu được chọn trên lưới dyadic, sẽ rất nhanh để tìm thấy. λ0
Đức hồng y

@cardinal, có lẽ bạn đúng. Tuy nhiên, nếu có thể, tôi muốn biết nếu có một số lưới "mặc định". Ví dụ: tôi đã thử lấy lưới bằng cách thực hiện , trong đó và hoạt động khá tốt đối với một số mức độ tự do, nhưng khi , nó đã nổ tung. Điều này khiến tôi tự hỏi rằng có lẽ có một số cách gọn gàng để chọn lưới cho , đó là những gì tôi đang hỏi. Nếu điều này không tồn tại, tôi cũng sẽ rất vui khi biết (vì tôi có thể để phương thức Newton-Rapson vui vẻ trong mã của mình khi biết rằng "không có cách nào tốt hơn tồn tại"). s = ( 1 , 2 , . . . , s m một x ) d f ( λ ) p λλ=log(s)λmax/log(Smmộtx)S= =(1,2,...,Smmộtx)df(λ)pλ
Néstor

Để hiểu rõ hơn về những khó khăn tiềm ẩn mà bạn đang gặp phải, giá trị điển hình và trường hợp xấu nhất của gì? Có bất cứ điều gì bạn biết một tiên nghiệm về phân phối eigenvalue? p
Đức hồng y

@cardinal, các giá trị tiêu biểu của trong ứng dụng của tôi sẽ nằm trong khoảng từ đến , nhưng tôi muốn làm cho nó càng chung chung càng tốt. Về phân phối eigenvalue, thực sự không nhiều. là một ma trận chứa các yếu tố dự đoán trong các cột của nó, không phải lúc nào cũng trực giao. 15 40 Xp1540X
Néstor

1
Newton-Raphson thường thấy rễ đến chính xác trong vòng đến 4 bước cho p = 40 và giá trị nhỏ d f ( λ ) ; hầu như không bao giờ quá 6 bước. Đối với các giá trị lớn hơn, đôi khi cần tới 30 bước. Vì mỗi bước yêu cầu tính toán O ( p ) , nên tổng số lượng tính toán là không quan trọng. Trên thực tế, số lượng các bước dường như không phụ thuộc vào p nếu có xứng bắt đầu được chọn (tôi chọn một trong những bạn sẽ sử dụng nếu tất cả các d i bằng trung bình của chúng). 310-1234p= =40df(λ)630Ôi(p)pdTôi
whuber

Câu trả lời:


19

Đây là một câu trả lời dài . Vì vậy, hãy đưa ra một phiên bản truyện ngắn của nó ở đây.

  • Không có giải pháp đại số tốt cho vấn đề tìm kiếm gốc này, vì vậy chúng tôi cần một thuật toán số.
  • Chức năng có nhiều đặc tính tốt đẹp. Chúng ta có thể khai thác những điều này để tạo ra một phiên bản chuyên biệt của phương pháp Newton cho vấn đề này với sự hội tụ đơn điệu được đảm bảo cho mỗi gốc.df(λ)
  • Ngay cả Rmã chết não cũng không có bất kỳ nỗ lực tối ưu hóa nào cũng có thể tính toán lưới có kích thước 100 với trong vài giây. Mãđược viết cẩn thậnsẽ làm giảm ít nhất 2 đơn hàng độ lớn.p=100000C

Có hai phương án được đưa ra dưới đây để đảm bảo sự hội tụ đơn điệu. Người ta sử dụng các giới hạn được hiển thị bên dưới, dường như giúp lưu một hoặc hai bước Newton.

Ví dụ : và một lưới thống nhất cho các bậc tự do kích thước 100. Các giá trị riêng được phân phối theo Pareto, do đó rất sai lệch. Dưới đây là bảng số lượng các bước Newton để tìm từng gốc.p=100000

# Table of Newton iterations per root.
# Without using lower-bound check.
  1  3  4  5  6 
  1 28 65  5  1 
# Table with lower-bound check.
  1  2  3 
  1 14 85 

Sẽ không có một giải pháp hình thức đóng cho điều này , nói chung, nhưng có rất nhiều cấu trúc hiện tại có thể được sử dụng để tạo ra các giải pháp rất hiệu quả và an toàn sử dụng phương pháp gốc tìm hiểu tiêu chuẩn.

Trước khi đào quá sâu vào sự vật, chúng ta hãy thu thập một số tính chất và hậu quả của hàm

df(λ)=i=1pdi2di2+λ.

Sở hữu 0 : là một hàm hợp lý của λ . (Điều này là rõ ràng từ định nghĩa.) Hậu quả 0 : Không có giải pháp đại số nói chung sẽ tồn tại cho việc tìm kiếm các thư mục gốc d f ( λ ) - y = 0 . Điều này là do có một vấn đề tìm gốc đa thức tương đương bậc p và vì vậy nếu p không quá nhỏ (tức là dưới năm), sẽ không có giải pháp chung nào tồn tại. Vì vậy, chúng ta sẽ cần một phương pháp số.dfλ
df(λ)y=0pp

Sở hữu 1 : Chức năng là lồi và giảm trên bước sóng 0 . (Lấy đạo hàm.) Hậu quả 1 (a) : Thuật toán tìm kiếm gốc của Newton sẽ hành xử rất độc đáo trong tình huống này. Hãy để y là độ mong muốn tự do và λ 0 gốc tương ứng, ví dụ, y = d f ( λ 0 ) . Đặc biệt, nếu chúng ta bắt đầu với bất kỳ giá trị ban đầu λ 1 < λ 0 (vì vậy, d f ( λ 1dfλ0
yλ0y=df(λ0)λ1<λ0 ), sau đó trình tự các bước lặp Newton-bước bước sóng 1 , λ 2 , ... sẽ hội tụđơn điệuvới các giải pháp độc đáo λ 0 . Kết quả 1 (b): Hơn nữa, nếu chúng ta bắt đầu với λ 1 > λ 0 , thìđầu tiênbước sẽ mang lại λ 2λ 0df(λ1)>yλ1,λ2,λ0
λ1>λ0λ2λ0, từ đó nó sẽ tăng đơn điệu đến giải pháp do hậu quả trước đó (xem cảnh báo bên dưới). Theo trực giác, thực tế cuối cùng này xảy ra bởi vì nếu chúng ta bắt đầu ở bên phải của gốc, đạo hàm là "quá" nông do sự lồi lõm của và vì vậy bước Newton đầu tiên sẽ đưa chúng ta đến một nơi nào đó ở bên trái của gốc. NB Từ d fkhông trong lồi chung của tiêu cực λ , điều này cung cấp một lý do mạnh mẽ để thích bắt đầu từ phía bên trái của gốc mong muốn. Mặt khác, chúng ta cần kiểm tra kỹ xem bước Newton không dẫn đến giá trị âm cho gốc ước tính, có thể đặt chúng ta ở đâu đó trong phần không xác định của d f . dfdfλdf
Kết quả 1 (c) : Một khi chúng ta đã tìm thấy các gốc cho một số và sau đó tìm kiếm nguồn gốc từ một số y 2 < y 1 , sử dụng λ 1d f ( λ 1 ) = y 1 như đoán ban đầu của chúng tôi đảm bảo chúng tôi bắt đầu ở bên trái của gốc thứ hai. Vì vậy, sự hội tụ của chúng tôi được đảm bảo là đơn điệu từ đó.y1y2<y1λ1df(λ1)=y1

Thuộc tính 2 : Giới hạn hợp lý tồn tại để cho điểm khởi đầu "an toàn". Sử dụng các đối số lồi và bất đẳng thức của Jensen, chúng ta có các giới hạn sau Hậu quả 2: Điều này cho chúng ta biết rằng gốc rễ bước sóng 0 thỏa mãn d f ( λ 0 ) = y tuân theo 1

p1+λpdTôi-2df(λ)pΣTôidTôi2ΣTôidTôi2+pλ.
λ0df(λ0)=y Vì vậy, đến một hằng số chung, chúng ta đã kẹp gốc giữa các phương tiện số học và số học củad 2 i .
()11pidi2(pyy)λ0(1pidi2)(pyy).
di2

Điều này giả định rằng cho tất cả i . Nếu đây không phải là trường hợp, thì cùng một ràng buộc bằng cách chỉ xem xét dương d i và thay p bằng số dương d i . NB : Vì d f ( 0 ) = p giả sử tất cả d i > 0 , sau đó y ( 0 , p ] , vì vậy các giới hạn luôn luôn không có giá trị (ví dụ: giới hạn dưới luôn luôn không âm).di>0idipdTôidf(0)=pdi>0y(0,p]

Dưới đây là một âm mưu của một ví dụ "điển hình" của với p = 400 . Chúng tôi đã đặt một lưới kích thước 10 cho các bậc tự do. Đây là những đường ngang trong cốt truyện. Các đường màu xanh lá cây dọc tương ứng với giới hạn dưới trong ( ) .df(λ)p=400()

Ví dụ biểu đồ dof với lưới và giới hạn

Một thuật toán và một số ví dụ mã R

Một thuật toán rất hiệu quả cho một mạng lưới các độ mong muốn tự do trong ( 0 , p ] là để sắp xếp chúng theo thứ tự giảm dần và sau đó liên tục tìm ra gốc rễ của mỗi, bằng cách sử dụng gốc trước đó như là điểm khởi đầu cho theo sau. Chúng ta có thể tinh chỉnh điều này hơn nữa bằng cách kiểm tra xem mỗi gốc có lớn hơn giới hạn dưới của gốc tiếp theo hay không, và nếu không, chúng ta có thể bắt đầu lần lặp tiếp theo ở giới hạn dưới thay thế.y1,yn(0,p]

Dưới đây là một số mã ví dụ R, không có nỗ lực nào để tối ưu hóa nó. Như đã thấy bên dưới, nó vẫn còn khá nhanh mặc dù Rlà một cách lịch sự, đó là một cách lịch sự, khủng khiếp, chậm chạp khủng khiếp .

# Newton's step for finding solutions to regularization dof.

dof <- function(lambda, d) { sum(1/(1+lambda / (d[d>0])^2)) }
dof.prime <- function(lambda, d) { -sum(1/(d[d>0]+lambda / d[d>0])^2) }

newton.step <- function(lambda, y, d)
{ lambda - (dof(lambda,d)-y)/dof.prime(lambda,d) }

# Full Newton step; Finds the root of y = dof(lambda, d).
newton <- function(y, d, lambda = NA, tol=1e-10, smart.start=T)
{
    if( is.na(lambda) || smart.start )
        lambda <- max(ifelse(is.na(lambda),0,lambda), (sum(d>0)/y-1)/mean(1/(d[d>0])^2))
    iter <- 0
    yn   <- Inf
    while( abs(y-yn) > tol )
    {
        lambda <- max(0, newton.step(lambda, y, d)) # max = pedantically safe
        yn <- dof(lambda,d)
        iter = iter + 1
    }
    return(list(lambda=lambda, dof=y, iter=iter, err=abs(y-yn)))
}

Dưới đây là thuật toán đầy đủ cuối cùng lấy một lưới các điểm và một vectơ của ( không phải d 2 i !).di di2

newton.grid <- function(ygrid, d, lambda=NA, tol=1e-10, smart.start=TRUE)
{
    p <- sum(d>0)
    if( any(d < 0) || all(d==0) || any(ygrid > p) 
        || any(ygrid <= 0) || (!is.na(lambda) && lambda < 0) )
        stop("Don't try to fool me. That's not nice. Give me valid inputs, please.")
    ygrid <- sort(ygrid, decreasing=TRUE)
    out    <- data.frame()
    lambda <- NA
    for(y in ygrid)
    {
        out <- rbind(out, newton(y,d,lambda, smart.start=smart.start))
        lambda <- out$lambda[nrow(out)]
    }
    out
}

Gọi hàm mẫu

set.seed(17)
p <- 100000
d <- sqrt(sort(exp(rexp(p, 10)),decr=T))
ygrid <- p*(1:100)/100
# Should take ten seconds or so.
out <- newton.grid(ygrid,d)

Yêu thích câu hỏi để tôi có thể tham khảo lại câu trả lời này. Cảm ơn đã đăng bài phân tích chi tiết này, hồng y.
Macro

Câu trả lời tuyệt vời :-), cảm ơn rất nhiều hồng y vì những gợi ý VÀ câu trả lời.
Néstor

1

Ngoài ra, một vài phương thức tồn tại sẽ tính toán đường dẫn chính quy hoàn chỉnh một cách hiệu quả:

  1. GPS
  2. mạng lưới
  3. gcdnet

Trên đây là tất cả các gói R, vì bạn đang sử dụng Python, scikit-learn chứa các triển khai cho sườn, lasso và lưới đàn hồi.


1
Các olschức năng trong R rmsgói có thể sử dụng tối ưu hóa số để tìm ra hình phạt tối ưu sử dụng hiệu quả AIC. Nhưng bạn phải cung cấp hình phạt tối đa không phải lúc nào cũng dễ dàng.
Frank Harrell

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.