2015-12-21 6 views
11

मैं this documentation से पढ़ा है कि:`decisionTreeClassifier` स्केलेर्न में काम करने के तरीके के साथ 'sample_weight` क्या करता है?

"क्लास संतुलन प्रत्येक वर्ग से नमूने की एक समान संख्या नमूने के द्वारा किया जा सकता है, या अधिमानतः एक ही करने के लिए प्रत्येक वर्ग के लिए नमूना वजन (sample_weight) की राशि को सामान्य से मूल्य। "

लेकिन, यह अभी भी अस्पष्ट है कि यह कैसे काम करता है। यदि मैंने sample_weight को केवल दो संभावित मानों, 1 और 2 के सरणी के साथ सेट किया है, तो क्या इसका मतलब यह है कि 2 के नमूने बैगिंग करते समय 1 के साथ नमूने के रूप में बार-बार नमूना प्राप्त करेंगे? मैं इसके लिए एक व्यावहारिक उदाहरण नहीं सोच सकता।

उत्तर

15

इसलिए मैंने sklearn स्रोत को देखने में थोडा समय बिताया क्योंकि वास्तव में मैं इसे थोड़ी देर के लिए खुद को समझने का प्रयास कर रहा हूं। मैं लंबाई के लिए क्षमा चाहता हूं, लेकिन मुझे नहीं पता कि इसे और संक्षेप में कैसे समझाया जाए।


कुछ त्वरित प्रारंभिक तैयारियाँ:

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

Pr(Class=k) = #(examples of class k in region)/#(total examples in region) 

अशुद्धता उपाय, वर्ग संभावनाओं की सरणी इनपुट के रूप में लेता है:

[Pr(Class=1), Pr(Class=2), ..., Pr(Class=K)] 

और एक संख्या है, जो बताता है कि आप कैसे "अशुद्ध" या कैसे inhomogeneous-से बाहर थूक फीचर स्पेस का क्षेत्रफल है। उदाहरण के लिए, दो वर्ग की समस्या के लिए गिनी उपाय 2*p*(1-p) है, जहां p = Pr(Class=1) और 1-p=Pr(Class=2) है।


अब, मूल रूप से अपने प्रश्न का संक्षिप्त उत्तर है:

sample_weight बढाती संभावना सरणी ... जो अशुद्धता उपाय ... जो बढाती है कैसे नोड्स विभाजित हैं बढाती में संभावना अनुमान ... जो वृक्षों का निर्माण करता है, जो बढ़ता है ... जो वर्गीकरण के लिए फीचर स्पेस को कैसे लगाया जाता है।

मेरा मानना ​​है कि यह उदाहरण के माध्यम से सबसे अच्छा चित्रित है।

from sklearn.tree import DecisionTreeClassifier as DTC 

X = [[0],[1],[2]] # 3 simple training examples 
Y = [ 1, 2, 1 ] # class labels 

dtc = DTC(max_depth=1) 

तो, हम सिर्फ एक रूट नोड और दो बच्चों के साथ पेड़ पर ध्यान देंगे:


पहले निम्नलिखित 2 स्तरीय समस्या है, जहां इनपुट 1 आयामी हैं पर विचार करें। ध्यान दें कि डिफ़ॉल्ट अशुद्धता गिनी माप को मापती है।


केस 1: कोई sample_weight

dtc.fit(X,Y) 
print dtc.tree_.threshold 
# [0.5, -2, -2] 
print dtc.tree_.impurity 
# [0.44444444, 0, 0.5] 

threshold सरणी में पहला मान हमें बताता है कि 1 प्रशिक्षण उदाहरण बाईं बच्चे नोड के लिए भेज दिया जाता है, और 2 और 3 प्रशिक्षण उदाहरण भेजे जाते हैं सही बच्चे नोड के लिए। threshold में अंतिम दो मान प्लेसहोल्डर्स हैं और उन्हें अनदेखा किया जाना है। impurity सरणी क्रमशः माता-पिता, बाएं और दाएं नोड्स में गणना की गई अशुद्धता मान बताती है।

पैरेंट नोड में, p = Pr(Class=1) = 2./3., ताकि gini = 2*(2.0/3.0)*(1.0/3.0) = 0.444....। आप बच्चे नोड अशुद्धियों की पुष्टि भी कर सकते हैं।


केस 2:

dtc.fit(X,Y,sample_weight=[1,2,3]) 
print dtc.tree_.threshold 
# [1.5, -2, -2] 
print dtc.tree_.impurity 
# [0.44444444, 0.44444444, 0.] 

आप देख सकते हैं सुविधा सीमा अलग है: sample_weight

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

पैरेंट नोड क्षेत्र में अशुद्धता समान है। यह सिर्फ एक संयोग है। हम इसे सीधे गणना कर सकते हैं:

p = Pr(Class=1) = (1+3)/(1+2+3) = 2.0/3.0 

4/9 की गिनी उपाय इस प्रकार है।

अब, आप चयनित दहलीज से देख सकते हैं कि पहले और दूसरे प्रशिक्षण उदाहरण बाएं बच्चे नोड को भेजे जाते हैं, जबकि तीसरा दाहिने ओर भेजा जाता है। हम देखते हैं कि अशुद्धता क्योंकि बाएँ चाइल्ड नोड में भी 4/9 होने की गणना की जाती है:

p = Pr(Class=1) = 1/(1+2) = 1/3. 

सही बच्चे में शून्य की अशुद्धता केवल एक प्रशिक्षण उदाहरण है कि इस क्षेत्र में झूठ बोल के कारण है।

आप इसे गैर-पूर्णांक नमूना-भारों के साथ समान रूप से विस्तारित कर सकते हैं। मैं sample_weight = [1,2,2.5] जैसे कुछ कोशिश करने की सिफारिश करता हूं, और गणना की गई अशुद्धियों की पुष्टि करता हूं।

आशा है कि इससे मदद मिलती है!

+0

'गिनी माप' के लिए, यह '2/3 * (1 - 2/3) = 2/9' नहीं होना चाहिए? ठीक है तो मुझे लगता है कि यह अशुद्धता माप को प्रभावित करता है, लेकिन सापेक्ष 'नमूना भार' के आधार पर यह एक निश्चित नमूना को अधिक बार या कम बार नमूना देने से अलग कैसे होगा? विस्तृत स्पष्टीकरण के लिए धन्यवाद! – Hunle

+0

बाइनरी वर्गीकरण के लिए गिनी माप '2 * पी * (1-पी)' है, यही कारण है कि परिणाम 4/9 है। आप अपनी व्याख्या में सही हैं। हालांकि, "नमूनाकरण" यादृच्छिकता का सुझाव देता है, जो नहीं है (बस स्पष्ट होना)। जब 'sample_weights' पूर्णांक होते हैं, तो यह अशुद्धता माप में' ith' प्रशिक्षण उदाहरण 'samples_weights [i] 'बार की प्रतिलिपि बनाने जैसा है। बेशक, 'sample_weights' को पूर्णांक होने की आवश्यकता नहीं है, लेकिन विचार समान है। –

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