ग्लेमर में अभिसरण चेतावनी का अर्थ


16

मैं आर में पैकेज glmerसे फ़ंक्शन का उपयोग कर lme4रहा हूं, और मैं bobyqaअनुकूलक (मेरे मामले में डिफ़ॉल्ट) का उपयोग कर रहा हूं । मुझे एक चेतावनी मिल रही है, और मैं उत्सुक हूं कि इसका क्या मतलब है।

Warning message:
In optwrap(optimizer, devfun, start, rho$lower, control = control,  :
  convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q

मैंने खोजा "q को कम करने के लिए एक विश्वास क्षेत्र कदम विफल रहा।" मिनका पैकेज में कुछ जानकारी मिली , जिसमें कहा गया था "स्पष्टीकरण के लिए पॉवेल से परामर्श करें।" मैंने किया था (यदि आप चाहें, तो नीचे दिए गए संदर्भ और लिंक देखें), लेकिन मैं समझने में विफल हूं। वास्तव में, मैं q को कम करने के बारे में कुछ भी खोजने में विफल रहा।

MJD पॉवेल (2007) "डेरिवेटिव्स के बिना असंबंधित न्यूनता के लिए NEWUOA का विकास", कैम्ब्रिज विश्वविद्यालय, अनुप्रयुक्त गणित और सैद्धांतिक भौतिकी विभाग, संख्यात्मक विश्लेषण समूह, रिपोर्ट NA2007 (05), http://www.damtp.cam.ac.uk/ उपयोगकर्ता / na / NA_papers / NA2007_05.pdf ।

MJD पॉवेल (2009), "द बॉबी क्यूए एल्गोरिथम बाउंड कॉन्स्ट्रेन्ड ऑप्टिमाइज़ेशन फॉर द डेरिवेटिव्स", रिपोर्ट नं। DAMTP 2009 / NA06, सेंटर फॉर मैथमेटिकल साइंसेज, कैम्ब्रिज, ब्रिटेन। http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf ।

Ps मुझे पता है कि मैं अनुकूलक को बदल सकता हूं, और मुझे यह देखना होगा कि क्या मुझे चेतावनी या त्रुटियों के बिना आउटपुट मिल सकता है। मैं ग्रेडिएंट और हेसियन की भी जांच करूंगा यदि मैं कर सकता हूं, तो ए के अनुसारबेन बोल्कर की टिप्पणी / उत्तर के करूंगा । मैं glmerभीतर dredgeसे उपयोग कर रहा हूं MuMInऔर मुझे यकीन नहीं है कि अगर बेन का जवाब कुछ अतिरिक्त छेड़छाड़ के बिना काम करेगा, लेकिन मैं एक बार जब मेरा कंप्यूटर पूरा कर लेगा तो वह इस पर काम करेगा, वैसे भी, मैं पचाता हूं।

अपडेट करें

नीचे दिए गए डॉ। बोलकर की टिप्पणी के अनुसार, मैंने फोरट्रान कोड ( यहां किसी को देखने में दिलचस्पी नहीं है लेकिन डाउनलोड करने के लिए कोड है) के माध्यम से देखना शुरू किया । "430" कोड के bobyqb.f भाग में दिखाई देता है। प्रासंगिक कोड खोजने के लिए बस "430" या "क्यू कम करें" खोजें।

यह फोरट्रान कोड के साथ मेरी पहली मुठभेड़ है, लेकिन मुझे लगता है कि कोड कहता है कि यदि निम्नलिखित शर्तें पूरी होती हैं, तो चेतावनी दें: NTRITS> 0, VQUAD> = 0,IPRINT > 0. "पूर्णांक एनटीआरआईटीएस" विश्वास क्षेत्र "संख्या पर सेट है पिछले "वैकल्पिक" पुनरावृत्ति के बाद से होने वाली पुनरावृत्तियों। VQUADकई बार दिखाई देता है, और मैं अभी तक इसके महत्व पर स्पष्ट नहीं हूं क्योंकि इसका मूल्य विभिन्न प्रकार के अन्य चर पर निर्भर प्रतीत होता है, जिनमें से मान कभी-कभी अन्य चर पर निर्भर करते हैं। bromyqa.f: "IPRINT का मान होना चाहिए 0, 1, 2 या 3 पर सेट होता है, जो मुद्रण की मात्रा को नियंत्रित करता है। विशेष रूप से, IPRINT = 0 होने पर कोई आउटपुट नहीं होता है और IPRINT = 1 होने पर ही आउटपुट मिलता है। "

तो, ऐसा लगता है कि यह कार्य VQUAD> = 0 होने के महत्व का पता लगाना है और, शायद, यह समझना कि कैसे / कब IPRINTबन गया / 0. मुझे एक नज़र देखने के लिए कागज पर वापस जाना होगा, लेकिन गणित, या कम से कम इसकी प्रतीकात्मक अभिव्यक्ति, मेरे लिए थोड़ी बाधा है। जब तक, किसी को एल्गोरिथ्म के बारे में पता है या उसके बारे में जानने की इच्छा है, तो मुझे लगता है कि मुझे कागजात, कोड और इंटरनेट के बीच आगे और पीछे जाकर चेतावनी की मेरी समझ को बढ़ाना होगा, जब तक कि मुझे यह समझ न आ जाए कि यह क्या है? माध्यम।


3
मुझे लगता है कि यह प्रश्न सीवी बी / सी के लिए ऑन-टॉपिक हो सकता है, ऐसा लगता है कि यह मदद के बारे में विचारों को समझने के बजाय डब्ल्यू / आर प्रति से।
— गूँग - मोनिका

मुझे यकीन नहीं है कि मुझे इस मामले में कागजात और फोरट्रान कोड के माध्यम से बिट-बाय-बिट से परे सुझाव देने के लिए बहुत कुछ करना है (जो कि क्रान.प्रोप्रोजेक्ट / एसआरसी / कंट्रीब्यूट / मिनिकै 1 की srcनिर्देशिका में शामिल है) । 2.3.tar.gz ) और इस त्रुटि (कोड में त्रुटि कोड 430) के ठीक होने पर क्या चल रहा है, इसे देखकर ठीक हो जाता है ...
— बेन बोल्कर

