(Tại sao) các mô hình quá mức có xu hướng có hệ số lớn?


33

Tôi tưởng tượng rằng một hệ số trên một biến càng lớn thì mô hình càng có khả năng "xoay" theo chiều đó, mang lại cơ hội gia tăng để phù hợp với tiếng ồn. Mặc dù tôi nghĩ rằng tôi đã có ý thức hợp lý về mối quan hệ giữa phương sai trong mô hình và các hệ số lớn, tôi không hiểu rõ lý do tại sao chúng xảy ra trong các mô hình overfit. Có phải không chính xác khi nói rằng chúng là một triệu chứng của quá mức và co rút hệ số là một kỹ thuật để giảm phương sai trong mô hình? Chính quy hóa thông qua co rút hệ số dường như hoạt động theo nguyên tắc các hệ số lớn là kết quả của một mô hình quá mức, nhưng có lẽ tôi hiểu sai động lực đằng sau kỹ thuật này.

Trực giác của tôi rằng các hệ số lớn nói chung là một triệu chứng của việc sử dụng quá mức đến từ ví dụ sau:

Giả sử chúng ta muốn khớp với điểm mà tất cả đều nằm trên trục x. Chúng ta có thể dễ dàng xây dựng một đa thức có các giải pháp là những điểm sau: . Giả sử điểm của chúng tôi là . Kỹ thuật này cho tất cả các hệ số> = 10 (ngoại trừ một hệ số). Khi chúng ta thêm nhiều điểm hơn (và do đó làm tăng mức độ của đa thức), độ lớn của các hệ số này sẽ tăng lên nhanh chóng.f ( x ) = ( x - x 1 ) ( x - x 2 ) . . . . ( x - x n - 1 ) ( x - x n ) x = 1 , 2 , 3 , 4nf(x)=(xx1)(xx2)....(xxn1)(xxn)x=1,2,3,4

Ví dụ này là cách tôi hiện đang kết nối kích thước của các hệ số mô hình với "độ phức tạp" của các mô hình được tạo, nhưng tôi lo ngại rằng trường hợp này là vô trùng để thực sự là biểu hiện của hành vi trong thế giới thực. Tôi đã cố tình xây dựng một mô hình quá mức (OLS đa thức 10 độ phù hợp với dữ liệu được tạo từ mô hình lấy mẫu bậc hai) và rất ngạc nhiên khi thấy hầu hết các hệ số nhỏ trong mô hình của tôi:

set.seed(123)
xv = seq(-5,15,length.out=1e4)
x=sample(xv,20)
gen=function(v){v^2 + 7*rnorm(length(v))}
y=gen(x)
df = data.frame(x,y)

model = lm(y~poly(x,10,raw=T), data=df)
summary(abs(model$coefficients))
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# 0.000001 0.003666 0.172400 1.469000 1.776000 5.957000


data.frame(sort(abs(model$coefficients)))
#                                   model.coefficients
# poly(x, 10, raw = T)10                  7.118668e-07
# poly(x, 10, raw = T)9                   3.816941e-05
# poly(x, 10, raw = T)8                   7.675023e-04
# poly(x, 10, raw = T)7                   6.565424e-03
# poly(x, 10, raw = T)6                   1.070573e-02
# poly(x, 10, raw = T)5                   1.723969e-01
# poly(x, 10, raw = T)3                   6.341401e-01
# poly(x, 10, raw = T)4                   8.007111e-01
# poly(x, 10, raw = T)1                   2.751109e+00
# poly(x, 10, raw = T)2                   5.830923e+00
# (Intercept)                             5.956870e+00

Có thể điểm trừ của ví dụ này là hai phần ba hệ số nhỏ hơn 1 và so với các hệ số khác , có ba hệ số lớn bất thường (và các biến liên quan đến các hệ số này cũng xảy ra gần nhất liên quan đến mô hình lấy mẫu thật).

Có phải (L2) chính quy chỉ là một cơ chế để làm giảm phương sai trong mô hình và do đó "làm mịn" đường cong để phù hợp hơn với dữ liệu trong tương lai, hay nó đang lợi dụng một heuristic xuất phát từ quan sát rằng các mô hình bị quá mức có xu hướng thể hiện các hệ số lớn? Đây có phải là một tuyên bố chính xác rằng các mô hình quá mức có xu hướng thể hiện các hệ số lớn? Nếu vậy, có lẽ ai đó có thể giải thích cơ chế đằng sau hiện tượng này một chút và / hoặc hướng tôi đến một số tài liệu?


4
Chính xác thì bạn có ý nghĩa gì bởi một hệ số "lớn"? Xét cho cùng, nếu chúng ta chỉ thay đổi các đơn vị mà chúng ta biểu thị biến phụ thuộc (chẳng hạn như từ Parsecs sang femtometer), chúng ta có thể làm cho các hệ số lớn hoặc nhỏ tùy ý về giá trị.
whuber

