2013-07-16 7 views
7

में कक्षाओं को कैसे भारित करें मैं विज्ञानकिंड से RandomForest विधि का उपयोग करके 3 डी बिंदु पहचान पर काम कर रहा हूं। जिन मुद्दों में मैं चल रहा हूं उनमें से एक यह है कि कुछ कक्षाएं अक्सर अन्य कक्षाएं मौजूद होती हैं। इसका मतलब है कि प्रशिक्षित वर्गीकृत से भविष्यवाणियों को उत्पन्न करने की प्रक्रिया में, यदि वर्गीकृत एक बिंदु वर्ग के अनिश्चित है तो यह अधिक संभावना है कि यह कम आम वर्ग की बजाय सामान्य वर्गों में से एक से संबंधित है।RandomForest कार्यान्वयन

मुझे लगता है कि विज्ञानकिंड दस्तावेज for random forests में फिट विधि में नमूना_वेट पैरामीटर है। जो मैं बता सकता हूं कि केवल कुछ समग्र नमूनों का वजन (कहना है कि मेरे पास 50 फाइलें हैं जिनसे मैं प्रशिक्षण कर रहा हूं, इससे कक्षाओं के बजाए पहले नमूना को दूसरे के रूप में भारी रूप से वजन कम किया जाएगा)। यह इस मुद्दे को ठीक नहीं करता है क्योंकि कम से कम सामान्य वर्ग मेरे सभी नमूनों में दुर्लभ हैं। यह सिर्फ उस विशेष वर्ग की प्रकृति है।

मुझे संतुलित यादृच्छिक जंगलों और भारित यादृच्छिक जंगलों पर कुछ कागजात मिल गए हैं। लेकिन मैंने विज्ञानकिट में इसका उपयोग करने के बारे में कुछ भी नहीं देखा है। मुझे उम्मीद है कि मैं गलत हूं - क्या वजन वर्गों का निर्माण करने का कोई तरीका है? क्या मुझे कुछ अलग लिखना चाहिए जो कृत्रिम रूप से मेरे नमूने में विभिन्न वर्गों के वजन को बढ़ाता है?

* संपादित sample_weight की मेरी समझ * Sample_weight प्रलेखन के अनुसार नमूने की चर्चा करते हुए किया जाना है और वर्ग के वजन लगता है स्पष्ट करने के लिए। ऊपर हम एक स्थिति है, बहुत सरल है, जिसमें हम कक्षा 3 की तुलना में बहुत कम है है की तलाश में

A = [1 1 1 2] 
B = [2 2 1 1] 
C = [3 1 1 1] 

: तो अगर मैं फ़ाइलों को ए, बी और सी और कक्षाएं 1, 2 और 3 है और मान लें अन्य वर्गों। मेरी स्थिति में 8 वर्ग हैं और लाखों अंकों पर प्रशिक्षण है लेकिन अनुपात अभी भी दो विशेष वर्गों के खिलाफ अविश्वसनीय रूप से तिरछा हुआ है।

नमूना_वेट का उपयोग करना, जो आकार मीटर (एम नमूने की संख्या होने) की एक सरणी में लेता है, मैं वजन कम करने में सक्षम हूं कि उन तीन फ़ाइलों में से कोई भी कितना काम करता है। तो मेरी समझ यह है कि मैं एक नमूना_वेट = [1 1 2] कर सकता हूं जो नमूना सी को दो अन्य नमूने के रूप में दोगुना मजबूत बना देगा। लेकिन यह वास्तव में मदद नहीं करता है क्योंकि मेरी समस्या यह है कि कक्षा 3 बहुत दुर्लभ है (वास्तविक डेटा में यह 12 में से 1 के बजाय लाखों में से 1k अंक है)। किसी दिए गए नमूने के वजन में वृद्धि से विशेष वर्गों के वजन में वृद्धि नहीं होगी जब तक कि मैं नकली कुछ डेटा जिसमें नमूना लगभग कुछ भी नहीं बल्कि उस विशेष वर्ग से बना है।

मुझे प्रलेखन में sklearn.preprocessing.balance_weights(y) मिला लेकिन मुझे इसका उपयोग करने वाले किसी को भी नहीं मिला। सिद्धांत रूप में यह करता है कि मुझे ऐसा करने की ज़रूरत है, लेकिन मुझे नहीं लगता कि मैं अपने रैंडम वन में वजन घटाने वाले सरणी को कैसे फिट कर सकता हूं।

+4

मुझे समझ में नहीं आता: "यह इस मुद्दे को ठीक नहीं करता है क्योंकि कम से कम सामान्य वर्ग मेरे सभी नमूनों में दुर्लभ हैं। यह केवल उस विशेष वर्ग की प्रकृति है।" यदि आप सैंपल वजन को 'sample_weight = (1/n_samples_in_same_class)' पर डालते हैं जो आपको कक्षा के वजन के लिए उचित मूल्य प्रदान करेगा। प्रलेखन के अनुसार – ogrisel

+0

नमूना_वेट नमूने का जिक्र करता है, न कि वर्ग वजन। – Nahkki

+1

हां लेकिन आप एक ही वर्ग के सभी नमूनों के लिए एक ही नमूना वजन असाइन कर सकते हैं और आप प्रभावी ढंग से भारित कर रहे हैं जैसे कि आपने कक्षा के वजन प्रदान किए हैं। नमूना वजन प्रदान करके वर्ग वजन को अनुकरण करना संभव है लेकिन दूसरे तरीके से नहीं। – ogrisel

उत्तर

2

मुझे लगता है कि यह केवल विज्ञान-सीखने के नए संस्करण के लिए लागू होता है, लेकिन अब आप इसका उपयोग कर सकते हैं।

rf = RandomForestClassifier(class_weight="balanced") 
संबंधित मुद्दे