Facilitateur de création de wrapper Scikit-Learn Regressor/Classifier

Classe pour wrapper facilement un modèle de machine learning personnel avec Scikit-Learn.

Created on Mon Nov 23 13:31:25 2020

@author: Cyrile Delestre

class dstk.ml._ml.Base(n_jobs: int, verbose: bool)[source]

Bases: sklearn.base.BaseEstimator

Classe générique de BaseEstimator 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. Elle est compatible pour les Classifier et les Regressor. Elle nécessite l’implémentation de udf_fit(X, y, **kargs) et udf_predict(self, X, **kargs).

Parameters:
n_jobsint

nombre de processeurs en parallèle

verbosebool

Si True bare de progression de process.

See also

Regressor, Classifier

Notes

Cette classe n’est pas à utiliser directement (sauf si nécessaire). Il est préférable de se reporter sur la classe Regressor s’il s’agit d’un regresseur ou Classifier s’il s’agit d’un classifieur.

fit(X: collections.abc.Iterable, y: Optional[collections.abc.Iterable] = None, **kargs)[source]

Fonction fit pour être ISO avec Scikit-Learn

Parameters:
XIterable

pour un traitement itératif un Iterable

yOptional[Iterable]

target de l’entrainement.

**kargs :

arguments propres au transformer

predict(X: collections.abc.Iterable, **kargs)[source]

Fonction predict pour être ISO avec Scikit-Learn

Parameters:
XIterable

pour un traitement itératif un Iterable

**kargs :

arguments propres au transformer

udf_fit(X: collections.abc.Iterable, y: collections.abc.Iterable, **kargs)[source]

Fit unitaire.

udf_predict(X: collections.abc.Iterable, **kargs)[source]

Prédiction unitaire.

class dstk.ml._ml.Classifier(n_jobs: int, verbose: bool)[source]

Bases: dstk.ml._ml.Base, sklearn.base.ClassifierMixin

Classe générique Classifier héritant de la classe Base.

Classe générique de BaseEstimator 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. Elle nécessite l’implémentation de udf_fit(X, y, **kargs) et udf_predict(X, **kargs) et udf_predict_proba(X, **kargs).

Parameters:
n_jobsint

nombre de processeurs en parallèle

verbosebool

Si True bare de progression de process.

See also

Regressor, dstk.pytorch

Notes

A utiliser si l’algorithme de classification n’est pas standard à Scikit-Learn. Par exemple Gensim, Tensorflow, PyTorch, etc.

A noter que pour PyTorch il est conseillé d’utiliser dstk.pytorch wrapper d’un modèle PyTorch à Scikit-Learn.

Examples

Considérons que je possède un modèle SuperAlgoClassifier qui n’est pas prototypé Scikit-Learn.

>>> from dataclasses import dataclass
>>> from sklearn.preprocessing import RobustScaler
>>> from sklearn.pipeline import Pipeline
>>> ...
>>> from mon_projet import SuperAlgoClassifier
>>> from dstk.ml import Classifier
>>> 
>>> @dataclass
>>> class SuperAlgo2Sklear(Classifier):
>>>     "Classe SuperAlgoClassifier vers Scikit-Learn."
>>>     model: SuperAlgoClassifier
>>>     n_jobs: int=1
>>>     verbose: bool=False
>>> 
>>>     def udf_fit(self, X, y, lr=1e-3):
>>>         self.model.train(X, y, lr)
>>> 
>>>     def udf_predict(self, X, weights = None):
>>>         return self.model.estimation(X, weights)
>>> 
>>>     def udf_predict_proba(self, X, weights = None)
>>>         return self.model.estimation(X, weights, proba=True)
>>> scal = RobustScaler()
>>> mon_model = SuperAlgoClassifier(**kargs_de_mon_SuperAlgoClassifier)
>>> clf = SuperAlgo2Sklear(mon_model, verbose=True)
>>> pipe = Pipeline([('scale', scal), ('classifier', clf)])
>>> pipe.fit(X, y, lr=1e-5)
predict_proba(X: collections.abc.Iterable, **kargs)[source]

Fonction predict_proba pour être ISO avec Scikit-Learn

Parameters:
XIterable

DataFrame, pour un traitement itératif un Iterable

**kargs :

arguments propres au transformer

udf_predict_proba(X: collections.abc.Iterable, **kargs)[source]

Prédiction unitaire.

class dstk.ml._ml.Regressor(n_jobs: int, verbose: bool)[source]

Bases: dstk.ml._ml.Base, sklearn.base.RegressorMixin

Classe générique Regressor héritant de la classe Base.

Classe générique de BaseEstimator 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. Elle nécessite l’implémentation de udf_fit(X, y, **kargs) et udf_predict(self, X, **kargs).

Parameters:
n_jobsint

nombre de processeurs en parallèle

verbosebool

Si True bare de progression de process.

See also

Classifier, dstk.pytorch

Notes

A utiliser si l’algorithme de régression n’est pas standard à Scikit-Learn. Par exemple Gensim, Tensorflow, PyTorch, etc.

A noter que pour PyTorch il est conseillé d’utiliser dstk.pytorch wrapper d’un modèle PyTorch à Scikit-Learn.

Examples

Considérons que je possède un modèle SuperAlgoRegressor qui n’est pas prototypé Scikit-Learn.

>>> from dataclasses import dataclass
>>> from sklearn.preprocessing import RobustScaler
>>> from sklearn.pipeline import Pipeline
>>> ...
>>> from mon_projet import SuperAlgoRegressor
>>> from dstk.ml import Regressor
>>> 
>>> @dataclass
>>> class SuperAlgo2Sklear(Regressor):
>>>     "Classe SuperAlgoRegressor vers Scikit-Learn."
>>>     model: SuperAlgoRegressor
>>>     n_jobs: int=1
>>>     verbose: bool=False
>>> 
>>>     def udf_fit(self, X, y, lr=1e-3):
>>>         self.model.train(X, y, lr)
>>> 
>>>     def udf_predict(self, X, weights = None):
>>>         return self.model.estimation(X, weights)
>>> scal = RobustScaler()
>>> mon_model = SuperAlgoRegressor(**kargs_de_mon_SuperAlgoRegressor)
>>> reg = SuperAlgo2Sklear(mon_model, verbose=True)
>>> pipe = Pipeline([('scale', scal), ('regressor', reg)])
>>> pipe.fit(X, y, lr=1e-5)