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.BaseEstimatorClasse 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
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
-
class
dstk.ml._ml.Classifier(n_jobs: int, verbose: bool)[source]¶ Bases:
dstk.ml._ml.Base,sklearn.base.ClassifierMixinClasse 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
-
class
dstk.ml._ml.Regressor(n_jobs: int, verbose: bool)[source]¶ Bases:
dstk.ml._ml.Base,sklearn.base.RegressorMixinClasse 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)