(क्यों) ओवरफेड मॉडल में बड़े गुणांक होते हैं?


33

मैं कल्पना करता हूं कि एक चर पर जितना बड़ा गुणांक होता है, उस आयाम में मॉडल को "स्विंग" करने की अधिक क्षमता होती है, जिससे शोर को फिट करने का एक बढ़ा मौका मिलता है। हालांकि मुझे लगता है कि मुझे मॉडल और बड़े गुणांक में विचरण के बीच के संबंध का एक उचित अर्थ मिल गया है, लेकिन मुझे यह समझ में नहीं आता कि वे ओवरफिट मॉडल में क्यों होते हैं। क्या यह कहना गलत है कि वे ओवरफिटिंग के लक्षण हैं और गुणांक संकोचन मॉडल में विचरण को कम करने के लिए एक तकनीक है? गुणांक संकोचन के माध्यम से नियमितीकरण इस सिद्धांत पर संचालित होता है कि बड़े गुणांक एक ओवरफ़ीड मॉडल का परिणाम हैं, लेकिन शायद मैं तकनीक के पीछे की प्रेरणा को गलत बता रहा हूं।

मेरे अंतर्ज्ञान कि बड़े गुणांक आम तौर पर ओवरफिटिंग का एक लक्षण है जो निम्न उदाहरण से आता है:

मान लीजिए कि हम अंक फिट करना चाहते हैं जो सभी एक्स-एक्सिस पर बैठते हैं। हम आसानी से एक बहुपद का निर्माण कर सकते हैं जिसके समाधान ये बिंदु हैं: । मान लीजिए कि हमारे अंक । यह तकनीक सभी गुणांक> = 10 (एक गुणांक को छोड़कर) देती है। जैसा कि हम और अधिक अंक जोड़ते हैं (और इस प्रकार बहुपद की डिग्री बढ़ाते हैं) इन गुणांकों का परिमाण तेजी से बढ़ेगा।nf(x)=(xx1)(xx2)....(xxn1)(xxn)x=1,2,3,4

