0

我有一个Pipeline对象,我想适合不同的训练和测试标签组合,因此使用fit对象创建不同的预测。但我相信fit使用相同的分类器对象摆脱了以前的fit对象。对不同拟合模型重复使用逻辑回归对象

我的代码的一个例子是:

text_clf = Pipeline([('vect', CountVectorizer(analyzer="word",tokenizer=None,preprocessor=None,stop_words=None,max_features=5000)), 
          ('tfidf', TfidfTransformer(use_idf=True,norm='l2',sublinear_tf=True)), 
          ('clf',LogisticRegression(solver='newton-cg',class_weight='balanced', multi_class='multinomial',fit_intercept=True), 
         )]) 

    print "Fitting the open multinomial BoW logistic regression model for probability models...\n" 
    open_multi_logit_words = text_clf.fit(train_wordlist, train_property_labels) 

    print "Fitting the open multinomial BoW logistic regression model w/ ",threshold," MAPE threshold...\n" 
    open_multi_logit_threshold_words = (text_clf.copy.deepcopy()).fit(train_wordlist, train_property_labels_threshold) 

然而,分类对象没有deepcopy()方法。我怎样才能达到我所需要的,而不必定义:

text_clf_open_multi_logit = Pipeline([('vect', CountVectorizer(analyzer="word",tokenizer=None,preprocessor=None,stop_words=None,max_features=5000)), 
           ('tfidf', TfidfTransformer(use_idf=True,norm='l2',sublinear_tf=True)), 
           ('clf',LogisticRegression(solver='newton-cg',class_weight='balanced', multi_class='multinomial',fit_intercept=True), 
          )]) 

对于我所有的16个分类组合?

回答

1

我会尝试

text_clf0=copy.deepcopy(text_clf) 
open_multi_logit_threshold_words = text_clf0.fit(train_wordlist, train_property_labels_threshold) 

编辑:您可以使用列表

text_clf_list=[copy.deepcopy(text_clf) for _ in range(16)] 

或直接

copy.deepcopy(text_c‌​lf).fit(train_wordlis‌​t, train_property_label‌​s_threshold) 
+0

这就是我恰恰不想做的事。因为我必须复制该行16 +型号:) –

+0

并使用1,2,3等 –

+0

它确实发布你的追踪 – marmouset