Facilitateur de création de wrapper Scikit-Learn Transformers¶
Classe et fonction facilitant le wrapping Scikit-Learn d’un transformer personalisé.
Created on Mon Nov 23 12:12:30 2020
@author: Cyrile Delestre
-
class
dstk.features._transformers.Transformer(n_jobs: int, verbose: bool)[source]¶ Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixinClasse générique de transformation Scikit-Learn qui implémente une exécution compatible avec les Pipeline où les éléments doivent être traités un à un si ils sont dans une liste ou un itérable.
- Parameters:
- n_jobsint
nombre de processeurs en parallèle
- verbosebool
Si True bare de progression de process.
See also
Notes
Il est important d’implémenter la méthode udf_transform(self, X, **kargs) et surcharger les autres méthodes si besoin.
Examples
Exemple très simple d’un transformer utilisant la classe Transfomer qui permet d’ordonner les colonnes d’une DataFramme en fonction d’un ordre souhaité.
>>> from dataclasses import dataclass >>> from sklearn.ensemble import RandomForestClassifier >>> from sklearn.pipeline import Pipeline >>> from dstk.features import Transformer >>> from dstk.utils import check_dataframe >>> >>> @dataclass >>> class SortColumns(Transformer): >>> "Classe qui ordonne les colonnes d'une DataFrame." >>> order_col: list >>> n_jobs: int=1 >>> verbose: bool=False >>> >>> def udf_transform(self, X): >>> # check_dataframe vérifie s'il s'agit bien d'une DataFrame >>> # et que les colonnes de self.order_col sont bien présentes >>> check_dataframe(X, self.order_col) >>> return X[self.order_col]
>>> orderer = SortColumns(['col_3', 'col_1', 'col_2', 'col_0'], n_jobs=2) >>> clf = RandomForestClassifier() >>> pipe = Pipeline([('order_col', orderer), ('rf', clf)]) >>> pipe.fit(X, y)
-
fit(X: collections.abc.Iterable, y: None = None)[source]¶ Fonction fit pour être ISO avec Scikit-Learn
- Parameters:
- XIterable
Observations
- yNone
pour être ISO avec Scikit-Learn
-
transform(X: collections.abc.Iterable, **kargs)[source]¶ Méthode générique scikit-learn pour la transformation.
- Parameters:
- XIterable
Array-like, pour un traitement itératif un Iterable quelconque
- :**kargs: arguments propres au transformer
-
udf_transform(X: collections.abc.Iterable, **kargs)[source]¶ Transformation unitaire.
- Parameters:
- XIterable
Observations
-
dstk.features._transformers.make_transformer(udf_transform: collections.abc.Callable, n_jobs: int = 1, verbose: bool = False)[source]¶ Instentiatieur de classe Transformer, sert à éviter d’écrire une classe directement.
- Parameters:
- udf_transformCallable
fonction de transformation défini par l’utilisateur (user difined function) qui doit avoir pour prototypage :
udf_transform(X, **kargs)
- n_jobsint
nombre de processeurs en parallèle
- verboseint
Si True bare de progression de process.
See also
Notes
Si le transformer que l’on souhaite créer nécessite la surcharge de la fonction fit alors il est obliger de passer par la définition d’une classe.
De même udf_transform doit être une fonction simple, sinon il est très conseiller de passer par la définition d’une classe.
Examples
>>> from dataclasses import dataclass >>> from sklearn.ensemble import RandomForestClassifier >>> from sklearn.pipeline import Pipeline >>> from dstk.features import make_transformer >>> from dstk.utils import check_dataframe >>> >>> def udf_transform(X, order_col=['col_3', 'col_1', 'col_2', 'col_0']): >>> # check_dataframe vérifie s'il s'agit bien d'une DataFrame >>> # et que les colonnes de order_col sont bien présentes >>> check_dataframe(X, order_col) >>> return X[order_col] >>> >>> orderer = make_transformer(udf_transform) >>> clf = RandomForestClassifier() >>> pipe = Pipeline([('order_col', orderer), ('rf', clf)]) >>> pipe.fit(X, y)