(เพราะเหตุใด) โมเดลที่ติดตั้งมากเกินไปมักจะมีค่าสัมประสิทธิ์จำนวนมากหรือไม่


33

ฉันจินตนาการว่าสัมประสิทธิ์ของตัวแปรที่ใหญ่กว่าคือยิ่งความสามารถในการรุ่นนั้นต้อง "แกว่ง" ในมิตินั้นให้โอกาสเพิ่มขึ้นเพื่อให้พอดีกับเสียง แม้ว่าฉันคิดว่าฉันมีความรู้สึกที่สมเหตุสมผลของความสัมพันธ์ระหว่างความแปรปรวนในแบบจำลองและค่าสัมประสิทธิ์ขนาดใหญ่ แต่ฉันไม่มีความรู้สึกที่ดีเท่ากับว่าทำไมพวกเขาถึงเกิดขึ้นในแบบจำลองที่พอดี มันไม่ถูกต้องหรือไม่ที่จะบอกว่าพวกเขาเป็นอาการของการบรรจุเกินและการหดตัวของสัมประสิทธิ์เป็นเทคนิคที่ใช้ในการลดความแปรปรวนในแบบจำลองหรือไม่? การทำให้เป็นมาตรฐานผ่านการหดตัวของสัมประสิทธิ์ดูเหมือนว่าจะทำงานบนหลักการที่ว่าค่าสัมประสิทธิ์ขนาดใหญ่เป็นผลมาจากตัวแบบที่มีการ overfitted แต่บางทีฉันอาจตีความแรงจูงใจที่อยู่เบื้องหลังเทคนิค

สัญชาตญาณของฉันที่ค่าสัมประสิทธิ์ขนาดใหญ่มักจะมีอาการของการสะสมมากเกินไปมาจากตัวอย่างต่อไปนี้:

สมมติว่าเราต้องการให้พอดีกับจุดที่ทุกคนนั่งอยู่บนแกน x เราสามารถสร้างพหุนามที่มีการแก้ปัญหาเป็นจุดเหล่านี้:(x-x_n) สมมติว่าจุดที่เราอยู่ที่xเทคนิคนี้ให้ค่าสัมประสิทธิ์ทั้งหมด> = 10 (ยกเว้นหนึ่งค่าสัมประสิทธิ์) เมื่อเราเพิ่มคะแนนมากขึ้น (และเพิ่มระดับพหุนาม) ขนาดของสัมประสิทธิ์เหล่านี้จะเพิ่มขึ้นอย่างรวดเร็ว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

ตัวอย่างนี้เป็นวิธีที่ฉันกำลังเชื่อมต่อขนาดของค่าสัมประสิทธิ์ของแบบจำลองกับ "ความซับซ้อน" ของแบบจำลองที่สร้างขึ้น แต่ฉันกังวลว่ากรณีนี้คือการทำให้ปราศจากเชื้อเพื่อบ่งบอกพฤติกรรมที่แท้จริงของโลก ฉันจงใจสร้างแบบจำลองที่มีการติดตั้งมากเกินไป (พหุนาม OLS ระดับ 10 พอดีกับข้อมูลที่สร้างจากแบบจำลองการสุ่มกำลังสอง) และรู้สึกประหลาดใจที่เห็นสัมประสิทธิ์ขนาดเล็กส่วนใหญ่ในแบบจำลองของฉัน:

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

บางทีสิ่งที่นำออกไปจากตัวอย่างนี้คือสองในสามของสัมประสิทธิ์น้อยกว่า 1 และสัมพันธ์กับสัมประสิทธิ์อื่น ๆมีสัมประสิทธิ์สามตัวที่มีขนาดใหญ่ผิดปกติ (และตัวแปรที่เกี่ยวข้องกับสัมประสิทธิ์เหล่านี้ก็ใกล้เคียงที่สุด เกี่ยวข้องกับรูปแบบการสุ่มตัวอย่างที่แท้จริง)

