【问题标题】:Why I can't unpack the parameters for sklearn model using clf(**params)?为什么我无法使用 clf(**params) 解压 sklearn 模型的参数?
【发布时间】:2019-11-30 13:02:33
【问题描述】:

我只是想写一个类来帮助我创建对象。每个对象都是一个机器学习模型(例如:XGBoostRegressor、RandomForestRegressor、...)但是,当我使用 (**params) 时,会出现“RandomForestRegressor”对象不可调用的错误

我已经尝试查找它,但似乎是我的问题):

class SklearnExtra(object):
    def __init__(self, clf, seed = 0, params = None):
        params['random_state'] = seed
        self.clf = clf(**params)

    def train(self, x, y):
        self.clf.fit(x, y)

    def predict(self, x):
        return self.clf.predict(x)

    def fit(self, x, y):
        return self.clf.fit(x,y)

    def feature_importances(self, x, y):
        clf2 = self.clf.fit(x,y)
        return (clf2.feature_importances_)
rf_params = {'n_estimators': 1000, 'n_jobs': -1, 'warm_start': True, 'max_features':2}
Seed = 26121997
rf = SklearnExtra(clf = RandomForestRegressor(), seed = Seed, params = rf_params)

错误提示“RandomForestRegressor”对象不可调用

【问题讨论】:

  • 嘿,你能把你的整个traceback发上来吗?这样调试起来更容易。

标签: python scikit-learn random-forest


【解决方案1】:

clf = RandomForestRegressor()clf 分配给类 RandomForestRegressor 的实例,而不是将其分配给类本身。 然后程序在 self.clf = clf(**params) 上失败,因为您试图从实例实例化和对象,这是不可能的。

为了解决问题,只需将RandomForestRegressor 类传递给不带括号的clf 参数即可:

rf = SklearnExtra(clf = RandomForestRegressor, seed = Seed, params = rf_params)

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多