मुझे कैसे पता चलेगा कि क्रॉस सत्यापन का कौन सा तरीका सबसे अच्छा है?


36

मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरी स्थिति के लिए कौन सी क्रॉस सत्यापन विधि सबसे अच्छी है।

निम्नलिखित डेटा समस्या (आर) के माध्यम से काम करने के लिए सिर्फ एक उदाहरण है, लेकिन मेरे वास्तविक Xडेटा ( xmat) एक दूसरे के साथ सहसंबंधित हैं और yचर ( ymat) के साथ विभिन्न डिग्री से संबंधित हैं । मैंने R कोड प्रदान किया है, लेकिन मेरा प्रश्न R के बारे में नहीं है, बल्कि विधियों के बारे में है। XmatX चर V1 से V100 ymatशामिल है, जबकि एक एकल चर भी शामिल है।

set.seed(1233)
xmat           <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
  # the real y data are correlated with xmat
ymat           <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")

मैं yसभी चर के आधार पर भविष्यवाणी करने के लिए एक मॉडल बनाना चाहूंगा xmat। तो यह एक रैखिक प्रतिगमन मॉडल होगा y ~ V1 + V2 + V3+ ... + V100। एक समीक्षा से, मैं निम्नलिखित तीन क्रॉस सत्यापन विधि देख सकता हूं:

  1. डेटा को लगभग आधे में विभाजित करें और प्रशिक्षण के लिए एक का उपयोग करें और परीक्षण के लिए एक और आधा (क्रॉस सत्यापन):

    prop       <- 0.5 # proportion of subset data
    set.seed(1234)
      # training data set 
    training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0))
    xmat.train <- xmat[training.s,]
    ymat.train <- ymat[training.s,]
    
      # testing data set 
    testing.s <- setdiff(1:nrow(xmat), training)
    xmat.test <- xmat[testing.s,]
    ymat.test <- ymat[testing.s,]
    
  2. K- गुना क्रॉस सत्यापन - 10 गुना क्रॉस सत्यापन का उपयोग करना:

    mydata <- data.frame(ymat, xmat)
    fit    <- lm(ymat ~ ., data=mydata)
    library(DAAG)
    cv.lm(df=mydata, fit, m=10) # ten-fold cross validation 
    
  3. एक समय में एक मान या कुछ मानों को मास्क करना: इस विधि में हम बेतरतीब ढंग से डेटासेट (y) में एक मान को NA से प्रतिस्थापित करते हैं और इसकी भविष्यवाणी करते हैं। प्रक्रिया को n बार दोहराया जाता है।

    n = 500 
    predicted.v <- rep(NA, n)
    real.v      <- rep(NA, n)
    
    for (i in 1:n){
      masked.id <- sample (1:nrow(xmat), 1)
      ymat1     <- ymat 
      real.v[i] <- ymat[masked.id,]
      ymat1[masked.id,] <- NA
      mydata            <- data.frame(ymat1, xmat)
      fit               <- lm(ymat1 ~ ., data=mydata)
      predicted.v[i]    <- fit$fitted.values[masked.id]
    }
    

मुझे कैसे पता चलेगा कि किसी भी स्थिति के लिए सबसे अच्छा क्या है? क्या अन्य तरीके हैं? Bootstrap validationबनाम CV? काम के उदाहरणों की सराहना की जाएगी।


क्या आप डेटा की वैधता की जाँच करने या बी-गुणांक के अनुमानित अनुमानों या मूल्यों की पुष्टि करने में रुचि रखते हैं।
सुभाष सी। डावर

मुझे बी-गुणांक के अनुमानित अनुमानों या मूल्यों की पुष्टि करने में दिलचस्पी है
rdorlearn

विधि # 1 के साथ मुझे जो समस्या है वह यह है कि नमूना का आकार वास्तविकता में आपके द्वारा की गई तुलना में बहुत छोटा है। इसलिए अनुमानित विश्वास बैंड / परिवर्तनशीलता बहुत बड़ा होने की संभावना है। इसके अलावा, मैं अनुमान लगा रहा हूं कि विधि # 2 और विधि # 3 प्रदर्शन में समान होगी। यदि मैं आप थे, तो K = 5,6, ..., 14,15 के लिए K- गुना क्रॉस सत्यापन के साथ शुरू करें और देखें कि क्या आपके परिणाम काफी समान हैं।
कियान

