2016-09-26 17 views
5

Tôi đã quan sát thấy rằng các giá trị âm trở lại không thường xuyên của clf.tree_.feature scikit-learn. Ví dụ -2. Theo như tôi hiểu clf.tree_.feature là nghĩa vụ phải trả lại thứ tự tuần tự của các tính năng. Trong trường hợp chúng tôi có mảng tên đối tượng địa lý ['feature_one', 'feature_two', 'feature_three'], thì -2 sẽ tham chiếu đến feature_two. Tôi ngạc nhiên với việc sử dụng chỉ số tiêu cực. Trong sẽ có ý nghĩa hơn để tham khảo feature_two bởi chỉ số 1. (-2 là tham khảo thuận tiện cho tiêu hóa của con người, không phải để xử lý máy). Tôi có đọc nó đúng không?clf.tree_.feature - đầu ra là gì? (scikit-learn)

Cập nhật: Dưới đây là một ví dụ:

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) 

Dưới đây là các tập tin XY

Đây là kết quả:

[ 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

Bạn có thể đưa ra ví dụ không? – tfv

+0

@tfv, tôi vừa đăng một ví dụ. – user1700890

Trả lời

3

Bằng cách đọc mã nguồn Cython cho máy phát cây, chúng ta thấy rằng -2 chỉ là giá trị giả cho các tính năng của nút lá t thuộc tính.

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

Một chút thông tin thêm cho bất cứ ai tình cờ gặp câu hỏi cũ này chỉ là cách tôi đã làm.

Khi OP viết, clr.tree_.feature trả về các nút/lá theo thứ tự tuần tự dưới dạng thuật toán Tìm kiếm thứ cấp sâu. Đầu tiên, nó bắt đầu với nút gốc và sau đó đi theo các nút con bên trái cho đến khi nó đạt đến một lá (được mã hóa bằng -2), khi nó đạt đến một lá nó trèo cây từ lá này sang lá khác cho đến khi nó đạt đến một nút. Một khi nó đạt đến một nút, nó sẽ hạ xuống một lần nữa trong hệ thống phân cấp cho đến khi nó đạt đến một nút lá.

Nhìn vào ví dụ của OP, nút gốc là tính năng 8 có con trái, tính năng 9. Sau đó, nếu chúng ta hạ cấp phân cấp, chúng ta sẽ ngay lập tức đạt đến nút lá. Vì vậy, chúng tôi bắt đầu đi lên cho đến khi chúng tôi đạt đến một nút không phải lá. Nút tiếp theo (con phải) cũng là một nút lá (tính năng của cả hai là hai nút con), và sau đó leo lên cây, chúng ta lại tiếp cận tính năng 9 ở cấp thứ nhất của phân cấp. Ở đây tính năng 9 có một con trái, tính năng 4 trong đó có một nút lá như con trái của nó, sau đó chúng ta nhìn vào con của tính năng 4 là tính năng 9 một lần nữa, và như vậy.

Các vấn đề liên quan