1
Tôi không có câu trả lời tốt cho điều đó. Sự hiểu biết của tôi là các hệ số tấn công "lớn" là một động lực heuristic đằng sau việc chuẩn hóa L2. Nhưng về mặt tổng hợp, việc tăng cường độ của các hệ số cũng đòi hỏi phải thay đổi hằng số chính quy để bù cho độ lớn khác nhau trong mô hình, phải không? Tôi không nghĩ khái niệm "lớn" ở đây cũng mơ hồ như bạn đang làm, dường như ngay cả khi tôi không thể mô tả nó rất tốt.
David Marx

@DavidMarx: Tôi không nghĩ rằng chính quy hóa L2 đi sau các hệ số "lớn", phải không? Thay vào đó, nó có xu hướng đẩy các hệ số có thể không tương đối lớn về 0, theo nghĩa buộc bạn phải lựa chọn thay vì tìm một sự thỏa hiệp giữa hai điều này.
Wayne

@wayne ah, tôi nghĩ rằng tôi đã có nó ngược. Tôi đã nghĩ rằng nó thu nhỏ các hệ số lớn hơn hoặc thu hẹp tất cả các hệ số theo tỷ lệ. Điều đó sẽ có ý nghĩa hơn nếu chính quy L2 đẩy các biến có hệ số nhỏ hơn ra khỏi mô hình.
David Marx

1
Sau 8 lần chỉnh sửa, tôi nghĩ mình đã có câu trả lời. Sheesh.
Hồng Ooi

Câu trả lời:


15

Trong bối cảnh chính quy, một hệ số "lớn" có nghĩa là cường độ của ước tính lớn hơn mức có thể, nếu một đặc tả mô hình cố định đã được sử dụng. Đó là tác động của việc thu được không chỉ các ước tính, mà cả đặc điểm kỹ thuật mô hình, từ dữ liệu.

Xem xét những gì một thủ tục như hồi quy từng bước sẽ làm cho một biến nhất định. Nếu ước tính hệ số của nó nhỏ so với sai số chuẩn, nó sẽ bị loại khỏi mô hình. Điều này có thể là do giá trị thực sự nhỏ, hoặc đơn giản là do lỗi ngẫu nhiên (hoặc kết hợp cả hai). Nếu nó bị rơi, thì chúng ta không còn chú ý đến nó nữa. Mặt khác, nếu ước tính lớn so với sai số chuẩn của nó, nó sẽ được giữ lại. Lưu ý sự mất cân bằng: mô hình cuối cùng của chúng tôi sẽ từ chối một biến khi ước tính hệ số nhỏ, nhưng chúng tôi sẽ giữ nó khi ước tính lớn. Do đó chúng ta có khả năng đánh giá quá cao giá trị của nó.

Nói cách khác, những gì quá mức có nghĩa là bạn đang nói quá về tác động của một bộ dự đoán nhất định đối với phản ứng. Nhưng cách duy nhất mà bạn có thể phóng đại tác động là nếu các hệ số ước tính quá lớn (và ngược lại, ước tính cho các yếu tố dự đoán bị loại trừ của bạn quá nhỏ).

stepβ3β10

Đây là một ví dụ về những gì tôi đang nói về.

repeat.exp <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(step(lm(y ~ x1, data=d), y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10, trace=0))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z <- repeat.exp(M=1000)

# some time later...
rowMeans(abs(z), na.rm=TRUE)

