title: grid search over multiple classifiers
body: <p>Is there  a better  inbuilt way to do grid search and test multiple models in a single pipeline? Of course the parameters of the models would be different, which made is complicated for me to figure this out. Here is what I did:</p>
  <pre><code>from sklearn.pipeline import Pipeline
  from sklearn.ensemble import RandomForestClassifier
  from sklearn.neighbors import KNeighborsClassifier
  from sklearn.svm import SVC
  from sklearn.naive_bayes import MultinomialNB
  from sklearn.grid_search import GridSearchCV
  
  
  def grid_search():
      pipeline1 = Pipeline((
      ('clf', RandomForestClassifier()),
      ('vec2', TfidfTransformer())
      ))
  
      pipeline2 = Pipeline((
      ('clf', KNeighborsClassifier()),
      ))
  
      pipeline3 = Pipeline((
      ('clf', SVC()),
      ))
  
      pipeline4 = Pipeline((
      ('clf', MultinomialNB()),
      ))
      
      parameters1 = {
      'clf__n_estimators': [10, 20, 30],
      'clf__criterion': ['gini', 'entropy'],
      'clf__max_features': [5, 10, 15],
      'clf__max_depth': ['auto', 'log2', 'sqrt', None]
      }
  
      parameters2 = {
      'clf__n_neighbors': [3, 7, 10],
      'clf__weights': ['uniform', 'distance']
      }
  
      parameters3 = {
      'clf__C': [0.01, 0.1, 1.0],
      'clf__kernel': ['rbf', 'poly'],
      'clf__gamma': [0.01, 0.1, 1.0],
  
      }
      parameters4 = {
      'clf__alpha': [0.01, 0.1, 1.0]
      }
  
      pars = [parameters1, parameters2, parameters3, parameters4]
      pips = [pipeline1, pipeline2, pipeline3, pipeline4]
      
      print &quot;starting Gridsearch&quot;
      for i in range(len(pars)):
          gs = GridSearchCV(pips[i], pars[i], verbose=2, refit=False, n_jobs=-1)
          gs = gs.fit(X_train, y_train)
          print &quot;finished Gridsearch&quot;
          print gs.best_score_
  </code></pre>
  <p>However, this approach is still giving the best model within each classifier, and not comparing between classifiers.</p>