1
त्वरित रूप से कागज पर मुझे लगता है कि चेतावनी इंगित करती है कि अनुकूलक को एक दिशा मिल सकती है जिसमें द्विघात सन्निकटन, Q, उस फ़ंक्शन को नहीं जिसे आप कम से कम करना चाहते हैं, एफ, कम हो जाता है। यही है, ऑप्टिमाइज़र एक ऐसे बिंदु पर है जो सबसे अधिक संभावना नहीं है, लेकिन यह नहीं पता है कि उद्देश्य में सुधार करने के लिए किस रास्ते पर जाना है। इसलिए, यह अटका हुआ है।
— स्वेग

1
आपने कौन से दो पेपर स्किम किए, और लगभग आपको यह जानकारी कहाँ से मिली? (मैंने स्किम्ड किया है, लेकिन आसानी से कागज और कोड के बीच पत्राचार करने में सक्षम नहीं था ...)
— बेन बोल्कर

मैंने BOBYQA पेपर पढ़ा। मैं लगभग 5 मिनट में पहली छमाही में गया कि वे क्या जा रहे हैं और क्यू क्या है, इसका व्यापक विचार प्राप्त करें। वास्तव में एक विशिष्ट पृष्ठ की ओर इशारा नहीं कर सकते।
— स्वेन

जवाबों:


13

f(x)xkk

  • Δk
  • f(x)x=xkQ(x)
  • skQk(xk+sk)||sk||≤Δk
  • skxk+1=xk+sk
  • अन्यथा, अपने मॉडल को परिष्कृत करें और फिर से प्रयास करें

sk

