web-dev-qa-db-fra.com

Quelle est la différence entre pipeline et make_pipeline dans scikit?

Je l'ai obtenu sur la page Web de sklearn:

a) Pipeline: Pipeline de transformations avec un estimateur final

b) Make_pipeline: Construisez un Pipeline à partir des estimateurs donnés. Il s'agit d'un raccourci pour le constructeur Pipeline.

Mais je ne comprends toujours pas quand je dois utiliser chacun d'eux. Quelqu'un peut-il me donner un exemple?

25
Aizzaac

La seule différence est que make_pipeline génère automatiquement les noms des étapes.

Les noms d'étape sont nécessaires, par exemple si vous souhaitez utiliser un pipeline avec des utilitaires de sélection de modèle (par exemple GridSearchCV). Avec la recherche dans la grille, vous devez spécifier des paramètres pour différentes étapes d'un pipeline:

pipe = Pipeline([('vec', CountVectorizer()), ('clf', LogisticRegression()])
param_grid = [{'clf__C': [1, 10, 100, 1000]}
gs = GridSearchCV(pipe, param_grid)
gs.fit(X, y)

comparer avec make_pipeline:

pipe = make_pipeline(CountVectorizer(), LogisticRegression())     
param_grid = [{'logisticregression__C': [1, 10, 100, 1000]}
gs = GridSearchCV(pipe, param_grid)
gs.fit(X, y)

Donc, avec Pipeline:

  • les noms sont explicites, vous n'avez pas à les comprendre si vous en avez besoin;
  • le nom ne change pas si vous changez l'estimateur/transformateur utilisé dans une étape, par ex. si vous remplacez LogisticRegression () par LinearSVC (), vous pouvez toujours utiliser clf__C.

make_pipeline:

  • notation plus courte et sans doute plus lisible;
  • les noms sont générés automatiquement à l'aide d'une règle simple (nom en minuscule d'un estimateur).

Quand les utiliser dépend de vous :) Je préfère make_pipeline pour des expériences rapides et Pipeline pour un code plus stable; une règle de base: IPython Notebook -> make_pipeline; Python module dans un projet plus grand -> Pipeline. Mais ce n'est certainement pas une grosse affaire d'utiliser make_pipeline dans un module ou Pipeline dans un court script ou un cahier.

52
Mikhail Korobov