बेतरतीब जंगल उग आए हैं


15

मैं scikits- सीखने में रैंडम फ़ॉरेस्ट रिग्रेशन का उपयोग करने की कोशिश कर रहा हूं। समस्या यह है कि मुझे वास्तव में उच्च परीक्षण त्रुटि मिल रही है:

train MSE, 4.64, test MSE: 252.25.

यह मेरा डेटा कैसा दिखता है: (नीला: वास्तविक डेटा, हरा: अनुमानित):

वन प्रतिगमन साफ

मैं प्रशिक्षण के लिए 90% और परीक्षण के लिए 10% का उपयोग कर रहा हूं। यह वह कोड है जो मैं कई पैरामीटर संयोजनों की कोशिश करने के बाद उपयोग कर रहा हूं:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

मेरी फिटिंग को बेहतर बनाने के लिए संभावित रणनीतियाँ क्या हैं? क्या कुछ और है जो मैं अंतर्निहित मॉडल को निकालने के लिए कर सकता हूं? यह मेरे लिए अविश्वसनीय लगता है कि एक ही पैटर्न के इतने दोहराव के बाद मॉडल नए डेटा के साथ इतना बुरा व्यवहार करता है। क्या मुझे इस डेटा को फिट करने की कोशिश में कोई उम्मीद है?


क्या आप इनपुट के रूप में x अक्ष के साथ इस आवधिक कार्य को प्रशिक्षित कर रहे हैं, और x <= 245 के लिए लेबल के रूप में y अक्ष, और फिर x> 245 के लिए परीक्षण कर रहे हैं? या मैं आपके प्लाट की गलत व्याख्या कर रहा हूं?
रेनाउड

वास्तव में एक्स अक्ष का अवलोकन प्रकार है, कुल मिलाकर 300 अवलोकन हैं, इसलिए 245 से, जो कि मॉडल को प्रशिक्षित करने के लिए उपयोग नहीं किया जाने वाला परीक्षण डेटा है, इनपुट फीचर वेक्टर में पूर्णांक होते हैं, आकार (300,2) और बारीकी से अवलोकन सूचकांक के एक रैखिक समारोह से मिलता-जुलता है, इसलिए मैं इस सवाल के बारे में जानकारी नहीं करने के लिए इसके बारे में जानकारी नहीं जोड़ पाया।
elyase

1
आप पहले अपने डेटा (और प्रवृत्ति) से चक्र (मौसमी भाग) को निकालना चाह सकते हैं।
आर। प्रोस्ट

क्या आपने समय श्रृंखला विश्लेषण में देखा है? यह मेरे लिए स्पष्ट नहीं है कि आपके एक्स-एक्सिस पर क्या है लेकिन यह मुझे समय-समय पर लगता है। यहां देखें और मुझे बताएं कि क्या यह मदद करता है: otexts.org/fpp/7/5
ब्रैम वान कैंप

जवाबों:


21

मुझे लगता है कि आप गलत टूल का उपयोग कर रहे हैं; यदि आपका पूरा X इंडेक्स के बराबर है, तो आप मूल रूप से कुछ सैंपल फंक्शन कर रहे हैं और इसे एक्स्ट्रापोल करने की कोशिश कर रहे हैं। मशीन लर्निंग इतिहास के बारे में सब कुछ है, इसलिए यह आश्चर्यजनक नहीं है कि यह इस मामले में शानदार असफल रहा है।f:RR

आपको एक समय श्रृंखला विश्लेषण की आवश्यकता है (जैसे कि प्रवृत्ति को निकालना, स्पेक्ट्रम और ऑटोर्रिंगिंग या बाकी को HMMing का विश्लेषण करना) या भौतिकी (यानी अगर कोई ODE है जो इस तरह के आउटपुट का उत्पादन कर सकता है और संरक्षित मापदंडों के माध्यम से अपने मापदंडों को फिट करने की कोशिश कर सकता है)।


मशीन डेटा से सामान्य बनाने वाले मॉडल निकालने के बारे में नहीं सीख रही है? एक बार जब एक निश्चित सेट होता है, जो डेटा को अच्छी तरह से प्रक्षेपित करता है, तो हम उदाहरण क्रॉस सत्यापन के लिए बेहतर एक्सट्रपलेशन / सामान्यीकरण गुणों के साथ लोगों को चुन सकते हैं। क्या मेरी समझ में कुछ गलत है?
ईलाइज़

एक्सट्रैपलेशन सामान्यीकरण से अलग है - कल्पना करें कि आप निम्नलिखित प्रयोग का विषय हैं: आप एक स्क्रीन देखते हैं और एक लाल और हरे रंग का बटन है। सबसे पहले, स्क्रीन उस कमरे का एक वीडियो दिखाती है जिसमें आप अन्य व्यक्ति ने बिल्ली, शेर और बाघ के लिए हरे बटन को दबाया है, जो स्क्रीन पर दिखाया गया है और फिर भेड़िया और कुत्ते के लिए लाल है और इस तरह से 5 स्वादिष्ट कुकीज़ एकत्र हुए।

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

