Aşağıda benim boru hattım var ve bu parametrelerimi modelden ModelTransformer sınıfını kullanarak geçiremiyorum. (http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html)(Python - sklearn) Gridsearchcv tarafından ModelTransformer sınıfını özelleştirmek için parametrelere nasıl geçilir
Hata mesajı bana mantıklı geliyor, ancak bunu nasıl düzeltebileceğimi bilmiyorum. Bunu düzeltmek için bir fikrin var mı? Teşekkürler.
# define a pipeline
pipeline = Pipeline([
('vect', DictVectorizer(sparse=False)),
('scale', preprocessing.MinMaxScaler()),
('ess', FeatureUnion(n_jobs=-1,
transformer_list=[
('rfc', ModelTransformer(RandomForestClassifier(n_jobs=-1, random_state=1, n_estimators=100))),
('svc', ModelTransformer(SVC(random_state=1))),],
transformer_weights=None)),
('es', EnsembleClassifier1()),
])
# define the parameters for the pipeline
parameters = {
'ess__rfc__n_estimators': (100, 200),
}
# ModelTransformer class. It takes it from the link
(http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html)
class ModelTransformer(TransformerMixin):
def __init__(self, model):
self.model = model
def fit(self, *args, **kwargs):
self.model.fit(*args, **kwargs)
return self
def transform(self, X, **transform_params):
return DataFrame(self.model.predict(X))
grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, refit=True)
hata iletisi: ValueError: tahmincisi ModelTransformer geçersiz parametre n_estimators. Iç içe geçmiş nesneler için özel bir adlandırma kuralı vardır.
Sorduğunuz için teşekkürler - Aynı soru vardı. Sana başka bir şey sormama izin ver. * Self.model.fit'in (* args, ** kwargs) * neden çalıştığını biliyor musunuz? Demek istediğim, genellikle uygun yöntemi çağırırken n_estimatörler gibi hipermetrelerden geçmezsiniz, ancak, sınıf örneğini tanımlarken, örneğin, rfc = RandomForestClassifier (n_estimators = 100), oluşturduğunuzda rfc.fit (X, y) – drake
@drake bir ModelTransformer örneğiyle, bir modelde parametrelerini geçmeniz gerekir. Örneğin, ModelTransformer (RandomForestClassifier (n_jobs = -1, random_state = 1, n_estimators = 100))). Ve burada self.model.fit (* args, ** kwargs) çoğunlukla self.model.fit (X, y) anlamına gelir. – nkhuyu
Teşekkürler, @nkhuyu. Bunun nasıl çalıştığını biliyorum. Nedenini soruyordum. Self.model = model olduğundan, self.model = RandomForestClassifier (n_jobs = -1, random_state = 1, n_estimators = 100). Anladım * args paketini açıyor (X, y), ama ben anlamıyorum çünkü self.model zaten hiperparametreleri bildiğinde fit metodundaki kwargs. – drake