K का एक बड़ा विकल्प मेरा क्रॉस सत्यापन स्कोर कम क्यों है?


11

के साथ चारों ओर खेलने के बोस्टन आवास डेटासेट और RandomForestRegressor(w / डिफ़ॉल्ट पैरामीटर) में scikit-जानने के लिए, मैं कुछ अजीब देखा: मतलब पार सत्यापन स्कोर में कमी आई के रूप में मैं 10 मेरे पार सत्यापन रणनीति के रूप में था इस प्रकार से परे परतों की संख्या में वृद्धि:

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... कहाँ num_cvsविविध था। मैं k- गुना CV के ट्रेन / टेस्ट स्प्लिट साइज़ बिहेव को मिरर test_sizeकरने के 1/num_cvsलिए सेट करता हूँ । मूल रूप से, मैं के-फोल्ड सीवी जैसा कुछ चाहता था, लेकिन मुझे भी यादृच्छिकता की आवश्यकता थी (इसलिए ShuffleSplit)।

इस परीक्षण को कई बार दोहराया गया था, और एवीजी स्कोर और मानक विचलन तब प्लॉट किए गए थे।

सर्कल के क्षेत्र ~ कश्मीर में कश्मीर गुना क्रॉस-सत्यापन

(ध्यान दें कि आकार kचक्र के क्षेत्र द्वारा दर्शाया गया है; वाई अक्ष पर मानक विचलन है।)

लगातार, k(2 से 44 तक) बढ़ने से स्कोर में एक संक्षिप्त वृद्धि होगी, इसके बाद एक स्थिर कमी के रूप में kऔर बढ़ेगा (~ 10 गुना से अधिक)! यदि कुछ भी हो, तो मैं स्कोर में मामूली वृद्धि के लिए और अधिक प्रशिक्षण डेटा की उम्मीद करूंगा !

अपडेट करें

स्कोरिंग मानदंड को बदलने का मतलब है कि मैं जो व्यवहार करना चाहता हूं, उसमें पूर्ण त्रुटि के परिणाम हैं: 0 के पास पहुंचने के बजाय, के-सीवी सीवी में सिलवटों की बढ़ती संख्या के साथ स्कोरिंग में सुधार होता है (डिफ़ॉल्ट रूप से, ' आर 2 ')। यह सवाल बना हुआ है कि डिफ़ॉल्ट स्कोरिंग मेट्रिक परिणाम दोनों के खराब प्रदर्शन के कारण और एसटीडी मैट्रिक्स सिलवटों की बढ़ती संख्या के लिए।


आपके फोल्ड में कोई डुप्लिकेट रिकॉर्ड? यह ओवरफिटिंग के कारण हो सकता है
है क्विट -

1
@ Anony-Mousse नहीं, चूंकि बोस्टन हाउसिंग के डेटासेट में डुप्लिकेट रिकॉर्ड नहीं होते हैं और शफलस्लैपिट के नमूने में डुप्लिकेट रिकॉर्ड नहीं होते हैं।
ब्रायन बिएन

4
इसके अलावा, अपनी साजिश में सुधार करें। मीन, + - stddev और min / max दिखाने के लिए एरर बार का उपयोग करें। K को दूसरी धुरी पर रखें।
QUIT है - Anony-Mousse

1
मुझे नहीं लगता कि अधिक प्रशिक्षण के उदाहरण से ओवरफिटिंग की संभावना बढ़ जाती है। मैंने इस डेटासेट के साथ एक सीखने की अवस्था की साजिश रची, फिर से शफलस्लीप (n_splits = 300 विभिन्न परीक्षण आकारों के साथ) का उपयोग किया और लगातार बढ़ रही सटीकता को देखा क्योंकि अधिक प्रशिक्षण उदाहरण उपलब्ध थे।
ब्रायन बिएन

1
क्षमा करें, आप सही हैं, बेहतर है और सबसे अच्छा है। 1. लेकिन आपके पास यह मुद्दा नहीं है यदि आप मीन चुकता या पूर्ण त्रुटि का उपयोग करते हैं। इसलिए इसे एरर टर्म के साथ कुछ करना है
rep_ho

जवाबों:


1

r ^ 2 एकल अंक (उदाहरण के लिए छुट्टी-एक-आउट सीवी) पर लागू होने पर अपरिभाषित होता है।

r ^ 2 छोटे परीक्षण सेट के मूल्यांकन के लिए अच्छा नहीं है: जब इसका उपयोग पर्याप्त रूप से छोटे परीक्षण सेट का मूल्यांकन करने के लिए किया जाता है, तो स्कोर अच्छी भविष्यवाणी के बावजूद नकारात्मक में दूर हो सकता है।

एकल नमूने को देखते हुए, किसी दिए गए डोमेन के लिए एक अच्छी भविष्यवाणी भयानक दिखाई दे सकती है:

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

परीक्षण सेट का आकार बढ़ाएँ (भविष्यवाणियों की सटीकता को समान रखते हुए), और अचानक r ^ 2 स्कोर एकदम सही प्रतीत होता है:

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

अन्य चरम पर ले जाया जाता है, यदि परीक्षण का आकार 2 नमूने हैं, और हम 2 नमूनों का मूल्यांकन करते हैं, जो संयोग से एक-दूसरे के करीब हैं, तो इसका r ^ 2 स्कोर पर पर्याप्त प्रभाव पड़ेगा, भले ही पूर्वानुमान काफी अच्छे हों :

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.