अच्छा उदाहरण है, लेकिन आप इसे वैसे नहीं देखते हैं। आपके उदाहरण में हमारे पास निम्न डेटा है: एक लक्ष्य ( gया r) और 2 सुविधाएँ ( index(लौकिक) और animal)। इस डेटा से मैं कई मॉडलों को फिट कर सकता था जो 1 या 2 (या दोनों के बराबर) की सुविधा के लिए अधिक या कम वजन दे सकते हैं। क्रॉस वैलिडेशन (पर्याप्त डेटा मानकर) कम महत्व रखने वाले सुविधा 2 (पशु) के साथ एक मॉडल पर पहुंचना चाहिए। मैं देख सकता हूं कि मेरा मॉडल डेटा को ओवरफिट कर रहा है, लेकिन मुझे अभी भी लगता है कि मुझे एक मॉडल निकालने में सक्षम होना चाहिए जो इस पैटर्न का अनुसरण करता है (क्योंकि व्यवहार परिवर्तित नहीं हुआ है) एक बड़े पर्याप्त मॉडल स्थान के साथ।
3'13

1
नहीं; यहां तक ​​कि अगर आप अधिक डेटा के लिए पूछते हैं, तो प्रायोगिकवादी अभी भी जानवरों के धोखे का विस्तार कर सकता है और आगे स्पष्ट नहीं रखने के लिए पैटर्न को आगे बढ़ा सकता है। अर्थात्, एक्सट्रपलेशन को केवल सीखने के साथ नहीं किया जा सकता है क्योंकि परिभाषा के अनुसार इसमें ऐसी जानकारी की आवश्यकता होती है जो प्रशिक्षण में मौजूद नहीं है - इस तरह से आपको या तो कुछ मान्यताओं को लागू करना होगा या अतिरिक्त डेटा एकत्र करना होगा ताकि समस्या प्रक्षेप बन जाए।

9

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


AFAIK SVM यादृच्छिक वन की एक ही समस्या है। वे अंतरिक्ष के बाहर अच्छी तरह से भविष्यवाणी नहीं करते हैं जहां उन्हें प्रशिक्षित किया गया है। संभवतः तंत्रिका नेटवर्क एक बेहतर समाधान होगा
डोम्बो

यदि डेटा एक वक्र पर स्थित है और कर्नेल उस वक्र को फिट करने के लिए सही प्रकार का है, तो एक SVM उस वक्र के साथ एक्सट्रपलेशन करने में सक्षम होगा। ed अगर डेटा में एक रेखीय प्रवृत्ति है, तो एक रैखिक SVM उस रेखा के साथ अतिरिक्त रूप से फिट होगा। अधिक जटिल कर्नेल फिट हो सकता है और अधिक जटिल व्यवहारों को एक्सट्रपलेशन कर सकता है। यह सही प्रकार के कर्नेल होने पर निर्भर करता है। यह एसवीएम को एक्सट्रपलेशन और टीएस भविष्यवाणी के लिए सही उपकरण नहीं बनाता है, लेकिन यह उन्हें यादृच्छिक जंगलों से बेहतर बनाता है।
डैनियल महलर

3

यह डेटा ओवर-फिटिंग के लिए एक पाठ्यपुस्तक उदाहरण है, मॉडल प्रशिक्षित डेटा पर बहुत अच्छा करता है लेकिन किसी भी नए परीक्षण डेटा पर ढह जाता है। इसे संबोधित करने के लिए यह रणनीतियों में से एक है: मापदंडों को अनुकूलित करने के लिए प्रशिक्षण डेटा का दस गुना क्रॉस सत्यापन करें।

चरण 1. NM अनुकूलन का उपयोग कर एक MSE न्यूनतम समारोह बनाएँ। एक उदाहरण यहाँ देखा जा सकता है: http://glowingpython.blogspot.de/2011/05/curve-fitting-use-fmin.html

चरण 2. इस कम से कम समारोह के भीतर, उद्देश्य MSE को कम करना है। ऐसा करने के लिए, डेटा का दस गुना विभाजन बनाएं जहां एक नया मॉडल 9 तह पर सीखा है और 10 वीं तह पर परीक्षण किया गया है। प्रत्येक गुना पर एमएसई प्राप्त करने के लिए, इस प्रक्रिया को दस बार दोहराया जाता है। एकत्रित MSE को उद्देश्य के परिणाम के रूप में लौटाया जाता है।

