Изучая использование конвейеров и GridSearchCV, я попытался объединить регрессор случайного леса с регрессором опорных векторов. По отдельности GridSearchCV поставил оба примерно на 90%, где я сильно застрял. Но поставив SVR перед случайным лесом в пайплайне, он подскочил до 92%.
Я не смог найти ни одного примера этого, поэтому я предполагаю, что это не очень полезно, неправильно или что есть лучший способ сделать это. Был бы признателен за любое руководство.
Я создал быстрый пример, используя набор SKLearn Boston Housing с Lasso и Random forest. Объединение дало увеличение «mean_test_score» примерно с 62 % до 65 %. Соответствующий фрагмент приведен ниже, полный блокнот находится по адресу: http://nbviewer.jupyter.org/gist/Blebg/ce279345456dc706d2deddcfab49a984
class Lasso_t(Lasso): #Give Lasso a transform function
def transform(self, x):
return super(Lasso_t, self).predict(x).reshape(-1, 1)
#The pipe creates a Lasso regression prediction that Random Forest gets as a variable
pipe = Pipeline(steps = [
('std_scaler', StandardScaler()),
('union', FeatureUnion([('reg', Lasso_t(alpha = 0.2)),
('keep_X', FunctionTransformer(lambda x : x))])),
('rf', RandomForestRegressor(n_estimators = 100))])
params = dict(
rf__min_samples_leaf = [1,5,10],
rf__max_features = ['log2','sqrt'])
grid_search = GridSearchCV(pipe, param_grid=params, cv = 5)
grid_search.fit(X,y)
pd.DataFrame(grid_search.cv_results_).sort_values(by = 'rank_test_score').head(3)