2013-12-18 5 views
6

अपडेट (अगस्त 2014): मुझे इसके निचले हिस्से तक कभी नहीं मिला, और क्रांति के मंच पर कभी भी कोई प्रतिक्रिया नहीं मिली। हालांकि, यह मुद्दा क्रांति आर 7.2 (आर 3.0.3 के साथ, फिर से अकादमिक संस्करण) में तय किया गया है। मैंने कुछ सौ गुना नीचे एलएमई() परीक्षण चलाया, सभी उम्मीदवार बराबर परिणाम, जैसा कि अपेक्षित था। [अद्यतन]एलएमई() क्रांति आर के तहत प्रत्येक रन के विभिन्न परिणाम (एमकेएल को दोषी ठहराते हैं?)

मैंने अभी क्रांति आर 7.0 (आर 3.0.2) के अकादमिक संस्करण को स्थापित किया है। नया पीसी और नीचे दिए गए कोड के लिए अजीब परिणाम मिल रहा है। हर बार कोड चलाया जाता है, यह अलग-अलग परिणाम देता है। सीआरएएन-आर के तहत परिणाम हमेशा एक जैसा होता है (जैसा कि मुझे लगता है कि यह होना चाहिए)। कोड स्निपेट परीक्षण 527 से test.data.table() संस्करण 1.8.10 से है, जिसने मुझे त्रुटि की ओर इशारा किया।

library(nlme) 
all.equal(lme(distance ~ age, data=Orthodont), lme(distance ~ age, data=Orthodont)) 

मुझे कुछ नीचे मिलता है, लेकिन हर बार अलग मिलता है।

> all.equal(lme(distance ~ age, data=Orthodont), lme(distance ~ age, data=Orthodont)) 
[1] "Component 4: Component 2: Component 1: Mean relative difference: 1.774149e-08" 
[2] "Component 7: Mean relative difference: 0.0003335902" 

'फन' बात यह है कि nlme पैकेज (जिनमें से lme() हिस्सा है) में ही समान होता है, मैं की स्थापना रद्द करें और सुनिश्चित करने के लिए पुनर्स्थापित (पैकेज की nlme_3.1-113.zip फ़ाइल सा है थोड़ी-थोड़ी समान)।

मुझे अभी तक हुड के नीचे जाने के लिए पर्याप्त जानकारी नहीं है। किसी भी संकेतक या विचारों की सराहना की जाएगी। मैंने क्रांति के मंच पर भी पोस्ट किया है लेकिन यह यहां से बहुत कम आबादी वाला लगता है ...

यह 64-बिट विंडोज 8.1, 64-बिट आर के साथ-साथ इंटेल i7-4770 CPU के मामले में भी महत्वपूर्ण है। क्रांति आर (आर 3.0.2) और पिछले (2.15.3) के वर्तमान संस्करण दोनों अप्रत्याशित (मेरे लिए) व्यवहार का उत्पादन करते हैं। सीआरएएन-आर 3.0.1 और 3.0.2 समान परिणाम उत्पन्न करते हैं।

sessionInfo() क्रांति आर के लिए उत्पादन:

> sessionInfo() 
R version 3.0.2 (2013-09-25) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] nlme_3.1-113  Revobase_7.0.0 RevoMods_7.0.0 RevoScaleR_7.0.0 
[5] lattice_0.20-24 rpart_4.1-3  

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 foreach_1.4.1  grid_3.0.2  iterators_1.0.6 
[5] pkgXMLBuilder_1.0 revoIpe_1.0  tools_3.0.2  XML_3.98-1.1 

अद्यतन 1: मैं इस मुद्दे (उत्तर & टिप्पणी के नीचे से संकेत से कुछ निम्न) इस तथ्य का पता लगाया है कि क्रांति आर का उपयोग करता है इंटेल एमकेएल बीएलएस पुस्तकालय। अगर मैं सीआरएएन द्वारा आपूर्ति की गई बीएलएएस लाइब्रेरी पर स्विच करता हूं, तो समस्याएं दूर हो जाती हैं। (नोट: मुझे खुद को संकलित करने के लिए पर्याप्त जानकारी नहीं है, इसलिए मैंने ओपनबीएलएस और अन्य विकल्पों का परीक्षण नहीं किया है। क्रांति आर में यह केवल दो डीएलएस का नाम बदलने का मामला है।)।

ऐसा लगता है कि अन्य लोगों को inconsistent results with MKL as well मिल रहा है। मशीन टोलरेंस के भीतर अंतर हैं, यानी all.equal() सत्य है जबकि identical() गलत है। मेरे मामले में अलग-अलग परिणाम अर्थपूर्ण रूप से बड़े लगते हैं।

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

(*) गति कंक्रीट वर्कफ़्लो पर निर्भर है। इस विशेष मामले में क्रैन बीएलएस एमकेएल (दोनों एकल सिंगल-थ्रेडेड) से तेज है। अन्य काम में, क्रांति आर काफी तेजी से रहा है, इसलिए मैं इसे देख रहा हूं।

+0

यह कुछ साफ शोध है! –

+0

दिलचस्प, एसवीडी की गणना करते समय मुझे एक ही समस्या मिली, यहां एक नज़र डालें: http://stackoverflow.com/questions/40052770/strange-behaviour-when-computing-svd-on-a-covariance-matrix- अलग- परिणाम-बी –

उत्तर

4

अनुमान में, रेवो आर सीपीयू कोर पर समानांतर है और समांतर चीजों को पुनः संयोजित करने में अंकगणित हमेशा सहयोगी नहीं होता है। दूसरे शब्दों में, यह संचालन के आदेश पर निर्भर करता है। यदि थ्रेड अलग-अलग ऑर्डर में समाप्त होते हैं, जो हो सकता है कि कोर को कुछ और करना है, तो परिणाम एक अलग क्रम में जोड़े जाते हैं और (ए + बी) + सी हमेशा फ़्लोटिंग में + (बी + सी) के बराबर नहीं होता है बिंदु ...

जांचने के लिए, क्या कोई तरीका है कि आप रेवो आर को केवल एक सीपीयू कोर का उपयोग करने के लिए कह सकते हैं?

+1

+1: विंडोज़ पर कार्य प्रबंधक, प्रक्रियाओं पर जाएं, अपनी रीवोआर प्रक्रिया पर राइट-क्लिक करें, एफ़िनिटी सेट करें और सभी को अचयनित करें लेकिन एक कोर –

+1

यह एक अच्छा विचार है लेकिन ऐसा प्रतीत नहीं होता है। मैंने एक कोर, समान व्यवहार के प्रति संबंध स्थापित करने के साथ जांच की। मतभेद फ्लोटिंग पॉइंट त्रुटियों से अपेक्षा की जा सकती है। AFAIK 'all.equal()' समान() 'के विपरीत, मशीन राउंडिंग का ख्याल रखता है। किसी भी मामले में, 'पेशेवर ग्रेड आर' को ऐसी असंगतताओं का ख्याल रखना चाहिए, है ना? – Peter

+0

वह व्यवहार और आरएनजी (और बग) एकमात्र कारण हैं जिन्हें मैंने कभी देखा है कि चीजें इस तरह विफल हो गई हैं। आपने कई रनों से पहले set.seed (99) के साथ प्रयास किया था? अन्यथा आपके विकल्प ए हैं) lme4 में जहां जवाब अलग हो जाते हैं और बी) रेवो लोगों से पूछें। – Spacedman

संबंधित मुद्दे