(Neden) Fazla donanımlı modellerin büyük katsayıları olma eğilimindedir?


33

Değişken üzerindeki bir katsayı ne kadar büyükse, modelin bu boyutta "sallanma" yeteneğinin o kadar fazla olması ve gürültüye uyması için daha fazla fırsat sağlanması gerektiğini hayal ediyorum. Modeldeki varyans ve büyük katsayılar arasındaki ilişki konusunda makul bir anlayışa sahip olduğumu düşünmeme rağmen , kıyafet modellerinde neden ortaya çıktıkları konusunda hiçbir fikrim yok. Bunların aşırı uyuşma belirtisi olduğunu ve yanlış katlanma büzülmesinin bir model olduğunu söylemek yanlış mıdır? Katsayılı büzülmeyle yapılan düzenlileşme, büyük katsayıların çok abartılı bir modelin sonucu olduğu prensibiyle çalışıyor gibi görünmektedir, ancak belki de tekniğin arkasındaki motivasyonu yanlış yorumluyorum.

Büyük katsayıların genellikle fazla uydurma belirtisi olduğuna dair sezgilerim şu örnekten geliyor:

Diyelim ki x ekseni üzerinde oturan noktalarına uymak istedik . Çözümleri şu noktalar olan bir polinomu kolayca yapabiliriz: f ( x ) = ( x - x 1 ) ( x - x 2 ) . . . . ( X - X , n - 1 ) ( X - X , n ) . Diyelim ki noktalarımız x = 1 , 2 , 3 , 4nf(x)=(x-x1)(x-x2)....(x-xn-1)(x-xn)x=1,2,3,4. Bu teknik tüm katsayıları> = 10 verir (bir katsayı hariç). Daha fazla puan ekledikçe (ve böylece polinomun derecesini arttırdıkça) bu katsayıların büyüklüğü hızla artacaktır.

Bu örnek şu anda model katsayılarının boyutunu oluşturulan modellerin "karmaşıklığı" ile nasıl ilişkilendirdiğimi gösteriyor, ancak bu durumun gerçek dünya davranışının göstergesi olacağı için steril olması konusunda endişeliyim. Kasıtlı olarak bir aşırı model oluşturdum (ikinci dereceden bir örnekleme modelinden elde edilen verilere uygun 10. derece polinom OLS) ve modelimde çoğunlukla küçük katsayıları gördüğümde şaşırdım:

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

Belki bu örnekten elde edilen sonuç, katsayıların üçte ikisinin 1'den az olması ve diğer katsayılara göre , alışılmadık derecede büyük olan üç katsayı olmasıdır (ve bu katsayılarla ilişkili değişkenler de en yakın olanlardır) gerçek örnekleme modeli ile ilgili).

(L2) normalizasyonu, sadece bir modeldeki varyansı azaltan bir mekanizma mıdır ve bu nedenle gelecekteki verilere daha iyi uyması için eğriyi "yumuşaklaştırır" mı, yoksa aşırı beslemeli modellerin büyük katsayılar sergileme eğiliminde olduğu gözleminden elde edilen bir buluşsal yöntemden mi yararlanıyor? Takılan modellerin büyük katsayılar sergileme eğiliminde olduğu doğru bir ifade midir? Eğer öyleyse, biri fenomen arkasındaki mekanizmayı biraz açıklayabilir ve / veya beni bazı literatüre yönlendirebilir mi?


4
"Büyük" bir katsayı ile tam olarak ne kastediyorsunuz? Ne de olsa, sadece bağımlı değişkeni ifade ettiğimiz birimleri değiştirirsek (örneğin, parseklerden femtometrelere), katsayıları keyfi olarak büyük veya küçük olarak değerlendirebiliriz.
whuber

1
Bunun için iyi bir cevabım yok. Anladığım kadarıyla "büyük" katsayılara saldırmak, L2 düzenlileşmesinin ardında motive edici bir sezgiseldi. Fakat katsayıların büyüklüğünün sentetik olarak arttırılması, şimdi modeldeki farklı büyüklükleri telafi etmek için düzenlileştirme sabitinin de değiştirilmesini gerektiriyor, değil mi? Buradaki “büyük” kavramının, göründüğü kadar belirsiz olduğunu düşünmüyorum, çok iyi karakterize edemesem bile.
David Marx,

