2015-12-11 18 views
12

Rasgele bir orman oluşturmak için scikit-learn kullanıyorum. Ancak, her ağacın bireysel derinliklerini bulmak istiyorum. Basit bir özellik gibi görünüyor ama belgelere göre, (http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) erişim yolu yoktur.Python'un scikit-öğrenmesinde ağaç derinliğine nasıl erişiyorsunuz?

Bu mümkün değilse, bir Karar Ağacı modelinden ağaç derinliğine erişmenin bir yolu var mı?

Herhangi bir yardım için teşekkür ederiz. Teşekkür ederim.

cevap

15

RandomForestClassifier'un her bir örneği, DecisionTreeClassifier örneklerinin bir listesi olan estimators_ özniteliğine sahiptir. Belgeler, DecisionTreeClassifier örneğinin, Tree sınıfının (belgesiz, inanıyorum) bir örneğidir, tree_ özniteliğine sahip olduğunu gösterir. Tercümandaki bazı keşifler, her Tree örneğinin, 'un aradığınızı görmesi için max_depth parametresine sahip olduğunu gösterir - yine, belgesiz. Her durumda

, forest sonra RandomForestClassifier senin örneği, eğer:

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

hile yapmak gerekir.

+0

Teşekkür ederim! Tam olarak aradığım şey bu. Benzer şekilde, belirli bir ağacı rasgele ormandan el ile silmek için bir yol olup olmadığını biliyor musunuz? Ağaçları belirli bir derinlikten daha azıyla silmeye çalışıyorum. – iltp38

+0

* Bu, tahmin edicileri listeden silmek kadar basit olabilir. Yani, ilk ağacı silmek için, 'del forest.estimators_ [0] '. Ya da sadece ağaçları 10 veya daha fazla derinlikte tutmak için: 'forest.estimators_ = [e-ormanda e-posta.estimators_ ise e.tree.max_depth> = 10]' dır. Ama bu şekilde çalışmak için 'RandomForestClassifier' inşa edilmiş gibi görünmüyor ve 'forest.estimators_' değiştirerek bir şeyler kırıyor olabilirsiniz. Yine de deneyebilir ve sonuçların makul göründüğünü görebilirsin. Bunu yaparsanız, iyi önlem için 'forest.n_estimators = len (forest.estimators_)' yi güncellemek isteyebilirsiniz. – jme

+0

Bu cevap yanlış, size gerçek derinliği değil, ormandaki her bir ağacın maksimum _allowed_ derinliğini söyler. Örneğin, "max_depth = 10" ile eğitilen rastgele bir orman geri dönecektir: '' [10, 10, 10, ...] '' –