इसके अलावा, क्या आप कोवरिएट की संख्या कम करने के लिए मॉडल चयन करने का इरादा रखते हैं? 100 काफी पसंद है।
कियान

@ user2432701 नहीं मैं सभी 100 का उपयोग करना चाहूंगा।
rdorlearn

जवाबों:


34

चूँकि ओपी ने इस प्रश्न पर ध्यान दिया है, इसलिए उसे कुछ ध्यान आकर्षित करना चाहिए, और इस प्रकार यह कुछ सामान्य विचारों पर चर्चा करने के लिए सही जगह है, भले ही यह सीधे ओपी का जवाब न दे।

पहला नाम:

क) क्रॉस-मान्यता सभी अनुमानों / माप तकनीकों का सामान्य नाम है जो ट्रेन सेट से भिन्न परीक्षण सेट का उपयोग करते हैं। पर्यायवाची: आउट-ऑफ-सैंपल या अतिरिक्त-नमूना अनुमान। एंटोनीम: इन-सैंपल आकलन।

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

कई क्रॉस सत्यापन तकनीक हैं:

b) होल्ड-आउट विधि # 1 ऊपर है। सेट को एक प्रशिक्षण और एक परीक्षण में विभाजित करें। प्रशिक्षण और परीक्षण सेट के सापेक्ष आकारों पर चर्चा और प्रथाओं का एक लंबा इतिहास है।

ग) के -फोल्ड - विधि # 2 ऊपर। सुंदर मानक।

d) लीव-वन-आउट - विधि # 3 ऊपर।

ई) बूटस्ट्रैप : यदि आपके सेट में एन डेटा है, तो सेट से एन नमूने के साथ यादृच्छिक रूप से एन नमूनों का चयन करें और इसे प्रशिक्षण के रूप में उपयोग करें। मूल सेट से डेटा, जो किसी भी समय नमूने नहीं लिया गया है, परीक्षण सेट के रूप में उपयोग किया जाता है। मॉडल की त्रुटि के अंतिम अनुमान की गणना करने के लिए अलग-अलग तरीके हैं जो परीक्षण सेट (आउट-ऑफ-सैंपल) और ट्रेन सेट (इन-सैंपल) के लिए त्रुटि दोनों का उपयोग करते हैं। उदाहरण के लिए, .632 बूटस्ट्रैप देखें। मुझे लगता है कि एक .632+ सूत्र भी है - वे सूत्र हैं जो मॉडल के बाहर और नमूना दोनों त्रुटियों का उपयोग करते हुए मॉडल की सच्ची त्रुटि का अनुमान लगाते हैं।

च) उपरोक्त विधि के चयन के लिए ऑर्थोगोनल पुनरावृत्ति का मुद्दा है। लीव-वन-आउट को छोड़कर, उपरोक्त सभी विधियों को किसी भी समय दोहराया जा सकता है। वास्तव में एक दोहराया पकड़ से बाहर, या बार-बार के बारे में बात कर सकते हैं कश्मीर गुना। निष्पक्ष होने के लिए, लगभग हमेशा बूटस्ट्रैप विधि का उपयोग दोहराया फैशन में किया जाता है।


अगला सवाल है, कौन सा तरीका "बेहतर" है। समस्या यह है कि "बेहतर" का क्या मतलब है।

1) पहला उत्तर यह है कि क्या इनमें से प्रत्येक विधि मॉडल त्रुटि के अनुमान के लिए पक्षपाती है (भविष्य के डेटा की अनंत राशि के लिए)।

2) दूसरा विकल्प यह है कि इनमें से प्रत्येक विधि कितनी तेजी से या कितनी अच्छी तरह से सही मॉडल त्रुटि में परिवर्तित होती है (यदि वे पक्षपाती नहीं हैं)। मेरा मानना ​​है कि यह अभी भी शोध का विषय है। मुझे इन दो पत्रों (पे-वाल के पीछे) की ओर इशारा करें लेकिन सार हमें कुछ समझ देता है कि वे क्या हासिल करने की कोशिश कर रहे हैं। यह भी ध्यान दें कि यह बहुत कॉल करने के लिए आम है कश्मीर से ही के रूप में "पार सत्यापन" गुना।

