2016-01-11 10 views
14

ऐसा लगता है जैसे केएफओल्ड ऑब्जेक्ट को फिर से चालू होने पर हर मूल्य समान मूल्य उत्पन्न करता है, जबकि शफल स्प्लिट हर बार अलग-अलग इंडेक्स उत्पन्न करता है। क्या ये सही है? यदि हां, तो दूसरे के लिए एक के लिए क्या उपयोग हैं?केएफओल्ड और शफल स्प्लिट सीवी के बीच क्या अंतर है?

cv = cross_validation.KFold(10, n_folds=2,shuffle=True,random_state=None) 
cv2 = cross_validation.ShuffleSplit(10,n_iter=2,test_size=0.5) 
print(list(iter(cv))) 
print(list(iter(cv))) 
print(list(iter(cv2))) 
print(list(iter(cv2))) 

निम्नलिखित उत्पादन पैदावार: KFold और ShuffleSplit उत्पादन में

[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))]          
[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))]          
[(array([4, 6, 3, 2, 7]), array([8, 1, 9, 0, 5])), (array([3, 6, 7, 0, 5]), array([9, 1, 8, 4, 2]))]          
[(array([3, 0, 2, 1, 7]), array([5, 6, 9, 4, 8])), (array([0, 7, 1, 3, 8]), array([6, 2, 5, 4, 9]))]  

उत्तर

16

अंतर

KFold अपने डेटा परतों की prespecified संख्या में सेट बांट देगा, और हर नमूना होना चाहिए एक और केवल एक गुना में। एक गुना आपके डेटासेट का सबसेट है।

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

सारांश: शफल स्प्लिट इसे सक्रिय रूप से काम करता है, केएफओल्ड सिर्फ डेटासेट को के फ़ोल्डर्स में विभाजित करता है।

अंतर जब सत्यापन

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

+0

ग्रेट उत्तर, धन्यवाद! अब ऐसा लगता है कि जब आप एक नया KFold जनरेटर बनाते हैं और शफल सत्य होता है, तो यह एक अलग आउटपुट उत्पन्न करेगा, लेकिन जब आप जनरेटर को कई बार कॉल नहीं करते हैं। यह इस तरह क्यों है? – rb612

+1

बस इसे बहुत लंबे समय से होने से रोकने के लिए आपकी टिप्पणी के लिए एक नया प्रश्न बनाने का फैसला किया। [यह यहां है] (http://stackoverflow.com/questions/34940465/why-does-calling-the-kfold-generator-with-shuffle-give-the-same-indices/34940524#34940524)। आशा करता हूँ की ये काम करेगा! – imp9

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