การทำให้เป็นมาตรฐาน (L2) เป็นเพียงกลไกในการลดความแปรปรวนในแบบจำลองและทำให้ "เส้นโค้ง" เรียบเนียนขึ้นเพื่อให้เหมาะสมกับข้อมูลในอนาคตมากขึ้นหรือเป็นการใช้ประโยชน์จากฮิวริสติกที่ได้มาจากการสังเกตว่า มันเป็นแถลงการณ์ที่ถูกต้องหรือไม่ว่าโมเดลที่ติดตั้งมากเกินไปมักจะมีค่าสัมประสิทธิ์สูง ถ้าเป็นเช่นนั้นทุกคนสามารถอธิบายกลไกเบื้องหลังปรากฏการณ์เล็กน้อยและ / หรือชี้นำฉันไปยังวรรณกรรมบางเล่มได้หรือไม่?


4
คุณหมายถึงอะไรโดยค่าสัมประสิทธิ์ "ใหญ่"? ท้ายที่สุดถ้าเราเพียงแค่เปลี่ยนหน่วยที่เราแสดงตัวแปรตาม (เช่นจาก parsecs เป็น femtometers) เราสามารถทำให้ค่าสัมประสิทธิ์มีขนาดใหญ่หรือเล็กตามอำเภอใจ
whuber

1
ฉันไม่มีคำตอบที่ดีสำหรับสิ่งนั้น ความเข้าใจของฉันก็คือการโจมตีสัมประสิทธิ์ "ใหญ่" นั้นเป็นแรงจูงใจในการเรียนรู้เบื้องหลังการทำงานของ L2 อย่างสม่ำเสมอ แต่การเพิ่มขนาดสัมพัทธภาพสังเคราะห์ต้องเปลี่ยนค่าคงที่การทำให้เป็นมาตรฐานเพื่อชดเชยขนาดที่แตกต่างกันของแบบจำลองในตอนนี้ใช่ไหม? ฉันไม่คิดว่าความคิดของ "ใหญ่" ที่นี่มีความคลุมเครือเหมือนกับที่คุณทำให้มันดูแม้ว่าฉันจะไม่สามารถอธิบายได้ดี
David Marx

@DavidMarx: ฉันไม่คิดว่า L2-normalization ไปหลังจากสัมประสิทธิ์ "ใหญ่" ใช่ไหม? ค่อนข้างมีแนวโน้มที่จะผลักดันค่าสัมประสิทธิ์ที่อาจไม่ได้ค่อนข้างใหญ่ถึงศูนย์ในแง่ที่บังคับให้คุณเลือกมากกว่าที่จะหาการประนีประนอมระหว่างทั้งสอง
Wayne

@ เวย์อาฉันคิดว่าฉันมีมันย้อนหลัง ฉันคิดว่ามันหดค่าสัมประสิทธิ์ที่ใหญ่ขึ้นหรือหดค่าสัมประสิทธิ์ทั้งหมดตามสัดส่วน ซึ่งจะสมเหตุสมผลมากกว่าหากการทำให้เป็นมาตรฐานของ L2 ผลักตัวแปรที่มีค่าสัมประสิทธิ์น้อยลงจากตัวแบบ
David Marx

1
หลังจากการแก้ไข 8 ครั้งฉันคิดว่าฉันมีคำตอบ Sheesh
Hong Ooi

คำตอบ:


15

ในบริบทการทำให้เป็นมาตรฐานสัมประสิทธิ์ "ใหญ่" หมายความว่าขนาดของการประเมินนั้นใหญ่กว่าที่ควรจะเป็นหากมีการใช้แบบจำลองที่แน่นอน มันเป็นผลกระทบของการได้รับไม่ใช่แค่ข้อมูลประมาณการ แต่ยังรวมถึงข้อมูลจำเพาะของโมเดลด้วยจากข้อมูล

พิจารณาว่าขั้นตอนเช่นการถดถอยแบบขั้นตอนจะทำอะไรกับตัวแปรที่กำหนด หากการประมาณค่าสัมประสิทธิ์มีค่าน้อยเมื่อเทียบกับข้อผิดพลาดมาตรฐานมันจะลดลงจากตัวแบบ อาจเป็นเพราะค่าจริงมีขนาดเล็กหรือเพียงเพราะข้อผิดพลาดแบบสุ่ม (หรือการรวมกันของทั้งสอง) ถ้ามันตกเราจะไม่สนใจอีกต่อไป ในทางกลับกันหากการประมาณการมีขนาดใหญ่เมื่อเทียบกับข้อผิดพลาดมาตรฐานการประมาณการจะถูกเก็บไว้ สังเกตความไม่สมดุล: ตัวแบบสุดท้ายของเราจะปฏิเสธตัวแปรเมื่อค่าประมาณสัมประสิทธิ์มีขนาดเล็ก แต่เราจะเก็บไว้เมื่อค่าประมาณมีขนาดใหญ่ ดังนั้นเราน่าจะประเมินค่าสูงไป