इन विषयों पर संभवतः कई अन्य पत्र हैं। वे केवल कुछ उदाहरण हैं।

3) "बेहतर" का एक और पहलू है: ऊपर दी गई तकनीकों में से किसी एक का उपयोग करके मॉडल त्रुटि का एक विशेष माप दिया जाता है, आप कितना निश्चित हो सकते हैं कि सही मॉडल त्रुटि करीब है।

सामान्य तौर पर, इस मामले में आप त्रुटि के कई उपाय करना चाहते हैं और एक आत्मविश्वास अंतराल (या यदि आप बायेसियन दृष्टिकोण का पालन करते हैं तो एक विश्वसनीय अंतराल) की गणना करें। इस मामले में, मुद्दा यह है कि आप त्रुटि उपायों के सेट के विचरण पर कितना भरोसा कर सकते हैं। सूचना है कि छुट्टी-एक बाहर के अलावा, ऊपर सभी तकनीकों आप कई विभिन्न उपायों (दे देंगे कश्मीर एक के लिए उपायों कश्मीर गुना, एन उपायों के लिए एक n -दोहराए बाहर पकड़) और इस तरह आप विचरण (या मानक विचलन को माप सकते हैं ) इस सेट की और त्रुटि के माप के लिए एक विश्वास अंतराल की गणना करें।

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

इस आखिरी पेपर में 5 दोहराया 2-गुना करने का सुझाव दिया गया है - जिसे वह 5 × 2 सीवी कहता है - कई उपायों (10) के अच्छे संतुलन के रूप में लेकिन बहुत अधिक पुनरावृत्ति नहीं।

संपादित करें:

बेशक, इनमें से कुछ सवालों के क्रॉस वेलिडेट में शानदार उत्तर हैं (हालांकि कभी-कभी वे आपस में सहमत नहीं होते हैं)। यहाँ कुछ हैं:

वर्गीकरण प्रदर्शन का मूल्यांकन करने के लिए क्रॉस-सत्यापन या बूटस्ट्रैपिंग?

भविष्यवाणी की त्रुटि का अनुमान लगाने के लिए क्रॉस सत्यापन और बूटस्ट्रैपिंग के बीच अंतर

वर्गीकरण प्रदर्शन का मूल्यांकन करने के लिए क्रॉस-सत्यापन या बूटस्ट्रैपिंग?

सत्यापन और मॉडल चयन के लिए बूटस्ट्रैपिंग को समझना

सामान्य तौर पर, टैग आपका मित्र है।


तो सबसे अच्छा उपाय क्या है? मुझे नहीं पता। मैं 5 × 2 सीवी का उपयोग कर रहा हूं जब मुझे बहुत कठोर होने की आवश्यकता होती है, जब मुझे यह सुनिश्चित करने की आवश्यकता होती है कि एक तकनीक दूसरे से बेहतर है, खासकर प्रकाशनों में। और अगर मैं विचलन या मानक विचलन के किसी भी उपाय को बनाने की योजना नहीं बना रहा हूं, या यदि मेरे पास समय की कमी है, तो मैं एक होल्ड आउट का उपयोग करता हूं - एक होल्ड-आउट में केवल एक मॉडल सीखना है


क्रॉस वेरिएशन के जटिल विचरण गुणों के लिए, मुझे लगता है कि किसी को सावधान रहने की जरूरत है कि विचरण को क्या मापा जाना है। IIRC, बेंगियो एट अल। के लिए विचरण पर ध्यान केंद्रित एक आकार के डेटा सेट n हाथ में समस्या के लिए। मेरे द्वारा सेट किए गए डेटा सेट पर प्रशिक्षित मॉडल की भविष्यवाणियों के लिए यादृच्छिक अनिश्चितता से अलग (और बड़ा) है । ऊपर दिए गए डाइटीरिच पेपर में समस्या को भी देखें।
cbeleites ने मोनिका

7