@DavidMarx: L2-normalizasyonun "büyük" katsayıların peşinden gittiğini sanmıyorum, değil mi? Aksine, muhtemelen ikisi arasında bir uzlaşma bulmak yerine sizi seçmeye zorlayan bir anlamda muhtemelen sıfıra nispeten büyük olmayan katsayıları zorlama eğilimindedir.
Wayne,

@wayne ah, sanırım geriye doğru yaptım. Daha büyük katsayıları daralttığını veya tüm katsayıları orantılı olarak daralttığını düşünmüştüm. L2-normalizasyonu değişkenleri modelden daha küçük katsayılı değerlere iterse daha anlamlı olur.
David Marx,

1
8 düzenlemeden sonra, cevabımın aşağı olduğunu düşünüyorum. Sheesh.
Hong Ooi

Yanıtlar:


15

Düzenleme bağlamında "büyük" bir katsayı, sabit bir model belirtimi kullanılmışsa tahminin büyüklüğünün olduğundan daha büyük olduğu anlamına gelir . Verilerden sadece tahminleri değil, model spesifikasyonunu elde etmenin de etkisi var.

Belirli bir değişken için kademeli regresyon gibi bir prosedürün ne yapacağını düşünün. Katsayısının tahmini, standart hataya göre küçükse, modelden düşecektir. Bunun nedeni gerçek değerin gerçekten küçük olması veya basit bir şekilde rastgele hata (veya ikisinin bir birleşimi) olmasıdır. Eğer düşerse, o zaman artık buna dikkat etmiyoruz. Diğer yandan, tahmin standart hataya göre büyükse, korunur. Dengesizliğin farkına varın: son modelimiz katsayı tahmini küçük olduğunda bir değişkeni reddeder, ancak tahmin büyük olduğunda onu tutacağız. Dolayısıyla değerini abartmamız muhtemel.

Başka bir ifadeyle, aşırı yüklenmenin ne anlama geldiği, verilen bir kestirici grubunun yanıt üzerindeki etkisini abartmak anlamına gelir. Ancak etkiyi abartmanın tek yolu, tahmin edilen katsayıların çok büyük olması (ve bunun dışında, hariç tutulan tahmincilerinizin tahminlerinin çok küçük olması).

Yapmanız gereken şey, denemenize değişken bir seçim prosedürünü dahil etmektir, örneğin; stepβ3β10

İşte neden bahsettiğimin bir örneği.

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 

Değişken seçimi kullanmadığınızda ve bununla ilgili her şeyi kör bir şekilde sığdırdığınızda ne olacağına bunun aksine. Tahminlerinde hala bazı hatalar olsa daβ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 

Ayrıca, hem L1 hem de L2 düzenlenmesi, tüm değişkenlerinizin ve dolayısıyla katsayılarınızın aynı ölçüm birimlerinde olduğu, yani cinsinden birim değişikliğinde olduğu varsayımını yapar.β1β2


Değiştirilmiş örneğinizle biraz kafam karıştı. “Β3 ile β10 arasındaki katsayıların tüm tahminlerinin, değişken seçim kullanmamaya kıyasla sistematik olarak çok büyük olduğunu bulmalısınız” diyorsunuz, ancak ilk denemenizde (ile step) ikinci denemenizden daha büyük değerler elde ettiğiniz görülüyor . ("kör olarak" uygun değerler). Olması gerektiğini söylediğinin aksine bu değil mi?
David Marx,

Ayrıca, siz ve buradaki diğerleri örneğime göre değişkenleri standartlaştırmamı önerdiniz. Sebep görüyorum ama bunu yapmanın iyi bir yolunu bilmiyorum. Örnek verilerimi, her bir X gücü için sütunlar içermeli ve bu değerleri standartlaştırmalı mıyım? Yoksa değişkenleri doğrudan standartlaştırabildiğim bir model var polymı?
David Marx,

