2015-12-11 16 views
12

Tôi đang dùng scikit-learn để tạo một Random Forest. Tuy nhiên, tôi muốn tìm độ sâu của từng cây. Nó có vẻ như một thuộc tính đơn giản để có nhưng theo tài liệu, (http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) không có cách nào để truy cập nó.Làm cách nào để bạn truy cập vào chiều sâu của cây bằng cách tìm hiểu về Python?

Nếu điều này là không thể, có cách nào để truy cập chiều sâu cây từ mô hình Tree Quyết định không?

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn bạn.

Trả lời

15

Mỗi trường hợp RandomForestClassifier có thuộc tính estimators_, là danh sách các trường hợp DecisionTreeClassifier. Tài liệu cho thấy một cá thể của DecisionTreeClassifier có thuộc tính tree_, là một thể hiện của lớp (không có giấy tờ, tôi tin) Tree. Một số thăm dò trong thông dịch viên cho thấy rằng mỗi cá thể Tree có thông số max_depthxuất hiện là những gì bạn đang tìm kiếm - một lần nữa, nó không có giấy tờ.

Trong mọi trường hợp, nếu forest là bạn thể hiện của RandomForestClassifier, sau đó:

>>> [estimator.tree_.max_depth for estimator in forest.estimators_] 
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10] 

nên làm các trick.

+0

Cảm ơn bạn !! Đây chính xác là những gì tôi đang tìm kiếm. Tương tự, bạn có biết liệu có cách nào để xóa một cây cụ thể khỏi rừng ngẫu nhiên không? Tôi đang cố xóa cây với độ sâu ít nhất định. – iltp38

+0

Nó * có thể * đơn giản như xóa các bộ ước tính khỏi danh sách. Nghĩa là, để xóa cây đầu tiên, 'del forest.estimators_ [0]'. Hoặc chỉ giữ cây có độ sâu 10 hoặc cao hơn: 'forest.estimators_ = [e for e trong forest.estimators_ if e.tree.max_depth> = 10]'. Nhưng nó không giống như 'RandomForestClassifier' được xây dựng để làm việc theo cách này, và bằng cách sửa đổi' forest.estimators_' bạn có thể phá vỡ mọi thứ. Bạn có thể thử nó và xem kết quả có vẻ hợp lý hay không. Nếu bạn làm như vậy, bạn có thể muốn cập nhật 'forest.n_estimators = len (forest.estimators_)' để đo lường tốt. – jme

+0

Câu trả lời này không chính xác, điều này cho bạn biết độ sâu _allowed_ tối đa của mỗi cây trong rừng, chứ không phải độ sâu thực tế. Vì vậy, ví dụ một khu rừng ngẫu nhiên được huấn luyện với 'max_depth = 10' sẽ trả về:' '' [10, 10, 10, ...] '' ' –

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