อีกวิธีหนึ่งคือความหมายที่เกินกำลังของคุณคือการพูดเกินจริงถึงผลกระทบของชุดพยากรณ์ที่ให้มากับการตอบสนอง แต่วิธีเดียวที่คุณสามารถพูดเกินจริงถึงผลกระทบคือถ้าค่าสัมประสิทธิ์โดยประมาณใหญ่เกินไป (และในทางกลับกันค่าประมาณสำหรับตัวทำนายที่ยกเว้นของคุณนั้นเล็กเกินไป)

stepβ3β10

นี่คือตัวอย่างของสิ่งที่ฉันพูดถึง

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


ฉันสับสนเล็กน้อยจากตัวอย่างที่คุณแก้ไข คุณพูดว่า "คุณควรพบว่าค่าประมาณของสัมประสิทธิ์ to3 ถึงβ10นั้นมีขนาดใหญ่เกินไปอย่างเป็นระบบเมื่อเทียบกับที่ไม่ได้ใช้การเลือกตัวแปร" แต่ดูเหมือนว่าคุณมีค่ามากกว่าในการทดสอบครั้งแรกของคุณ (กับstep) ในการทดสอบครั้งที่สอง (ค่าที่เหมาะสม "blindly") สิ่งนี้ขัดแย้งกับสิ่งที่คุณแนะนำไม่ควรเกิดขึ้นหรือไม่
David Marx

นอกจากนี้คุณและคนอื่น ๆ ที่นี่แนะนำว่าฉันควรสร้างมาตรฐานตัวแปรในตัวอย่างของฉัน ฉันเห็นเหตุผล แต่ไม่รู้วิธีที่ดีในการทำเช่นนั้น ฉันควรปรับปรุงข้อมูลตัวอย่างของฉันเพื่อรวมคอลัมน์สำหรับแต่ละกำลังของ X และสร้างมาตรฐานให้กับค่าเหล่านั้นหรือไม่ หรือมีวิธีที่ฉันสามารถสร้างมาตรฐานตัวแปรโดยตรงในสูตรโมเดลของฉันที่ฉันเรียกpoly(ฉันเดาไม่ได้)?
David Marx

? คุณจะได้รับส่วนเบี่ยงเบนสัมบูรณ์ที่มากขึ้นเมื่อใช้แบบขั้นตอนเปรียบเทียบกับการไม่ใช้แบบขั้นตอน ไม่แน่ใจในสิ่งที่คุณถาม สำหรับมาตรฐาน: มันไม่จำเป็นถ้าคุณทำตามที่ฉันโพสต์นั่นคือการเปรียบเทียบระหว่างวิธีการแบบเป็นขั้นตอนและไม่เป็นขั้นตอน แต่ละตัวแปรจะถูกเปรียบเทียบจากการรักษาหนึ่งไปยังอีกการรักษามากกว่าที่จะเป็นตัวแปรอื่น ๆ
Hong Ooi

6

หนึ่งคำตอบที่ง่ายมากโดยไม่ดูรายละเอียดของคุณ: เมื่อคุณ overfitting ตัวประมาณค่าพารามิเตอร์มักจะมีความแปรปรวนจำนวนมากและค่าความแปรปรวนขนาดใหญ่นั้นเป็นสิ่งที่คุณควรคาดหวัง!


ถ้าฉันเข้าใจคุณถูกต้องสิ่งนี้จะอธิบายได้ว่าทำไมแบบจำลองนี้จึงทำนายค่า "ใหญ่" ไม่ใช่สาเหตุที่แบบจำลองนั้นประกอบด้วยค่าสัมประสิทธิ์ "ใหญ่"
David Marx

ไม่ผิด! อย่างน้อยที่สุดตัวประมาณค่าสัมประสิทธิ์แต่ละตัวจะมีค่าความแปรปรวนจำนวนมากดังนั้นค่าประมาณของค่าสัมประสิทธิ์เหล่านั้นจะมีขนาดใหญ่ (จากค่าของเราแม้ว่าจะมีค่าสูงเกินไปค่าสัมประสิทธิ์บางอย่างอาจมีความเสถียร แต่ไม่ใช่ทั้งหมด) นอกจากนี้เพื่อรักษาคุณสมบัติความเป็นกลางของการทำนายจะมีแนวโน้มที่จะมีค่าความแปรปรวนเชิงลบจำนวนมากระหว่างตัวประมาณค่าสัมประสิทธิ์อิสระ
kjetil b halvorsen

