5

sklearn.pipeline.Pipeline nesnesinde bir adım silmek veya eklemek mümkün mü?scikit-learn adımında bir adım ekleyin veya silin Pipeline

Pipeline nesnesinde bir adımla veya adımsız ızgara arama yapmaya çalışıyorum. Ve boru hattındaki bir adımı ekleyip silip edemeyeceğimi merak ediyorum. Pipeline kaynak kodunu gördüm, tüm adımları tutan bir self.steps nesnesi var. Adımları named_steps()'dan alabiliriz. Değiştirmeden önce emin olmak istiyorum, beklenmedik etkilere neden olmam.

from sklearn.pipeline import Pipeline 
from sklearn.svm import SVC 
from sklearn.decomposition import PCA 
estimators = [('reduce_dim', PCA()), ('svm', SVC())] 
clf = Pipeline(estimators) 
clf 

eklemek veya bu listede silmek o zaman, biz steps = clf.named_steps() böyle bir şey yapmak mümkün mü: Burada

bir örnek koddur? Bu, clf nesnesinde istenmeyen bir etkiye neden olur mu?

cevap

1

Evet, bu mümkün, ancak Boru Hattının başlangıçta ihtiyaç duyduğu aynı koşulları yerine getirmelisiniz, yani sonuncu hariç herhangi bir adımda yordayıcı ekleyemezsiniz, Pipeline.steps'i güncelledikten sonra fit numaralı telefonu aramanız gerekir, çünkü bu güncellemeden sonra tüm adımlar (Belki de önceki fit çağrılarında öğrenildi) geçersiz kılınacak, ayrıca Pipeline'ın son adımı her zaman fit yöntemini uygulamalıdır, önceki adımların tümü fit_transform'u uygulamalıdır.

Evet, geçerli kod tabanı içinde çalışacak, ancak göreviniz için iyi bir çözüm olmadığını düşünüyorum, bu kodunuzu mevcut Pipeline uygulamasına daha bağımlı hale getiriyor, bence değiştirilmiş adımlarla yeni Boru Hattı oluşturmak daha uygun Pipeline en azından başlatma aşamasındaki tüm adımlarınızı onaylayacağından, yeni Boru Hattının oluşturulması, mevcut boru hattının adımlarının değiştirilmesiyle ilgili hız açısından önemli ölçüde farklılık göstermeyecektir, ancak daha önce söylediğim gibi - adımların her modifikasyonundan sonra yeni Boru Hattı oluşturulması Birisi Boru Hattı'nın uygulanmasını önemli ölçüde değiştirdiğinde daha güvenlidir. ilkel test dayanarak

+0

Yorumlarınız için teşekkür ederiz. Adımları doğrudan değiştirmekle ilgili endişelerim de endişemdir, bu yüzden bunu yapmanın güvenli bir yolu olup olmadığını sordum. Oh, neden yeni boru hatları oluşturmak yerine boru hatlarını değiştirmek istiyorum. Nedeni, farklı boru hattı ile bir sürü deney yapmak istediğim içindir. Bu yüzden onları kod içinde değiştirmek tercih edilen bir yoldur. Yeni Boru Hattı oluşturmanın da iyi bir yol olduğuna katılıyorum. Muhtemelen bunu tekrar düşünüyorum. Teşekkürler. (Hala birisinin güvenli bir şekilde adımlarını değiştirmenin bir yolunu bulmasını bekliyorum :) – Bin

2

güvenle sizin gibi bir scikit-öğrenme boru hattından bir adım kaldırabilir olur n çalışıyoruz bireysel tahmincisi pozisyonunu basit

clf_pipeline.steps.pop(n) 

ile herhangi bir liste öğesi, ayırmak.

+0

Cevabınız için teşekkürler. Lütfen "ilkel testlere dayanarak" genişleyebilir misiniz? – Bin

+1

Aynı vectorization adımlarla yaklaşık 500 önceden eğitilmiş pipeline sahibim. Bu boru hatlarından birinin vectorization adımını kullanarak gelen verileri dönüştürdüm, daha sonra her bir pipeline'ın pre-vectorized veri üzerindeki predict_proba metodunu çalıştırmadan önce bu adımı tüm boru hatlarından çıkardım. Ortaya çıkan puanlar, her bir modifiye edilmemiş boru hattını, ön-vektörelize edilmeksizin ham veriler üzerinde çalıştırmış olmama ile aynıydı ve genel çalışma süresi, aynı vektörizasyon aşamasını tekrar tekrar yapmadığım için geliştirildi. Bunun sadece karma vektörü gibi vatansız transformatörlerle çalıştığını unutmayın. – labelmaker

2

Herkesin sadece silme adımından bahsettiğini görüyorum. Ayrıca belirli bir konuma içine bir madde eklemek, böylece listeleri gibi aynı şekilde

pipe.steps.append(['step name',transformer()]) 

pipe.steps eser yapın:: Eğer aynı zamanda boru hattının bir adım eklemek istediğiniz

pipe.steps.insert(1,['estimator',transformer()]) #insert as second step 
0

Biz İş akışları gibi daha karmaşık bir grafik oluşturmak için Pipeline'a bir boru hattı olan PipeGraph'ı geliştirdi. Izgara arama sırasında iş akışının bağlantılarını değiştirmeyi mümkün kılar (Bkz. https://mcasl.github.io/PipeGraph/'daki örnek galeri).

İlgili konular