के मूल्य को समझने के लिए VQUAD, हमें पहले कुछ अन्य चर को समझना होगा। सौभाग्य से, की घोषणा के ठीक नीचे अच्छी टिप्पणियां हैं SUBROUTINE BOBYQB। मुख्य चर हैं:

  • GOPT, मॉडल का ढाल
  • HQमॉडल के हेसियन
  • Dsk

410 से ऊपर कुछ पंक्तियों की शुरुआत, आप देखेंगे DO 410 J=1,N । यह एक फॉर-लूप (और नेस्टेड फॉर-लूप) शुरू होता है जो परीक्षण चरण का उपयोग करके मॉडल द्वारा अनुमानित परिवर्तन का मूल्यांकन करता है D। यह अनुमानित परिवर्तन को संचित करता है VQUAD। फॉर-लूप का पहला भाग पहले-क्रम की शर्तों का मूल्यांकन करता है और नेस्टेड-फॉर-लूप दूसरे-क्रम की शर्तों का मूल्यांकन करता है। यह पढ़ना आसान होगा कि क्या लूप्स इंडेंटेड थे, जैसे:

    DO 410 J=1,N
        VQUAD=VQUAD+D(J)*GOPT(J)
        DO 410 I=1,J
            IH=IH+1
            TEMP=D(I)*D(J)
            IF (I .EQ. J) TEMP=HALF*TEMP
410         VQUAD=VQUAD+HQ(IH)*TEMP

मॉडल के अन्य मापदंडों को शामिल करने के लिए इसके बाद एक और लूप है। मुझे स्वीकार करना होगा, मुझे यह पूरी तरह से समझ में नहीं आया - मेरा सबसे अच्छा अनुमान यह है कि यह विशेष रूप से है कि वे मॉडल कैसे बनाते हैं।

इस सब के अंत में, VQUADमॉडल द्वारा अनुमानित उद्देश्य फ़ंक्शन में परिवर्तन आयोजित करता है। तो अगर VQUADगैर-नकारात्मक है, तो यह बुरा है। अब यह विशेष सॉल्वर वैकल्पिक कदम गणना (शायद एक लाइन खोज) का उपयोग कर सकता है, जो कि हैNTRITS खेलने के लिए आता है। तो 430 पर तर्क यह कह रहा है, "यदि अंतिम पुनरावृत्ति ने वैकल्पिक चरण गणना का उपयोग किया है और मॉडल में कमी और IPRINT> 0 की भविष्यवाणी नहीं करता है , तो चेतावनी संदेश प्रिंट करें।" ध्यान दें कि सॉल्वर के मूल्य की परवाह किए बिना समाप्त होने जा रहा हैIPRINT ।

बोलते हुए IPRINT, उस मान को BOBYQAकॉलिंग फ़ंक्शन द्वारा पास किया जाता है। इस मामले में, आपका आर रूटीन कॉलिंग फ़ंक्शन है। वहाँ एक verboseपैरामीटर है glmer- मैं डॉलर के लिए dimes हो जाएगा कि एक ही मूल्य पारित किया है BOBYQA। verbose0 पर सेट करने का प्रयास करें और आप शायद चेतावनी नहीं देखेंगे। लेकिन यह नहीं बदलेगा कि हुड के नीचे क्या चल रहा है, बिल्कुल।


1
यह बहुत मददगार है; मुझे नहीं लगता कि मैं बेहतर करने जा रहा हूं, इनाम देने के लिए ...
— बेन बोल्कर

@BenBolker। तो क्या मुझे इस बारे में चिंतित होना चाहिए कि यहां क्या हो रहा है, या क्या यह वास्तव में कोड में एक उपद्रव है? (दूसरे शब्दों में, क्या इस चेतावनी का अर्थ है कि मेरे परिणाम मान्य नहीं हैं?)
— theforestecologist

1
इस मामले में सामान्य सलाह जो बताई गई है ?lme4::convergence: अनुकूलन प्रक्रिया के संपूर्ण / विस्तृत मूल्यांकन में कमी, विभिन्न ऑप्टिमाइज़र से परिणामों की तुलना करने के लिए आपका सबसे अच्छा है।
— बेन बोल्कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.