यह उदाहरण है कि मैं वर्तमान में मॉडल के गुणांक के आकार को उत्पन्न मॉडल की "जटिलता" के साथ जोड़ रहा हूं, लेकिन मुझे चिंता है कि यह मामला वास्तव में वास्तविक दुनिया के व्यवहार का सूचक है। मैंने जानबूझकर एक ओवरफ़ीड मॉडल (एक द्विघात नमूना मॉडल से उत्पन्न डेटा पर फिट 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
वास्तव में "बड़े" गुणांक से आपका क्या तात्पर्य है? आखिरकार, यदि हम केवल उन इकाइयों को बदलते हैं जिनमें हम आश्रित चर को व्यक्त करते हैं (जैसे कि पारसेक से लेकर महिलामीटर तक) तो हम गुणांक को मनमाने ढंग से बड़े या छोटे मूल्य में बना सकते हैं।
whuber

1
मेरे पास उसके लिए एक अच्छा जवाब नहीं है। मेरी समझ यह थी कि हमला करने वाले "बड़े" गुणांक एल 2-नियमितीकरण के पीछे प्रेरक प्रेरक थे। लेकिन सिंथेटिक रूप से गुणांक के परिमाण में वृद्धि से मॉडल में अलग-अलग परिमाण के लिए क्षतिपूर्ति के लिए नियमितीकरण स्थिरांक को बदलने की आवश्यकता होगी, है ना? मुझे नहीं लगता कि यहां "बड़े" की धारणा उतनी ही अस्पष्ट है जितना आप इसे बना रहे हैं, भले ही मैं इसे बहुत अच्छी तरह से चित्रित नहीं कर सकता।
डेविड मार्क्स

@DavidMarx: मुझे नहीं लगता कि L2-नियमितीकरण "बड़े" गुणांक के बाद होता है, है ना? बल्कि यह उन गुणांकों को आगे बढ़ाता है जो शायद शून्य से तुलनात्मक रूप से बड़े नहीं थे, एक अर्थ में आपको दोनों के बीच समझौता करने के बजाय चुनने के लिए मजबूर करते हैं।
वेन

@wayne आह, मुझे लगता है कि मैं इसे पीछे की ओर था। मैंने सोचा था कि यह बड़े गुणांक को सिकोड़ता है या सभी गुणांक को आनुपातिक रूप से सिकोड़ता है। अगर L2-नियमितीकरण ने मॉडल से बाहर छोटे गुणांक वाले चर को धक्का दिया, तो यह अधिक समझ में आता है।
डेविड मार्क्स

1
8 संपादन के बाद, मुझे लगता है कि मेरे पास मेरा जवाब है। शीश।
हॉन्ग ओई

जवाबों:


15

नियमितीकरण के संदर्भ में एक "बड़े" गुणांक का मतलब है कि अनुमान का परिमाण इससे बड़ा होगा, अगर एक निश्चित मॉडल विनिर्देश का उपयोग किया गया था। यह डेटा से न केवल अनुमान, बल्कि मॉडल विनिर्देशन प्राप्त करने का प्रभाव है।

विचार करें कि किसी चर के लिए चरणबद्ध प्रतिगमन जैसी प्रक्रिया क्या करेगी। यदि मानक गुणांक के सापेक्ष इसके गुणांक का अनुमान छोटा है, तो यह मॉडल से हट जाएगा। ऐसा इसलिए हो सकता है क्योंकि सही मूल्य वास्तव में छोटा है, या बस यादृच्छिक त्रुटि (या दो के संयोजन) के कारण है। यदि यह गिरा दिया गया है, तो हम अब इसे कोई ध्यान नहीं देते हैं। दूसरी ओर, यदि अनुमान अपनी मानक त्रुटि के सापेक्ष बड़ा है, तो इसे बरकरार रखा जाएगा। असंतुलन पर ध्यान दें: हमारा अंतिम मॉडल एक चर को अस्वीकार कर देगा जब गुणांक अनुमान छोटा है, लेकिन अनुमान बड़ा होने पर हम इसे रखेंगे। इस प्रकार हम इसके मूल्य को कम करने की संभावना रखते हैं।

एक और तरीका रखो, ओवरफिटिंग का क्या मतलब है कि आप प्रतिक्रिया पर भविष्यवक्ताओं के दिए गए सेट के प्रभाव को खत्म कर रहे हैं। लेकिन एकमात्र तरीका जिससे आप प्रभाव को पार कर सकते हैं यदि अनुमानित गुणांक बहुत बड़ा है (और इसके विपरीत, आपके बहिष्कृत भविष्यवक्ताओं के लिए अनुमान बहुत छोटा है)।

आपको जो करना चाहिए, वह आपके प्रयोग को एक चर चयन प्रक्रिया में शामिल करता है, जैसे कि स्टेप वाइज रिग्रेशन step। फिर विभिन्न यादृच्छिक नमूनों पर अपने प्रयोग को कई बार दोहराएं, और अनुमानों को बचाएं। आपको यह पता लगाना चाहिए कि गुणांक से सभी अनुमान व्यवस्थित रूप से बहुत बड़े हैं, जब चर चयन का उपयोग नहीं करने की तुलना में। नियमितीकरण प्रक्रिया का उद्देश्य इस समस्या को ठीक करना या कम करना है।β 10β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 

जब आप परिवर्तनीय चयन का उपयोग नहीं करते हैं, तो इसके विपरीत होता है, और बस सब कुछ नेत्रहीन रूप से फिट होता है। हालांकि अभी भी से के अनुमानों में कुछ त्रुटि है , औसत विचलन बहुत छोटा है।β 10β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 

इसके अलावा, दोनों L1 और L2 नियमितीकरण अंतर्निहित धारणा है कि अपने सभी चर, और इसलिए गुणांक, माप का एक ही इकाइयों में कर रहे हैं, में यानी एक इकाई परिवर्तन में एक इकाई परिवर्तन के बराबर है । इसलिए इनमें से किसी भी तकनीक को लागू करने से पहले अपने चर को मानकीकृत करने का सामान्य चरण।β 2β1β2


मैं आपके संशोधित उदाहरण से थोड़ा भ्रमित हूं। आप कहते हैं कि "आपको लगता है कि गुणांक ,3 से are10 के सभी अनुमान व्यवस्थित रूप से बहुत बड़े हैं, जब इसकी तुलना वैरिएबल सेलेक्शन का उपयोग नहीं करने के लिए की जाती है," लेकिन यह प्रतीत होता है कि आपको stepअपने दूसरे प्रयोग की तुलना में आपके पहले प्रयोग (साथ ) में बड़े मूल्य मिले हैं। ("नेत्रहीन" फिटिंग मान)। क्या यह आपके सुझाव के विपरीत नहीं है कि क्या होना चाहिए?
डेविड मार्क्स

साथ ही, आपने और अन्य लोगों ने सुझाव दिया है कि मुझे अपने उदाहरण में चर का मानकीकरण करना चाहिए। मैं तर्क देखता हूं, लेकिन मुझे ऐसा करने का एक अच्छा तरीका नहीं पता है। क्या मुझे X की प्रत्येक शक्ति के लिए कॉलम शामिल करने और उन मानों को मानकीकृत करने के लिए अपना नमूना डेटा बढ़ाना चाहिए? या क्या कोई ऐसा तरीका है जिससे मैं चर को सीधे अपने मॉडल फॉर्मूले में मानकीकृत कर सकता हूं जहां मैं फोन करता polyहूं (मैं अनुमान नहीं लगा रहा हूं)?
डेविड मार्क्स

? स्टेपवाइज का उपयोग न करने की तुलना में, आपको स्टेपवाइज का उपयोग करते समय बड़े पूर्ण विचलन मिलते हैं। यकीन नहीं हो रहा है कि आप क्या पूछ रहे हैं। मानकीकरण के रूप में: यह अनावश्यक है यदि आप इसे करते हैं जैसा कि मैंने पोस्ट किया है, अर्थात स्टेप वाइज और नॉन-स्टेप वाइज दृष्टिकोण के बीच तुलना करना। प्रत्येक चर की तुलना एक उपचार से दूसरे उपचार के बजाय दूसरे चर से की जा रही है।
हांग ओय जूल

6

आपके विवरणों को देखे बिना एक बहुत ही सरल उत्तर: जब आप ओवरफिटिंग कर रहे होते हैं, तो पैरामीटर अनुमानक बड़े संस्करण प्राप्त करते हैं, और बड़े संस्करण के साथ बड़े मूल्य बस वही होते हैं जिनकी आपको अपेक्षा करनी चाहिए!


अगर मैं आपको सही ढंग से समझता हूं, तो यह बताता है कि मॉडल "बड़े" मूल्यों की भविष्यवाणी करेगा, इसलिए नहीं कि मॉडल में "बड़े" गुणांक शामिल होंगे।
डेविड मार्क्स

नहीं, यह गलत है! कम से कम कुछ व्यक्तिगत गुणांक अनुमानकों के बड़े संस्करण होंगे, इसलिए उन गुणांक के अनुमानित मूल्य बड़े होंगे। (ओवरसीटिंग के समय भी, कुछ गुणांक स्थिर हो सकते हैं, लेकिन सभी नहीं)। इसके अलावा, भविष्यवाणी की निष्पक्षता रखने के लिए, स्वतंत्र गुणांक अनुमानकों के बीच कुछ बड़े नकारात्मक सहसंयोजक होने की प्रवृत्ति होगी।
kjetil b halvorsen

1
हालांकि यह पूरी तरह से सवाल का जवाब नहीं देता है। यदि यह केवल बड़े संस्करण का एक मुद्दा था, तो आपको छोटे अनुमानों को अक्सर बड़े लोगों (अनौपचारिक रूप से बोलने) के रूप में मिलेगा। समस्या तब है जब हम छोटे अनुमान (उनकी एसटीडी त्रुटियों के सापेक्ष) "महत्वहीन" हैं और उन चर को मॉडल से हटा देते हैं। नतीजतन, शेष केवल अनुमान ही बड़े होंगे।
हांग ओय जूल

0

डेविड। मुझे लगता है कि आपके उदाहरण के साथ समस्या यह है कि आपने अपना डेटा सामान्य नहीं किया है (यानी एक्स ^ 10 >> एक्स।

तो david सही है कि यह बड़े गुणांक को अधिक सिकोड़ता है (इसलिए आप बहुत से छोटे गुणांक के साथ समाप्त हो सकते हैं, जबकि L1 नियमितीकरण आपको एक बड़ा और शेष शून्य दे सकता है)

इसलिए मूल रूप से यह समझाया जा रहा है कि छोटे बदलावों के छोटे प्रभाव होने चाहिए (और निश्चित रूप से हम इस मुद्दे पर वापस आ गए हैं कि छोटा कितना छोटा है - आपके डेटा को सामान्य करना आदि)। लेकिन मुख्य बात उच्च आयामों में है, जहां सहसंबंध खेल में आता है: कल्पना करें कि आपके पास दो चर x, y हैं जो अत्यधिक सहसंबद्ध हैं (दोनों को 1 संस्करण में सामान्यीकृत किया गया है) फिर उनका अंतर छोटा होगा = "शोर" - बड़े भार को दंडित करना होगा इसलिए इस शोर के लिए आपको फिट करने से रोकता है (और y और x के लिए बहुत बड़े लगभग रद्द करने वाले गुणांक प्राप्त करना)।

उदाहरण अभी भी किसी भी रैखिक संबंध (y = mx) के लिए है

रिज प्रतिगमन देखो


1
david आप सभी चर x, x ^ 2, ..., x ^ n को शून्य माध्य और मानक विचलन 1 को सामान्य करने वाले उदाहरण को फिर से क्यों नहीं करते हैं, और फिर परिणाम देखें जो आपको मिलता है ... यह बहुत आश्चर्यजनक नहीं है कि आपका जब आपके इनपुट चर बड़े होते हैं तो गुणांक छोटा होता है
seanv507

0

ओवरफिटिंग डेमो

यह छवि एंड्रयू एनजी के डीएल पाठ्यक्रम के मेरे नोट से है, अगर आपको सवाल है तो pls मुझे बताएं


1
क्या आप बता सकते हैं कि आपको क्यों लगता है कि तंत्रिका नेटवर्क नियमितीकरण पर यह नोट गुणांक आकार और ओवरफिटिंग के बारे में सवाल का जवाब देता है?
whuber

सभी 3 ओवरफिटिंग से जुड़े हैं, नियमितीकरण रोकने की कोशिश करता है और यह ऊपर दिए गए कारण के कारण उच्च गुणांक को दंडित करने की कोशिश करता है
Pradi KL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.