क्या स्प्लीन डेटा ओवरफिट कर रहे हैं?


47

मेरी समस्या : मैं हाल ही में एक सांख्यिकीविद् से मिला, जिसने मुझे सूचित किया कि स्प्लिन केवल डेटा की खोज के लिए उपयोगी हैं और ओवरफिटिंग के अधीन हैं, इस प्रकार भविष्यवाणी में उपयोगी नहीं हैं। उन्होंने सरल बहुपदों के साथ खोज करना पसंद किया ... जैसा कि मैं स्प्लिन का एक बड़ा प्रशंसक हूं, और यह मेरे अंतर्ज्ञान के खिलाफ जाता है, मुझे यह पता लगाने में दिलचस्पी है कि ये तर्क कितने वैध हैं, और यदि कोई विरोधी स्पलाइन का एक बड़ा समूह है- कार्यकर्ता वहां से बाहर?

पृष्ठभूमि : जब मैं अपने मॉडल का निर्माण करता हूं, तो मैं फ्रैंक हार्ल, रिग्रेशन मॉडलिंग स्ट्रैटिजिज (1) का पालन करने की कोशिश करता हूं। उनका तर्क है कि निरंतर चर की खोज के लिए प्रतिबंधित क्यूबिक स्प्लीन एक वैध उपकरण है। वह यह भी तर्क देता है कि बहुपत्नी कुछ रिश्तों जैसे कि थ्रेसहोल्ड, लॉगरिदमिक (2) के मॉडलिंग में खराब हैं। मॉडल के रैखिकता के परीक्षण के लिए वह एक एनोवा परीक्षण को सुझाता है:

H0:β2=β3==βk1=0

मैंने स्प्लिन्स के साथ ओवरफिटिंग के लिए गुगली की है, लेकिन यह बहुत उपयोगी नहीं पाया गया है (बहुत अधिक समुद्री मील का उपयोग नहीं करने के बारे में सामान्य चेतावनी के अलावा)। इस मंच में वहाँ पट्टी मॉडलिंग, के लिए एक प्राथमिकता हो रहा है Kolassa , Harrell , गुंग

मैंने बहुपदों के बारे में एक ब्लॉग पोस्ट पाया, जो कि बहुपत्नी की भविष्यवाणी करने के बारे में बात करता है। पोस्ट इन टिप्पणियों के साथ समाप्त होती है:

कुछ हद तक यहाँ प्रस्तुत उदाहरण धोखा दे रहे हैं - बहुपद प्रतिगमन अत्यधिक गैर-मजबूत होने के लिए जाना जाता है। अभ्यास में बहुत बेहतर है कि बहुपद के बजाय स्पाइन का उपयोग किया जाए।

अब इसने मुझे जाँचने के लिए प्रेरित किया कि उदाहरण के साथ स्प्लिन कैसे प्रदर्शन करेंगे:

library(rms)
p4 <- poly(1:100, degree=4)
true4 <- p4 %*% c(1,2,-6,9)
days <- 1:70

set.seed(7987)
noise4 <- true4 + rnorm(100, sd=.5)
reg.n4.4 <- lm(noise4[1:70] ~ poly(days, 4))
reg.n4.4ns <- lm(noise4[1:70] ~ ns(days,4))
dd <- datadist(noise4[1:70], days)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4[1:70] ~ rcs(days,5))

plot(1:100, noise4)
nd <- data.frame(days=1:100)
lines(1:100, predict(reg.n4.4, newdata=nd), col="orange", lwd=3)
lines(1:100, predict(reg.n4.4ns, newdata=nd), col="red", lwd=3)
lines(1:100, predict(reg.n4.4rcs_ols, newdata=nd), col="darkblue", lwd=3)

legend("top", fill=c("orange", "red","darkblue"), 
       legend=c("Poly", "Natural splines", "RCS - ols"))

निम्नलिखित छवि देता है: विभाजन और बहुपद की तुलना

अंत में मुझे बहुत कुछ नहीं मिला है जो मुझे पुनर्विचार करने के लिए मनाएगा, मुझे क्या याद आ रही है?

  1. एफए हार्रेल, रिग्रेशन मॉडलिंग रणनीतियाँ: लीनियर मॉडल्स, लॉजिस्टिक रिग्रेशन, और सरवाइवल एनालिसिस, सॉफ्टकवर रीप्रिंट ऑफ हार्डकवर 1 एड के साथ एप्लीकेशन। 2001. स्प्रिंगर, 2010।
  2. एफए हार्रेल, केएल ली और बीजी पोलक, "नैदानिक ​​अध्ययन में प्रतिगमन मॉडल: प्रिडिक्टर्स और रिस्पॉन्स के बीच संबंधों का निर्धारण," जेएनसीआई जे नेटल कैंसर इंस्टेंस, वॉल्यूम। 80, नं। 15, पीपी। 1198–1202, 1988 अक्टूबर।