(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    3.162100    6.533642    3.108974    3.204341    3.131208    3.118276    3.217231    3.293691    3.149520    3.073062 

β3β10

repeat.exp.base <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(lm(y ~ ., data=d))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z2 <- repeat.exp.base(M=1000)

rowMeans(abs(z2))
(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    1.676066    6.400629    1.589061    1.648441    1.584861    1.611819    1.607720    1.656267    1.583362    1.556168 

β1β2


Tôi hơi bối rối bởi ví dụ sửa đổi của bạn. Bạn nói rằng "Bạn sẽ thấy rằng tất cả các ước tính của các hệ số β3 đến β10 là quá lớn về mặt hệ thống, khi so sánh với việc không sử dụng lựa chọn biến", nhưng có vẻ như bạn có giá trị lớn hơn trong thử nghiệm đầu tiên (với step) so với trong thử nghiệm thứ hai của bạn (Giá trị phù hợp "mù quáng"). Điều này có trái ngược với những gì bạn đang đề xuất nên xảy ra không?
David Marx

Ngoài ra, bạn và những người khác ở đây đã đề nghị tôi nên tiêu chuẩn hóa các biến trong ví dụ của mình. Tôi thấy lý do, nhưng tôi không biết cách nào tốt để làm điều đó. Tôi có nên tăng cường dữ liệu mẫu của mình để bao gồm các cột cho mỗi sức mạnh của X và chuẩn hóa các giá trị đó không? Hoặc có cách nào để tôi có thể tiêu chuẩn hóa các biến trực tiếp trong công thức mô hình của mình nơi tôi gọi poly(tôi đoán là không)?
David Marx

? Bạn nhận được độ lệch tuyệt đối lớn hơn khi sử dụng từng bước, so với việc không sử dụng từng bước. Không chắc chắn những gì bạn đang hỏi. Đối với tiêu chuẩn hóa: không cần thiết nếu bạn làm như tôi đã đăng, tức là so sánh giữa cách tiếp cận từng bước và không theo từng bước. Mỗi biến đang được so sánh từ điều trị này sang điều trị khác, thay vì các biến khác.
Hồng Ooi

6

Một câu trả lời rất đơn giản mà không cần nhìn vào chi tiết của bạn: Khi bạn quá mức, các công cụ ước tính tham số có xu hướng nhận được phương sai lớn và với phương sai lớn, giá trị lớn là điều bạn nên mong đợi!


Nếu tôi hiểu bạn một cách chính xác, điều này sẽ giải thích tại sao mô hình sẽ dự đoán các giá trị "lớn", chứ không phải tại sao mô hình sẽ bao gồm các hệ số "lớn".
David Marx

Không, đó là sai! Ít nhất một số công cụ ước tính hệ số riêng lẻ sẽ có phương sai lớn, vì vậy giá trị ước tính của các hệ số đó sẽ có xu hướng lớn. (của chúng tôi, ngay cả khi quá mức, một số hệ số có thể ổn định, nhưng không phải tất cả). Ngoài ra, để giữ tính không thiên vị của dự đoán, sẽ có xu hướng một số hiệp phương sai lớn giữa các ước lượng hệ số độc lập.
kjetil b halvorsen

1
Điều này không trả lời đầy đủ câu hỏi, mặc dù. Nếu đó chỉ là một vấn đề về phương sai lớn, thì bạn sẽ nhận được các ước tính nhỏ thường xuyên như các ước tính lớn (nói một cách không chính thức). Vấn đề là khi đó chúng ta giả sử các ước tính nhỏ (liên quan đến lỗi std của chúng) là "không quan trọng" và loại bỏ các biến đó khỏi mô hình. Kết quả là, ước tính duy nhất còn lại sẽ là những ước tính lớn.
Hồng Ooi

0

David. Tôi nghĩ vấn đề với ví dụ của bạn là bạn chưa bình thường hóa dữ liệu của mình (ví dụ X ^ 10 >> X.

Vì vậy, david đúng là nó thu nhỏ các hệ số lớn hơn nhiều (vì vậy bạn có thể kết thúc với rất nhiều hệ số nhỏ, trong khi chính quy L1 có thể cung cấp cho bạn một số lớn và số còn lại bằng 0)

vì vậy về cơ bản, nó gói gọn rằng những thay đổi nhỏ sẽ có tác động nhỏ (và tất nhiên chúng ta quay lại vấn đề nhỏ như thế nào - bình thường hóa dữ liệu của bạn, v.v.). Nhưng điều quan trọng là ở các chiều cao hơn, trong đó tương quan xuất hiện: hãy tưởng tượng bạn có hai biến x, y có tương quan cao (cả hai được chuẩn hóa thành phương sai 1) thì sự khác biệt của chúng sẽ là nhỏ = "nhiễu" - do đó sẽ phạt các trọng số lớn ngăn bạn phù hợp với tiếng ồn này (và nhận được hệ số rất lớn gần như hủy bỏ cho y và x).

Ví dụ vẫn giữ cho bất kỳ mối quan hệ tuyến tính (y = mx)

tra cứu hồi quy sườn núi


1
david tại sao bạn không làm lại ví dụ bình thường hóa tất cả các biến x, x ^ 2, ..., x ^ n thành số không trung bình và độ lệch chuẩn 1, và sau đó xem kết quả bạn nhận được ... không có gì đáng ngạc nhiên khi bạn hệ số nhỏ khi các biến đầu vào của bạn lớn
seanv507

0

demo quá mức

Hình ảnh này là từ ghi chú của tôi về khóa học DL của Andrew Ng, vui lòng cho tôi biết nếu bạn có câu hỏi


1
Bạn có thể giải thích lý do tại sao bạn nghĩ lưu ý này về chính quy hóa mạng thần kinh trả lời câu hỏi về kích thước hệ số và quá mức?
whuber

cả 3 đều được liên kết quá mức chỉ là những gì chính quy cố gắng ngăn chặn và nó cố gắng bằng cách xử phạt hệ số cao vì lý do trên
Pradi KL
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.