因此,我最初尝试使用时间序列并执行网格搜索。我注意到GridSearchCV
使用k倍交叉验证,该采样对数据中的随机测试/训练拆分进行采样,这对于时间序列数据没有多大意义。结果,我尝试使用TimeSeriesSplit
在每个拆分中自己编写代码,并遍历ParameterGrid
中的参数。
在这里编码:
def find_optimal_paramters(self, X, y, regressor, parameters, scoring_metric='MAE', greater_is_better=False):
score_methods = {'MAE': metrics.mean_absolute_error,
'MSE': metrics.mean_squared_error,
'MSLE': metrics.mean_squared_log_error,
'r_qsuqred': metrics.r2_score}
scoring_metric = score_methods[scoring_metric]
# check if parameter list is empty and run return default params if so
if not parameters:
best_params = regressor.get_params()
best_score = 0
for e, p in enumerate(ParameterGrid(parameters)):
regressor.set_params(**p)
regressor.fit(X, y.ravel())
score = scoring_metric(regressor.predict(X), y)
if e == 0:
best_score = score
best_params = p
if greater_is_better:
if score > best_score:
best_score = score
best_params = p
elif score < best_score:
best_score = score
best_params = p
return best_score, best_params
我最近了解到,我可以将TimeSeriesSplit
传递给cv
的{{1}}参数,所以我尝试着使用它,因为它比我的手册版本更行之有效并且可能会运行得更快。
GridSearchCV
但是,我能够手动添加的一件事是绘制了每个分割的图形,以查看在每个测试分割上如何执行最佳参数,以便直观地看到性能。我想知道是否有一种使用gsc = GridSearchCV(RandomForestRegressor(), param_grid=RF_params, scoring=scorers,
cv=TimeSeriesSplit(n_splits=5).split(X), verbose=10, n_jobs=-1, refit='mse')
的方法。看来您可以对结果进行图形处理,但是我没有发现任何可以复制这种类型输出的内容: