2017-10-20 17 views
1

Je fais une modélisation prédictive et j'aimerais référencer différents types de régresseurs dans scikit-learn, juste pour voir ce qui existe et comment ils fonctionnent sur une tâche de prédiction donnée.Comment puis-je importer tous les régresseurs de sklearns?

Je me suis inspiré de faire ceci par ce kaggle kernel dans lequel l'auteur importe essentiellement manuellement un groupe de classificateurs (environ 10) et les compare.

J'ai des difficultés à trouver une liste complète des importations pour les régresseurs dans sklearn alors j'essaie d'automatiser les instructions import pour me renvoyer automatiquement une liste de classes que je peux utiliser.

J'ai essayé d'importer dynamiquement les classes:

from importlib import import_module 
import sklearn 

def all_regressors(): 
    regressors=[] 
    for module in sklearn.__all__: 
     try: 
      regressors.extend([cls for cls in import_module(f'sklearn.{module}').__all__ if 'Regress' in cls ]) 
     except: 
      pass 
    regressors.append(sklearn.svm.SVR) 
    return regressors 
print(all_regressors()) 

Mais je ne reçoivent que les noms sous forme de chaînes, plutôt que les classes:

['RandomForestRegressor', 'ExtraTreesRegressor', 'BaggingRegressor', 
'GradientBoostingRegressor', 'AdaBoostRegressor', 
'GaussianProcessRegressor', 'IsotonicRegression', 'ARDRegression', 
'HuberRegressor', 'LinearRegression', 'LogisticRegression', 
'LogisticRegressionCV', 'PassiveAggressiveRegressor', 
'RandomizedLogisticRegression', 'SGDRegressor', 'TheilSenRegressor', 
'RANSACRegressor', 'MultiOutputRegressor', 'KNeighborsRegressor', 
'RadiusNeighborsRegressor', 'MLPRegressor', 'DecisionTreeRegressor', 
'ExtraTreeRegressor', <class 'sklearn.svm.classes.SVR'>] 

Comment puis-je obtenir les classes réelles?

Répondre

2

Je compris que je devais utiliser getattr sur l'objet du module:

from importlib import import_module 
import sklearn 

def all_regressors(): 
    regressors=[] 
    for module in sklearn.__all__: 
     try: 
      module = import_module(f'sklearn.{module}') 
      regressors.extend([getattr(module,cls) for cls in module.__all__ if 'Regress' in cls ]) 
     except: 
      pass 
    regressors.append(sklearn.svm.SVR) 
    return regressors 
print(all_regressors()) 
[<class 'sklearn.ensemble.forest.RandomForestRegressor'>, <class 
'sklearn.ensemble.forest.ExtraTreesRegressor'>, <class 
'sklearn.ensemble.bagging.BaggingRegressor'>, <class 
'sklearn.ensemble.gradient_boosting.GradientBoostingRegressor'>, 
<class 'sklearn.ensemble.weight_boosting.AdaBoostRegressor'>, <class 
'sklearn.gaussian_process.gpr.GaussianProcessRegressor'>, <class 
'sklearn.isotonic.IsotonicRegression'>, <class 
'sklearn.linear_model.bayes.ARDRegression'>, <class 
'sklearn.linear_model.huber.HuberRegressor'>, <class 
'sklearn.linear_model.base.LinearRegression'>, <class 
'sklearn.linear_model.logistic.LogisticRegression'>, <class 
'sklearn.linear_model.logistic.LogisticRegressionCV'>, <class 
'sklearn.linear_model.passive_aggressive.PassiveAggressiveRegressor'>, 
<class 'sklearn.linear_model.randomized_l1.RandomizedLogisticRegression'>, <class 
'sklearn.linear_model.stochastic_gradient.SGDRegressor'>, <class 
'sklearn.linear_model.theil_sen.TheilSenRegressor'>, <class 
'sklearn.linear_model.ransac.RANSACRegressor'>, <class 
'sklearn.multioutput.MultiOutputRegressor'>, <class 
'sklearn.neighbors.regression.KNeighborsRegressor'>, <class 
'sklearn.neighbors.regression.RadiusNeighborsRegressor'>, <class 
'sklearn.neural_network.multilayer_perceptron.MLPRegressor'>, <class 
'sklearn.tree.tree.DecisionTreeRegressor'>, <class 
'sklearn.tree.tree.ExtraTreeRegressor'>, <class 
'sklearn.svm.classes.SVR'>]