चरण 3. अजगर में धूआं आपके लिए पुनरावृत्तियों करेगा। जांचें कि कौन से हाइपर पैरामीटर ठीक ट्यून किए जाने के लिए आवश्यक हैं (n_estimators, max_features आदि) और उन्हें fmin को पास करें।

परिणाम सबसे अच्छा हाइपर-पैरामीटर होगा जो ओवर-फिटिंग की संभावना को कम करेगा।


हां, यह ओवरफिटिंग प्रतीत होता है (जो कि रैंडम फॉरेस्ट रिग्रेशन आमतौर पर नहीं होता है, इसलिए प्रश्न)। अब मैंने देखा है कि मापदंडों को बदलने से आरएफ रेजिस्टर के साथ बहुत कम प्रभाव पड़ता है। अब क्रॉस सत्यापन को अनुकूलित करने के लिए एक अंतर्निहित मॉडल को पर्याप्त लचीला बनाने की आवश्यकता है। इस प्रकार के डेटा के लिए आप किस प्रकार के ML मॉडल / एल्गोरिथ्म सुझाते हैं।
ईलाइज़

3

कुछ सुझाव:

  1. रोलिंग विंडो दृष्टिकोण का उपयोग करके अपने मापदंडों को ट्यून करें (आपके मॉडल को अगले की भविष्यवाणी करने के लिए अनुकूलित किया जाना चाहिए समय श्रृंखला में मूल्यों की , न कि आपूर्ति किए गए मानों के बीच मूल्यों की भविष्यवाणी करने के लिए)
  2. अन्य मॉडल आज़माएं (यहां तक ​​कि सरल, सही सुविधा चयन और इंजीनियरिंग रणनीतियों की सुविधा के साथ, आपकी समस्या के लिए बेहतर अनुकूल साबित हो सकते हैं)
  3. लक्ष्य चर के इष्टतम परिवर्तनों को सीखने का प्रयास करें (इसे भी ट्यून करें, एक नकारात्मक रैखिक / घातीय प्रवृत्ति है, आप इसका अनुमान लगाने में सक्षम हो सकते हैं)
  4. स्पेक्ट्रम विश्लेषण शायद
  5. मैक्सिमा / मिनिमा समान रूप से दूरी पर हैं ऐसा लगता है। जानें कि उन्हें आपकी सुविधाएँ कहाँ दी गई हैं (कोई संचालक इनपुट नहीं, पूर्वाग्रह हटाने के लिए एक एल्गोरिथ्म की खोज करें) और इसे एक विशेषता के रूप में जोड़ें। इसके अलावा एक फीचर इंजीनियर nearest maximum। डन्नो, यह काम कर सकता है, या शायद नहीं, आप केवल यह जान सकते हैं कि क्या आप इसे परीक्षण करते हैं :)

लेकिन, जैसा कि डैनियल ने अपने जवाब में कहा है, यादृच्छिक वन इस तरह की समस्याओं के लिए डिजाइन द्वारा काम नहीं करेगा क्योंकि यह ट्रेन के नमूने में देखी गई सीमा के बाहर मूल्यों की भविष्यवाणी करने में सक्षम नहीं है। ट्यूनिंग मापदंडों आदि कहीं नहीं होगा।
टिम

1
सुझाव # 2 @ समय। और यादृच्छिक वन इस डेटा पर भोलेपन से काम नहीं करेंगे, लेकिन होशियार सुविधा निष्कर्षण इसे काम कर सकते हैं।
फायरबग


0

पोस्ट के ऊपर पढ़ने के बाद, मैं एक और अलग जवाब देना चाहता हूं।

वृक्ष आधारित मॉडल, जैसे कि यादृच्छिक वन के लिए, वे प्रशिक्षण सेट से परे मूल्य को एक्सट्रपलेशन नहीं कर सकते हैं। इसलिए, मुझे नहीं लगता कि यह एक ओवर फिटिंग की समस्या है, लेकिन एक गलत मॉडलिंग रणनीति है।

तो, हम पेड़ मॉडल के साथ समय श्रृंखला भविष्यवाणी के लिए क्या कर सकते हैं?

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

इसके अलावा, लीनियर रिग्रेशन के साथ संयुक्त एक ट्री मॉडल है जो एक्सट्रपलेट कर सकता है, जिसे क्यूबिस्ट कहा जाता है, यह पत्ती पर रैखिक रिग्रेशन करता है।


0

यदि आप केवल ग्राफ की सीमा के भीतर की भविष्यवाणी करना चाहते हैं, तो डेटा सेट को विभाजित करने से पहले टिप्पणियों को यादृच्छिक रूप से हल करना चाहिए। यह फिर दिखाए गए एक्सट्रपलेशन एक से प्रक्षेप समस्या बन जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.