2016-09-26 10 views
5

मैंने देखा कि scikit-learn clf.tree_.feature कभी-कभी ऋणात्मक मूल्यों को वापस लाता है। उदाहरण के लिए -2। जहां तक ​​मैं समझता हूं कि clf.tree_.feature को सुविधाओं के अनुक्रमिक क्रम को वापस करना है। यदि हमारे पास फीचर नाम ['feature_one', 'feature_two', 'feature_three'] की सरणी है, तो -2 feature_two देखेंगे। मैं नकारात्मक सूचकांक के उपयोग से हैरान हूं। इंडेक्स 1 द्वारा feature_two को संदर्भित करने के लिए और अधिक समझदारी होगी (-2 मानव पाचन के लिए सुविधाजनक संदर्भ है, मशीन प्रसंस्करण के लिए नहीं)। क्या मैं इसे सही ढंग से पढ़ रहा हूं?clf.tree_.feature - आउटपुट क्या है? (scikit-learn)

अद्यतन: यहाँ एक उदाहरण है:

def leaf_ordering(): 
    X = np.genfromtxt('X.csv', delimiter=',') 
    Y = np.genfromtxt('Y.csv',delimiter=',') 
    dt = DecisionTreeClassifier(min_samples_leaf=10, random_state=99) 
    dt.fit(X, Y) 
    print(dt.tree_.feature) 

यहां फ़ाइलें X और Y

यहाँ आउटपुट है:

[ 8 9 -2 -2 9 4 -2 9 8 -2 -2 0 0 9 9 8 -2 -2 9 -2 -2 6 -2 -2 -2 
    2 -2 9 8 6 9 -2 -2 -2 8 9 -2 9 6 -2 -2 -2 6 -2 -2 9 -2 6 -2 -2 
    2 -2 -2] 
+0

क्या आप एक उदाहरण दे सकते हैं? – tfv

+0

@tfv, मैंने अभी एक उदाहरण पोस्ट किया है। – user1700890

उत्तर

3

के लिए Cython स्रोत कोड पढ़कर वृक्ष जनरेटर हम देखते हैं कि -2 के पत्ते नोड्स की विशेषता स्प्लि के लिए सिर्फ डमी मूल्य हैं टी विशेषता।

Line 63

TREE_UNDEFINED = -2 

Line 359

if is_leaf: 
    # Node is not expandable; set node as leaf 
    node.left_child = _TREE_LEAF 
    node.right_child = _TREE_LEAF 
    node.feature = _TREE_UNDEFINED 
    node.threshold = _TREE_UNDEFINED 
1

ने इस वर्ष सवाल अभी जिस तरह मैंने किया था पर ठोकर किसी के लिए अतिरिक्त जानकारी का एक छोटा सा।

ओपी लिखते हैं, clr.tree_.feature गहराई-प्रथम खोज एल्गोरिदम के रूप में अनुक्रमिक क्रम में नोड्स/पत्तियां लौटाता है। सबसे पहले, यह रूट नोड से शुरू होता है और फिर बाएं बच्चों का पालन करता है जब तक कि यह एक पत्ते तक पहुंचता है (2 के साथ कोडित), जब यह पत्ती तक पहुंच जाता है तो यह पेड़ से पत्ते तक पत्ते तक चढ़ता है जब तक वह नोड तक पहुंच जाता है। एक बार यह नोड तक पहुंचने के बाद, यह पदानुक्रम में तब तक उतरता है जब तक कि यह एक पत्ता नोड तक पहुंच जाए।

ओपी के उदाहरण को देखते हुए, रूट नोड सुविधा 8 है जिसमें बाएं बच्चे, विशेषता 9 है। फिर यदि हम पदानुक्रम से उतरते हैं, तो हम तुरंत एक पत्ता नोड तक पहुंच जाते हैं। तो हम तब तक बढ़ना शुरू करते हैं जब तक हम एक गैर-पत्ते नोड तक पहुंच जाते हैं। अगला नोड (दायां बच्चा) एक पत्ता नोड भी है (फीचर 9 के दो बच्चे दोनों पत्ते नोड्स हैं), और फिर पेड़ पर चढ़ते हुए हम पदानुक्रम के पहले स्तर पर फीचर 9 तक पहुंच जाते हैं। यहां फीचर 9 में एक बायां बच्चा है, फीचर 4 जिसमें उसके बाएं बच्चे के रूप में एक पत्ता नोड है, फिर हम फीचर 4 के दाहिने बच्चे को देखते हैं जो फीचर 9 फिर से है, और इसी तरह।

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