अपडेट करें

टिप्पणियों ने मुझे आश्चर्यचकित किया कि डेटा स्पैन के भीतर क्या होता है लेकिन असहज घटता के साथ। अधिकांश स्थितियों में मैं डेटा सीमा के बाहर नहीं जा रहा हूं, जैसा कि ऊपर दिए गए उदाहरण से संकेत मिलता है। मुझे यकीन नहीं है कि यह भविष्यवाणी के रूप में योग्य है ...

वैसे भी यहाँ एक उदाहरण है जहाँ मैं एक और अधिक जटिल रेखा बनाता हूँ जिसका अनुवाद बहुपद में नहीं किया जा सकता है। चूंकि अधिकांश अवलोकन डेटा के केंद्र में हैं, इसलिए मैंने भी अनुकरण करने की कोशिश की:

library(rms)
cmplx_line <-  1:200/10
cmplx_line <- cmplx_line + 0.05*(cmplx_line - quantile(cmplx_line, .7))^2
cmplx_line <- cmplx_line - 0.06*(cmplx_line - quantile(cmplx_line, .3))^2
center <- (length(cmplx_line)/4*2):(length(cmplx_line)/4*3)
cmplx_line[center] <- cmplx_line[center] + 
    dnorm(6*(1:length(center)-length(center)/2)/length(center))*10

ds <- data.frame(cmplx_line, x=1:200)

days <- 1:140/2

set.seed(1234)
sample <- round(rnorm(600, mean=100, 60))
sample <- sample[sample <= max(ds$x) & 
                     sample >= min(ds$x)]
sample_ds <- ds[sample, ]

sample_ds$noise4 <- sample_ds$cmplx_line + rnorm(nrow(sample_ds), sd=2)
reg.n4.4 <- lm(noise4 ~ poly(x, 6), data=sample_ds)
dd <- datadist(sample_ds)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4 ~ rcs(x, 7), data=sample_ds)
AIC(reg.n4.4)

plot(sample_ds$x, sample_ds$noise4, col="#AAAAAA")
lines(x=ds$x, y=ds$cmplx_line, lwd=3, col="black", lty=4)

nd <- data.frame(x=ds$x)
lines(ds$x, predict(reg.n4.4, newdata=ds), col="orange", lwd=3)
lines(ds$x, predict(reg.n4.4rcs_ols, newdata=ds), col="lightblue", lwd=3)

legend("bottomright", fill=c("black", "orange","lightblue"), 
       legend=c("True line", "Poly", "RCS - ols"), inset=.05)

यह निम्नलिखित कथानक देता है:

एक अधिक जटिल गैर-बहुपद रेखा भूखंड

अपडेट २

इस पोस्ट के बाद से मैंने एक लेख प्रकाशित किया है जो एक बड़े डेटासेट पर उम्र के लिए गैर-रैखिकता में दिखता है। पूरक विभिन्न तरीकों की तुलना करता है और मैंने इसके बारे में एक ब्लॉग पोस्ट लिखा है


16
मैं वास्तव में नहीं देखता कि आपका सांख्यिकीविद् मित्र कहाँ से आ रहा है, ईमानदार होना। आप बहुपद के साथ ओवरफिट कर सकते हैं और समान रूप से विभाजित कर सकते हैं। अत्यधिक क्षमता वाले मॉडल के आपके वर्ग से ओवरफिटिंग होती है; विभिन्न मॉडलों के प्रदर्शन में क्या अंतर है कि वे अपनी क्षमता को कैसे सीमित करते हैं। (प्राकृतिक) स्प्लिन के लिए, यह गाँठ प्लेसमेंट और संख्या है, बहुपद के लिए यह डिग्री है।
लड़का

1
@ गुस्ताखी: यह भी मेरा विश्वास है, आप हमेशा अपने डेटा को ओवरफिट कर सकते हैं चाहे आप किसी भी तरीके का उपयोग करें। मेरे प्रतिगमन वर्ग के दौरान मेरे प्रोफेसर ने मुझे बताया कि बहुपद झुकता है जहां अधिकांश डेटा होता है, इस प्रकार चरम को अधिक अविश्वसनीय बना देता है। हालाँकि मुझे इस दावे का समर्थन करने वाला कोई लेख नहीं मिला है।
मैक्स गॉर्डन

आपके पहले ग्राफ़ में मौजूद सभी वक्र दूर दाएं हाथ के डेटा को फिट करने में विफल हैं।
एमिल फ्राइडमैन 21

