Вот код:
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 ?
Пожалуйста, расскажите мне о лучшем способе сделать это. Спасибо!