2017-10-20 131 views
1

我正在做一些預測建模,並且想要對scikit-learn中的不同種類的迴歸器進行基準測試,以瞭解它們在哪些方面以及它們在給定預測任務中的表現。如何導入所有sklearns迴歸器

我受到啓發,通過這個kaggle kernel做到這一點,其中作者基本上手動導入一堆分類器(大約10)並對它們進行基準測試。

我無法在sklearn中找到對於迴歸者的全面導入列表,因此我試圖自動將import語句自動返回給我一個我可以使用的類的列表。

我試圖動態導入類:

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()) 

但我只拿回名稱作爲字符串,而不是類:

['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'>] 

我怎樣才能得到實際的類?

回答

2

我想通了,我不得不模塊對象上使用getattr

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'>] 
相關問題