1
แม้ว่ามันจะไม่ตอบคำถามอย่างเต็มที่ หากเป็นเพียงปัญหาความแปรปรวนจำนวนมากคุณจะได้รับการประมาณการเล็กน้อยเพียงเท่าที่มีขนาดใหญ่ (พูดอย่างไม่เป็นทางการ) ปัญหาคือเมื่อเราถือว่าการประมาณการเล็กน้อย (สัมพันธ์กับข้อผิดพลาด std) คือ "ไม่สำคัญ" และวางตัวแปรเหล่านั้นจากแบบจำลอง ด้วยเหตุนี้การประมาณการที่เหลืออยู่เพียงอย่างเดียวจะเป็นประมาณการที่มีขนาดใหญ่
Hong Ooi

0

เดวิด ฉันคิดว่าปัญหากับตัวอย่างของคุณคือคุณยังไม่ได้ทำให้ข้อมูลของคุณเป็นปกติ (เช่น X ^ 10 >> X

ดังนั้นเดวิดถูกต้องว่ามันลดค่าสัมประสิทธิ์ที่ใหญ่กว่าให้มากขึ้น (เพื่อให้คุณสามารถจบลงด้วยค่าสัมประสิทธิ์ขนาดเล็กจำนวนมากในขณะที่การทำให้เป็นมาตรฐาน L1 อาจทำให้คุณมีขนาดใหญ่และเหลือศูนย์หนึ่ง)

ดังนั้นโดยพื้นฐานแล้วมันคือการห่อหุ้มที่การเปลี่ยนแปลงเล็กน้อยควรมีผลขนาดเล็ก (และแน่นอนว่าเรากลับไปที่เรื่องของขนาดเล็ก - ทำให้ข้อมูลของคุณเป็นปกติและอื่น ๆ ) แต่สิ่งสำคัญคือในมิติที่สูงขึ้นซึ่งความสัมพันธ์เข้ามาเล่น: จินตนาการว่าคุณมีสองตัวแปร x, y ที่มีความสัมพันธ์สูง (ทั้งปกติถึงความแปรปรวน 1) จากนั้นความแตกต่างของพวกเขาจะเล็ก = "เสียง" - การลงโทษน้ำหนักขนาดใหญ่ ป้องกันไม่ให้คุณเหมาะสมกับเสียงรบกวนนี้ (และมีค่ามากเกือบจะยกเลิกค่าสัมประสิทธิ์สำหรับ y และ x)

ตัวอย่างยังคงมีอยู่สำหรับความสัมพันธ์เชิงเส้นใด ๆ (y = mx)

เงยหน้าขึ้นมองสันเขาถดถอย


1
david ทำไมคุณไม่ทำซ้ำตัวอย่างที่ทำให้ตัวแปรทั้งหมดเป็น x, x ^ 2, ... , x ^ n ให้เป็นศูนย์ค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน 1 แล้วดูผลลัพธ์ที่คุณได้รับ ... มันไม่น่าแปลกใจมากที่คุณ สัมประสิทธิ์มีขนาดเล็กเมื่อตัวแปรอินพุตของคุณมีขนาดใหญ่
seanv507

0

การสาธิตที่มากเกินไป

ภาพนี้มาจากบันทึกของหลักสูตร DL ของ Andrew Ng โปรดแจ้งให้เราทราบหากคุณมีคำถาม


1
คุณช่วยอธิบายได้ไหมว่าเหตุใดคุณจึงคิดว่าบันทึกย่อนี้เกี่ยวกับการทำให้เป็นปกติของเครือข่ายนิวรัลจะตอบคำถามเกี่ยวกับค่าสัมประสิทธิ์ขนาดและการ overfitting?
whuber

ทั้ง 3 มีการเชื่อมโยง overfitting เป็นสิ่งที่พยายามทำให้ปกติและพยายามโดยการลงโทษสัมประสิทธิ์สูงเนื่องจากเหตุผลข้างต้น
Pradi KL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.