2013-10-09 9 views
9

sklearn.pipeline'da "isteğe bağlı" bir adımı ayarlayabilir miyim? Örneğin, bir sınıflandırma problemi için bir ExtraTreesClassifier'u AND ile bir PCA dönüşümü olmadan denemek isteyebilirim. Pratikte, PCA adımının geçişini belirten ek bir parametreli bir boru hattı olabilir, böylece GridSearch ve benzeri bir yöntemle optimizasyon yapabilirim. Sklearn kaynağında böyle bir uygulama görmüyorum, fakat herhangi bir iş var mı? etrafında? boru hattında sonraki adımda olası parametre değerleri bir önceki adımda (örneğin ExtraTreesClassifier.max_features geçerli değerler PCA.n_components bağlıdır) parametrelere bağlı olabilir çünküSklearn boru hattında belirli bir adımı değiştirmek mümkün mü?

Dahası, mümkün sklearn.pipeline böyle bir koşullu bağımlılık belirtmektir ve sklearn.grid_search?

Teşekkür ederiz!

cevap

14
  • Pipeline adımlar henüz ızgara aramada isteğe yapılamaz ancak hızlı bir çözüm olarak istendiğinde PCA kapatmak için bir boolean parametresi ile kendi OptionalPCA bileşenine PCA sınıf sarabilirdiniz. Daha karmaşık arama alanlarını kurmak için hyperopt'a bir göz atmak isteyebilirsiniz. Bu tür kalıpları varsayılan olarak desteklemek için iyi bir sklearn entegrasyonuna sahip olduğunu düşünüyorum ama artık doktora bulamıyorum. Belki de this talk'a bir göz atın.

  • Bağımlı parametreler sorunu için, GridSearchCV bu durumda işlem yapacak ağaçların ağaçlarını destekler as demonstrated in the documentation. Gönderen

+7

As Bir yan not, 'ExtraTreesClassifier.max_features' bir tamsayı değeri yerine 0.0 ve 1.0 arasında bir float değeri olabileceğini unutmayın. Bu, durumunuzda olduğu gibi, gerçek özellik değişkeni olduğunda faydalıdır. –

+0

Anlayışlı cevaplar için ikinize de teşekkürler. Bence tam da aradığım şey onlardı. – dolaameng

2

docs:

Bireysel adımlar da parametre olarak değiştirilebilir ve olmayan nihai adımlar Yok ayarlayarak göz ardı edilebilir

:

from sklearn.linear_model import LogisticRegression 
params = dict(reduce_dim=[None, PCA(5), PCA(10)], 
       clf=[SVC(), LogisticRegression()], 
       clf__C=[0.1, 10, 100]) 
grid_search = GridSearchCV(pipe, param_grid=params)