Je pense que M0rkHaV a la bonne idée. La classe de pipeline scikit-learn est un outil utile pour encapsuler plusieurs transformateurs différents à côté d' un estimateur en un seul objet, de sorte que vous suffit d'appeler vos méthodes importantes une fois ( fit()
, predict()
, etc.). Décomposons les deux principaux composants:
Les transformateurs sont des classes qui implémentent à la fois fit()
et transform()
. Vous connaissez peut-être certains des outils de prétraitement sklearn, commeTfidfVectorizer
et Binarizer
. Si vous regardez la documentation de ces outils de prétraitement, vous verrez qu'ils implémentent ces deux méthodes. Ce que je trouve plutôt cool, c'est que certains estimateurs peuvent également être utilisés comme étapes de transformation, par exemple LinearSVC
!
Les estimateurs sont des classes qui implémentent à la fois fit()
et predict()
. Vous constaterez que de nombreux classificateurs et modèles de régression implémentent ces deux méthodes et, en tant que tels, vous pouvez facilement tester de nombreux modèles différents. Il est possible d'utiliser un autre transformateur comme estimateur final (c'est-à-dire qu'il n'implémente pas nécessairement predict()
, mais qu'il implémente définitivement fit()
). Tout cela signifie que vous ne pourrez pas appeler predict()
.
Quant à votre modification: passons par un exemple textuel. En utilisant LabelBinarizer, nous voulons transformer une liste d'étiquettes en une liste de valeurs binaires.
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
Maintenant, lorsque le binarizer est installé sur certaines données, il aura une structure appelée classes_
qui contient les classes uniques que le transformateur «connaît». Sans appelerfit()
le binarizer n'a aucune idée de ce à quoi ressemblent les données, donc appeler transform()
n'aurait aucun sens. Cela est vrai si vous imprimez la liste des classes avant d'essayer d'ajuster les données.
print bin.classes_
J'obtiens l'erreur suivante en essayant ceci:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Mais lorsque vous installez le binarizer sur le vec
liste:
bin.fit(vec)
et essayez à nouveau
print bin.classes_
J'obtiens ce qui suit:
['cat' 'dog']
print bin.transform(vec)
Et maintenant, après avoir appelé transform sur le vec
objet, nous obtenons ce qui suit:
[[0]
[1]
[1]
[1]]
Quant aux estimateurs utilisés comme transformateurs, utilisons le DecisionTree
classifieur comme exemple d'extraction de caractéristiques. Les arbres de décision sont excellents pour de nombreuses raisons, mais pour nos besoins, ce qui est important, c'est qu'ils ont la capacité de classer les fonctionnalités que l' arbre a trouvées utiles pour prédire. Lorsque vous appelez transform()
un arbre de décision, il prend vos données d'entrée et trouve ce qu'il pense être les fonctionnalités les plus importantes. Vous pouvez donc y penser en transformant votre matrice de données (n lignes par m colonnes) en une matrice plus petite (n lignes par k colonnes), où les k colonnes sont les k caractéristiques les plus importantes trouvées par l'arbre de décision.