कृपया विधि परिभाषाओं के लिए विकिपीडिया पृष्ठ का संदर्भ लें (वे यहां मुझसे बेहतर काम कर सकते हैं)।

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

  1. किसी भी स्थिति : k-fold cross validationकुछ उपयुक्त संख्याओं के साथ प्रयोग करें (जैसे 5 या 10)।

    • डेटा को 1 छमाही में विभाजित करना, पहले छमाही पर प्रशिक्षण और दूसरे पर मान्य करना 2-गुना क्रॉस सत्यापन में एक कदम है वैसे भी (दूसरे चरण को दो अर्धविरामों के साथ एक ही अभ्यास को दोहराया जा रहा है)। इसलिए, 'डेटा को आधी' रणनीति में विभाजित करना।

    • कई मशीन लर्निंग और डेटा माइनिंग पेपर्स के-फोल्ड क्रॉस वेलिडेशन (उद्धरण नहीं है) का उपयोग करते हैं, इसलिए इसका उपयोग तब तक करें जब तक कि आपको इस चरण में बहुत सावधान न होना पड़े।

    • अब, ' लीव आउट आउट ' और ' रैंडम स्पलिट एंड रिपीट ' ( जैसे ऊपर वर्णित प्रक्रिया की तरह बूटस्ट्रैप आवश्यक रूप से अच्छे दावेदार हैं) को छोड़ दें

    • यदि आपका डेटा आकार N है, तो एन-फोल्ड क्रॉस सत्यापन अनिवार्य रूप से उसी तरह है जैसे कोई बाहर छोड़ता है।

    • 'लीव पी आउट' और 'बूटस्ट्रैप' कश्मीर गुना क्रॉस सत्यापन की तुलना में थोड़ा अधिक भिन्न हैं, लेकिन अंतर अनिवार्य रूप से है कि कैसे सिलवटों को परिभाषित किया जाता है और पुनरावृत्ति की संख्या 'के' होती है।

    • जैसा कि विकी पेज कहता है, के-फोल्ड और ' लीव पी आउट ' दोनों ' अपेक्षित प्रदर्शन / फिट ' के सभ्य अनुमानक हैं (हालांकि इन अनुमानों के विचलन के संबंध में दांव बंद हैं)।

  2. आपकी स्थिति: सुविधाओं की संख्या (100) की तुलना में आपके पास केवल 200 का एक नमूना आकार है। मुझे लगता है कि एक बहुत ही उच्च संभावना है कि एक ही प्रदर्शन देने वाले कई रैखिक मॉडल हैं। मैं सुझाव दूंगा कि> 10 रिपीट के साथ के-फोल्ड क्रॉस वेलिडेशन का उपयोग किया जाए । 3 या 5 का ak मान चुनें।

    • K मान का कारण: सामान्य विकल्प।

    • दोहराने के मूल्य का कारण: पुनरावृत्ति के लिए एक शालीनता से उच्च मूल्य शायद यहां महत्वपूर्ण है क्योंकि एक एकल k- गुना क्रॉस सत्यापन गणना का उत्पादन हमारे द्वारा प्रस्तुत विभाजन परिवर्तनशीलता / यादृच्छिकता को मोड़ने के लिए स्वीकार्य हो सकता है।

अतिरिक्त विचार:

  • शायद मैं एक ही प्रदर्शन / फिट माप के लिए ' लीव आउट आउट ' और ' बूटस्ट्रैप जैसे रैंडम स्प्लिट रिपीट ' तरीकों को भी नियोजित करूंगा / जांचूंगा कि क्या मेरी k- फोल्ड क्रॉस सत्यापन विधि के आउटपुट ठीक दिखते हैं।

  • यद्यपि आप सभी 100 सुविधाओं का उपयोग करना चाहते हैं, जैसा कि किसी ने सुझाव दिया है, मल्टीकोलिनरिटी / सहसंबंध पर ध्यान दें और शायद सुविधाओं की संख्या कम करें।


इस उत्तर को भी देखें: आंकड़े.stackexchange.com/questions/69291/…
थेजा

मैं इस के माध्यम से बहुत कटौती करेगा और आर rmsपैकेज validateऔर calibrateकार्यों में लागू किए गए सीधे एफ्रॉन-गोंग आशावाद बूटस्ट्रैप पर जाऊंगा ।
फ्रैंक हरेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.