【问题标题】:How to import a class object from a list of objects?如何从对象列表中导入类对象?
【发布时间】:2021-11-23 06:25:52
【问题描述】:

使用以下代码:

from sklearn.utils import all_estimators
from sklearn import base

# Print all regressors
estimators = all_estimators(type_filter="regressor")
for name in estimators:
    print(name[0], name[1])

...呈现此响应:

ARDRegression <class 'sklearn.linear_model._bayes.ARDRegression'>
AdaBoostRegressor <class 'sklearn.ensemble._weight_boosting.AdaBoostRegressor'>
BaggingRegressor <class 'sklearn.ensemble._bagging.BaggingRegressor'>
BayesianRidge <class 'sklearn.linear_model._bayes.BayesianRidge'>
CCA <class 'sklearn.cross_decomposition._pls.CCA'>
DecisionTreeRegressor <class 'sklearn.tree._classes.DecisionTreeRegressor'>
DummyRegressor <class 'sklearn.dummy.DummyRegressor'>
ElasticNet <class 'sklearn.linear_model._coordinate_descent.ElasticNet'>
ElasticNetCV <class 'sklearn.linear_model._coordinate_descent.ElasticNetCV'>
ExtraTreeRegressor <class 'sklearn.tree._classes.ExtraTreeRegressor'>
ExtraTreesRegressor <class 'sklearn.ensemble._forest.ExtraTreesRegressor'>
GammaRegressor <class 'sklearn.linear_model._glm.glm.GammaRegressor'>
GaussianProcessRegressor <class 'sklearn.gaussian_process._gpr.GaussianProcessRegressor'>
...

那么import 怎么能在&lt;&gt; 的类对象中呢?所以我最终得到了类似(伪)的东西:

# Print/import all regressors
estimators = all_estimators(type_filter="regressor")
for name in estimators:
    print(name[0], name[1])
    import name[1]

...但是这当然行不通。谢谢!

更新 然后我想要做的是使用导入的类。尝试类似:

for name in estimators:
    globals()[name[0]] = name[1]
    params = name[0].get_params()
    print(params)

...不起作用。

【问题讨论】:

  • 为什么要导入它——它只是将类对象放在你的模块命名空间中?您已经在name[1] 中获得了类对象。
  • 假设你通过magic导入了ARDRegression,你通常会怎么称呼它? params = ARDRegression().get_params()?知道了这一点,我们可以通过中间字典来解决问题。

标签: python python-3.x scikit-learn


【解决方案1】:

你有一个名字和一个类,所以你可以将它们添加到你的命名空间

for name in estimators:
    globals()[name[0]] = name[1]

但字典可能更好

my_estimators = {name[0]:name[1] for name in estimators}

我不知道这些类是如何实例化的,但假设它们有两个参数,并且你知道你想要的那个的名称。然后你会做

my_estimator = my_estimators["ARDRegression"]("foo", "bar")
my_estimator.get_params()

【讨论】:

  • 那么我该如何使用这个类呢?使用第一个示例,我尝试导入第一个 ARDRegression 回归器,然后在其上运行 .get_params() ,但失败了。我会更新问题...
  • 添加示例....沿途有一些猜测。
  • 感谢您的澄清!有效!
【解决方案2】:

您可以简单地将all_estimators 的返回值转换为一个字典,其键是估算器名称,值是估算器类本身,您可以直接对其进行实例化:

from sklearn.utils import all_estimators

estimator_dict = dict(all_estimators(type_filter="regressor"))

# we get and instantiate the an ARDRegressor in the line below
ard_regression_estimator = estimator_dict['ARDRegression']()

print(ard_regression_estimator)  # output: ARDRegression()

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2017-12-29
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多