? Kademeli olarak kullanırken kestirme şekilde daha büyük mutlak sapmalar elde edersiniz. Ne istediğinden emin değilim. Standardizasyon gelince: Yaptığım gibi yaparsanız, yani adım adım ve adım adım olmayan yaklaşım arasında bir karşılaştırma yapmak gereksizdir. Her değişken, diğer değişkenlerle değil, bir tedaviden diğerine karşılaştırılır.
Hong Ooi

6

Ayrıntılarınıza bakmadan çok basit bir cevap: Çok fazla uyuşmadığınızda, parametre tahmin edicileri büyük değişiklikler elde etme eğilimindedir ve büyük değişkenler ile büyük değerler beklediğiniz gibi olur!


Sizi doğru anlarsam, bu modelin neden "büyük" katsayılardan oluşacağını değil, "büyük" değerleri tahmin edeceğini açıklar.
David Marx,

Hayır, bu yanlış! Bireysel katsayı tahmin edicilerinin en azından bir kısmının büyük farklılıkları olacaktır, bu nedenle bu katsayıların tahmini değerleri büyük olma eğilimindedir. (kendimizce, fazla uyurken bile, bazı katsayılar sabit olabilir, ama hepsi değil). Ayrıca, tahminin yansızlık özelliğini korumak için, bağımsız katsayı tahmin ediciler arasında büyük negatif kovaryanslar olma eğiliminde olacaktır.
kjetil b halvorsen

1
Yine de, bu soruya tam olarak cevap vermiyor. Eğer bu sadece büyük bir varyans sorunuysa, o zaman ne kadar sık ​​sık küçük tahminler alırsınız (gayriresmi). Sorun, daha sonra küçük tahminlerin (std hatalarına göre) "önemsiz" olduğunu varsaymamız ve bu değişkenleri modelden düşürmemizdir. Sonuç olarak, geriye kalan tek tahmin büyük olacaktır.
Hong Ooi

0

David. Bence örneğinizle ilgili sorun, verilerinizi normalleştirmediniz (örneğin, X ^ 10 >> X.

Bu yüzden david daha büyük katsayıları daralttığı için doğru (L1 normalizasyonu size bir tane büyük ve sıfır geri kalanı verirken, çok sayıda küçük katsayıya sahip olabilirsiniz)

temelde, küçük değişikliklerin küçük etkilere sahip olması gerektiği (ve elbette ne kadar küçük olduğu konusuna geri dönüyoruz - verilerinizi normalleştirmek vb.). Ancak, önemli olan, korelasyonun devreye girdiği yüksek boyutlardadır: iki değişkenli x, y'nin yüksek derecede korelasyonlu olduğunu (her ikisi de varyans 1'e göre normalize edilmiştir) hayal edin, sonra farkları küçük olacaktır = "gürültü" - bu nedenle ağırlıkları cezalandırmak bu gürültüye uymanızı önler (ve y ve x için neredeyse iptal eden katsayıları çok büyük hale getirir).

Örnek, herhangi bir doğrusal ilişki için hala geçerlidir (y = mx)

ridge regresyonuna bakmak


1
david, neden x, x ^ 2, ..., x ^ n tüm değişkenlerini sıfır ortalama ve standart sapma 1 normalleştirme örneğini tekrar yapmıyorsunuz ve sonra elde ettiğiniz sonuçları görüyorsunuz ... giriş değişkenleriniz büyük olduğunda katsayılar küçüktür
seanv507

0

abartılı demo

Bu resim Andrew Ng'in DL kursu notundan, lütfen sorunuz varsa bana bildirin


1
Yapay sinir ağlarının düzenlenmesi konusundaki bu notun neden katsayı boyutları ve fazla uydurma hakkındaki soruya cevap verdiğini açıklayabilir misiniz?
whuber

Üçü birbiriyle bağlantılı, sadece normalizasyonun engellemeye çalıştığı şey ve yukarıdaki nedenden ötürü yüksek katsayıyı cezalandırmaya çalışıyor
Pradi KL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.