1
उपरोक्त रेखांकन समय में 'x' आयाम संबंधित है? यदि ऐसा है, तो इनमें से कोई भी तरीका उचित नहीं है, क्योंकि दोनों इस अर्थ में 'फॉरवर्ड-लुकिंग' हैं कि वे मॉडल पर पड़ोसी बिंदुओं (दोनों तरफ) का उपयोग करते हैं।
21

@arielf: नहीं x का समय चर के रूप में इरादा नहीं है। मैंने इसके बारे में कुछ चर के रूप में सोचा था जहां हम केंद्र में टिप्पणियों की अधिकतम संख्या का नमूना लेते हैं। मेरे शोध में हम भविष्य में उस पर ध्यान नहीं देते हैं, मुझे लगता है कि यह भविष्यवाणी की तुलना में अनुमान के क्षेत्र में अधिक है। चर का उद्देश्य एक कोलेस्ट्रॉल, रक्तचाप, बीएमआई या कुछ अन्य सामान्य निरंतर चर होना है।
मैक्स गॉर्डन

जवाबों:


18

ओवरफिटिंग मॉडल के एक बड़े वर्ग को अनुमति देने से आता है। यह निरंतर मापदंडों (जैसे splines और बहुपद) के साथ मॉडल के साथ थोड़ा मुश्किल हो जाता है, लेकिन यदि आप कुछ अलग-अलग मानों में मापदंडों का विवेक करते हैं, तो आप देखेंगे कि समुद्री मील / गुणांक की संख्या बढ़ने से उपलब्ध मॉडल की संख्या तेजी से बढ़ जाएगी। । प्रत्येक डेटासेट के लिए एक तख़्ता और बहुपद होता है जो ठीक बैठता है, इसलिए जब तक आप पर्याप्त गुणांक / समुद्री मील की अनुमति देते हैं। यह हो सकता है कि तीन समुद्री मील के साथ एक तख़्ता तीन गुणांक के साथ एक बहुपद से अधिक हो, लेकिन यह शायद ही एक उचित तुलना है।

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

संपादित करें : टिप्पणियों में अनुरोध के अनुसार, एमडीएल कैसे लागू होगा, इसका एक उदाहरण। पहले आपको इस तथ्य से निपटना होगा कि आपका डेटा निरंतर है, इसलिए इसे एक परिमित कोड में प्रस्तुत नहीं किया जा सकता है। सादगी के लिए, हम डेटा स्पेस को साइड बॉक्स में विभाजित करेंगे और डेटा पॉइंट्स का वर्णन करने के बजाय, हम उन बॉक्सों का वर्णन करेंगे, जो डेटा में आते हैं। इस का मतलब है कि हम कुछ सटीकता खो देते हैं, लेकिन हम कर सकते हैं मनमाने ढंग से छोटे तो यह ज्यादा बात नहीं है,।ϵϵϵ

अब, कार्य कुछ बहुपद की मदद से डेटासेट को यथासंभव सुगम रूप से वर्णन करना है। पहले हम बहुपद का वर्णन करते हैं। यदि यह एक n-th आदेश बहुपद है, तो हमें सिर्फ (n + 1) गुणांक को संग्रहीत करने की आवश्यकता है। फिर से, हमें इन मूल्यों को समझाना होगा। उसके बाद हमें पहले मूल्य को उपसर्ग-मुक्त कोडिंग में संग्रहीत करने की आवश्यकता है (इसलिए हम जानते हैं कि कब पढ़ना बंद करना है) और फिरएन + nn+1पैरामीटर मान। इस जानकारी के साथ हमारे कोड का एक रिसीवर बहुपद बहाल कर सकता है। फिर हम डेटासेट स्टोर करने के लिए आवश्यक बाकी जानकारी जोड़ते हैं। प्रत्येक डाटापॉइंट के लिए हम एक्स-वैल्यू देते हैं, और फिर कितने बिंदु ऊपर या नीचे डेटा बिंदु बहुपद से दूर होते हैं। दोनों मूल्य हम उपसर्ग-मुक्त कोडिंग में संग्रहीत करते हैं ताकि छोटे मूल्यों को कुछ बिट्स की आवश्यकता हो, और हमें बिंदुओं के बीच सीमांकक की आवश्यकता नहीं होगी। (आप केवल मानों के बीच वेतन वृद्धि करके x- मानों के लिए कोड को छोटा कर सकते हैं)

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

(ध्यान दें कि इसे 'क्रूड एमडीएल' के रूप में जाना जाता है, और कुछ परिशोधन हैं जिन्हें आप विभिन्न तकनीकी मुद्दों को हल करने के लिए कर सकते हैं)।


