如何导入所有 sklearns 回归器

How can I import all of sklearns regressors

我正在做一些预测建模,想在 scikit-learn 中对不同类型的回归器进行基准测试,只是为了看看那里有什么以及它们在给定预测任务上的表现如何。

我受到这个 kaggle kernel 的启发,在这个 kaggle kernel 中,作者基本上手动导入了一堆分类器(大约 10 个)并对它们进行了基准测试。

我无法在 sklearn 中找到回归变量的完整导入列表,所以我正在尝试将 import 语句自动化以自动 return 我的列表类 我可以用。

我尝试动态导入 类:

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

如何获得实际的 类?

我发现我必须在模块对象上使用 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'>]