Как мне попробовать несколько базовых оценок в BayesSearchCV? - PullRequest
0 голосов
/ 17 января 2020

Вот код:

train_df = avenues[["LFA's", "Spend"]].sample(frac=0.8,random_state=0)
test_df = avenues[["LFA's", "Spend"]].drop(train_df.index)
train_df = clean_dataset(train_df)
test_df = clean_dataset(test_df)
train_df = train_df.reset_index(drop=True)
test_df = test_df.reset_index(drop=True)
train_stats = train_df.describe()
train_stats = train_stats.pop("LFA's")
train_stats = train_stats.transpose()
train_labels = train_df.pop("LFA's").values
test_labels = test_df.pop("LFA's").values
normed_train_data = np.array(norm(train_df).values).reshape((train_df.shape[0], 1, 1)) #got rid of .values
normed_test_data = np.array(norm(test_df).values).reshape((test_df.shape[0], 1, 1)) #got rid of .values
model = KerasRegressor(build_fn=build_model, epochs=300, 
                       batch_size=1, verbose=0)
for base in [RandomForestRegressor(), AdaBoostRegressor(), BaggingRegressor(), GradientBoostingRegressor(), MLPRegressor()]:
     gs = BayesSearchCV(model, param_grid, cv=5, n_iter=1, n_jobs=1,
                        optimizer_kwargs={'base_estimator': base},
                        return_train_score=True,
                        fit_params={"callbacks": [es_acc, tfdocs.modeling.EpochDots()]})#, es_loss]})
     gs.fit(normed_train_data, train_labels)
     print(gs.best_estimator_.score(normed_test_data, test_labels))

Очевидно, что это пробует все base_estimators, но это не идеально. Я думаю, что я где-то читал, что вы можете добавить несколько базовых оценок, и он выберет лучшую. Я продолжаю сталкиваться с одной и той же проблемой, в прогнозах практически нет различий. Причина, которую я обнаружил, заключается в том, что я использовал RandomForests в качестве базовой оценки, и это было проблемой. Я использовал гауссовский процесс по умолчанию, и была разница, но она была крошечная . Так что я сейчас делаю подход с использованием дробовика и использую различные базовые оценки, чтобы попытаться получить лучшие прогнозы.

Кроме того, кто-то может объяснить, почему лучшим результатом будет что-то вроде -510.18739 ?

Пожалуйста, расскажите мне о лучшем способе сделать это. Спасибо!

...