Отображение результатов расколов с помощью GridSearchCV - PullRequest
0 голосов
/ 20 июня 2019

Итак, я изначально пытался работать с временным рядом и предварительно выполнить поиск по сетке. Я заметил, что 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 GridSearchCV, поэтому я пытаюсь использовать его, поскольку он более проверен, чем моя ручная версия, и, вероятно, будет работать быстрее.

gsc = GridSearchCV(RandomForestRegressor(), param_grid=RF_params, scoring=scorers,
               cv=TimeSeriesSplit(n_splits=5).split(X), verbose=10, n_jobs=-1, refit='mse')

Одна вещь, которую я смог добавить вручную, - это график каждого из моих разделений, чтобы увидеть, как наилучший параметр предварительно формировался на каждом из тестовых разделений, чтобы я мог визуально увидеть производительность. Мне интересно, есть ли способ сделать это, используя GridSearchCV. Похоже, вы можете построить график результатов, но я не нашел ничего, что позволило бы мне повторить этот тип вывода:

enter image description here

...