आपके उत्तर के लिए धन्यवाद पीटर। मैंने एमडीएल के चारों ओर अपना सिर लपेटने की कोशिश की है, खासकर इसे कैसे लागू किया जाए। यह अच्छा होगा कि इसे मेरे एक उदाहरण के आधार पर समझाया जाए। एक गैर-सांख्यिकीविद् के रूप में मुझे अंतर्निहित लॉजिस्टिक्स को समझने से पहले चीजों का अनुकरण करना पसंद है। विकी-लेख में सिक्का का उदाहरण मुझ तक नहीं पहुंचा ...
मैक्स गॉर्डन

मैंने एक उदाहरण जोड़ा है।
पीटर

उदाहरण के लिए पीटर का धन्यवाद, यह मेरे लिए बहुत स्पष्ट है।
मैक्स गॉर्डन

20

सांख्यिकीविद् उम्र के लिए बहुपद फिटिंग के बारे में बहस कर रहे हैं, और मेरे अनुभव में, यह इस के लिए नीचे आता है:

स्प्लिन्स मूल रूप से अलग-अलग समीकरणों की एक श्रृंखला होती है, जो डेटा रेंज के बाहर प्रोजेक्ट करने की क्षमता की कीमत पर प्रक्षेपित मूल्यों की सटीकता को बढ़ाने के लिए होती है। यह ठीक है कि यदि आप जानते हैं कि आपका डेटा शुद्ध है और एक सुसंगत स्रोत से आ रहा है और यदि आप अपने मूल्यों की सीमा के भीतर विभिन्न मूल्यों की उपस्थिति की संभावना का वर्णन करने का प्रयास कर रहे हैं। हालाँकि, हम आम तौर पर अपने डेटा को चलाने वाले सैद्धांतिक आधारों के बारे में उतना नहीं सीखते हैं, क्योंकि पुरानी तख़्तापलट के बाद सही ढंग से वर्णन करना बंद हो जाता है, जब एक नई सीमा शुरू होती है। इससे हमारे डेटा के बाहर मूल्यों की भविष्यवाणी लगभग बेकार हो जाती है।

अब, इस संबंध में विभाजन अद्वितीय नहीं हैं। बहुपत्नी कार्य वास्तव में एक ही समस्या से ग्रस्त हैं यदि हम केवल डेटा को फिट कर रहे हैं और चर को चुनने के लिए एक सैद्धांतिक ढांचे का उपयोग नहीं कर रहे हैं। जिनके पास एक अच्छी तरह से बनाई गई थ्योरी ड्राइविंग है, जो भिन्न होने की अनुमति देने के लिए चर और डेटा के बाहर भविष्यवाणियों को एक्सक्लूसिव करने की एक जटिल बहुपद समारोह की क्षमता पर अधिक भरोसा करेगी।

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

अस्वीकरण

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


18
बहुरूपता की तुलना में बहुपद विसंगतियां डेटा के भीतर कहीं अधिक संवेदनशील हैं। डेटा सेट में कहीं भी एक बाहरी रूप से बड़े पैमाने पर वैश्विक प्रभाव होता है, जबकि स्प्लिन में प्रभाव स्थानीय होता है।
लड़का

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

5
मुझे बेहतर आश्वस्त होना होगा कि प्रतिगमन बहुपद की तुलना में अधिक खतरनाक रूप से अतिरिक्त रूप से विभाजित होता है।
फ्रैंक हेरेल

1
यह कोई नई बात नहीं है। बल्कि, यह समझ के शुरुआती चरणों में किए गए आँकड़ों के बीच का अंतर है जो समझ के बाद के चरणों के बीच है। जितना अधिक आप एक प्रणाली को समझते हैं, उतना कम आप फिट किए गए कार्यों पर भरोसा करते हैं और जितना अधिक आप सैद्धांतिक मॉडल पर भरोसा करते हैं।
डिनर

1
प्रतिबंधित क्यूबिक स्प्लिन का उपयोग करने के बारे में कैसे, जो डेटा बिंदुओं के बाहर रैखिक होने के लिए कार्यों को विवश करता है (मैं हरेल की पुस्तक पढ़ रहा हूं)। वैसे भी एक्सट्रपलेशन हमेशा संदिग्ध होता है। एक प्रयोग के बारे में सोचें जिसने अतिचालकता या प्लाज्मा की खोज की। प्रयोगों द्वारा सिद्ध किया जाना चाहिए! मुझे लगता है कि फिट होने के लिए कौन से कार्य प्रक्षेप समस्या के लिए अधिक प्रासंगिक हैं। सिद्धांत के बिना, मुझे लगता है कि आप त्रुटि में भी पूर्वानुमानकर्ताओं के साथ सिर्फ एक मॉडल लेने में सक्षम नहीं होंगे (अज्ञात वितरण) और y का अज्ञात वितरण। x, तब भी जब आप पर्याप्त डेटा दे रहे हों।
केएच किम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.