为什么我不能使用 clf(**params) 解压 sklearn 模型的参数?
Why I can't unpack the parameters for sklearn model using clf(**params)?
我只是想写一个 class 来帮助我创建对象。每个对象都是一个机器学习模型(例如:XGBoostRegressor,RandomForestRegressor,...)但是,当我使用(**params)时,出现错误 'RandomForestRegressor' object is not callable
我已经尝试查找它,但似乎是我的问题):
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' 对象不可调用
clf = RandomForestRegressor()
将 clf
分配给 class RandomForestRegressor
的实例,而不是将其分配给 class 本身。
然后程序在 self.clf = clf(**params)
上失败,因为您试图从实例中实例化和对象,这是不可能的。
为了解决这个问题,只需将 RandomForestRegressor
class 传递给 clf
参数而不用括号:
rf = SklearnExtra(clf = RandomForestRegressor, seed = Seed, params = rf_params)
我只是想写一个 class 来帮助我创建对象。每个对象都是一个机器学习模型(例如:XGBoostRegressor,RandomForestRegressor,...)但是,当我使用(**params)时,出现错误 'RandomForestRegressor' object is not callable
我已经尝试查找它,但似乎是我的问题):
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' 对象不可调用
clf = RandomForestRegressor()
将 clf
分配给 class RandomForestRegressor
的实例,而不是将其分配给 class 本身。
然后程序在 self.clf = clf(**params)
上失败,因为您试图从实例中实例化和对象,这是不可能的。
为了解决这个问题,只需将 RandomForestRegressor
class 传递给 clf
参数而不用括号:
rf = SklearnExtra(clf = RandomForestRegressor, seed = Seed, params = rf_params)