为什么我不能使用clf(**params)解包sklearn模型的参数?

2024-09-30 20:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想写一个类来帮助我创建对象。每个对象都是一个机器学习模型(例如:XGBoossTregressor,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)

错误说明“RandomForestRegressionor”对象不可调用


Tags: 对象selfreturndef错误paramspredictfeature
1条回答
网友
1楼 · 发布于 2024-09-30 20:28:14

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

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

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

相关问题 更多 >