Я хочу создать остаточный класс, который использует два регрессора, здесь Ridge и RandomForestRegressor, и я хотел бы иметь возможность передавать этот класс в GridSearchCV, но настройка параметров этих двух регрессоров была проблемой для меня. Я попытался установить эти параметры как параметры по умолчанию для моего остаточного класса, чтобы иметь возможность использовать их, но это не работает.
Я пытался использовать self.parameter и т. Д. Кроме того, было бы хорошо, если бы я установил параметры внутри класса (непосредственно давая им числа)
class Residual(base.BaseEstimator, base.RegressorMixin):
def __init__(self, alpha_ = 5, max_depth_ = 10, n_estimators_ = 10):
self.base = Ridge(alpha = alpha_)
self.residual = RandomForestRegressor(max_depth = max_depth_, n_estimators = n_estimators_)
def fit(self, X, y=None):
self.base = self.base.fit(X, y)
self.residual = self.residual.fit(X, np.array(y) - np.array(self.base.predict(X)))
return self
def predict(self, X):
return np.array(self.base.predict(X))+np.array(self.residual.predict(X))
pipline = Pipeline([('CST', ColumnSelectTransformer(['attributes'])),
('DF', DictFlatter()),
('DV', DictVectorizer(sparse = False)),
('res', Residual())])
param_grid = [{'res__alpha_': [.001, .005, .01, .05, .1],{'res__n_estimators_': [200],'res__max_depth_': [10]}]
GSCV = GridSearchCV(pipline, param_grid, cv = 10)
GSCV.fit(data, star_ratings)
Я получаю сообщение об ошибке:
ValueError: array must not contain infs or NaNs
Если я сделаю следующее, все будет хорошо:
class Residual(base.BaseEstimator, base.TransformerMixin, base.RegressorMixin):
def __init__(self, alpha_ = .01, max_depth_ = 10, n_estimators_ = 150):
self.base = Ridge(.01)
self.residual = RandomForestRegressor(max_depth = 10, n_estimators = 150)
def fit(self, X, y=None):
self.base = self.base.fit(X, y)
self.residual = self.residual.fit(X, np.array(y) - np.array(self.base.predict(X)))
return self
def predict(self, X):
return np.array(self.base.predict(X))+np.array(self.residual.predict(X))