Вложенная перекрестная проверка в Python с использованием Scikit Learn - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь использовать вложенную перекрестную проверку для сравнения моделей, но документация Scikit немного смутила меня с его реализацией внутреннего и внешнего l oop. Поэтому я надеюсь запустить его с моим текущим пониманием в области перекрестной проверки. Тем не менее, я не уверен, что способ, которым я управлял, точен.

Мой мыслительный процесс:

  1. разделить весь набор данных для обучения и тестирования наборов

  2. использовать набор данных поезда для настройки параметра с 5-кратным cv

  3. с выбранным параметром из шага 2, используйте весь набор данных для оценки производительности наилучшего параметра с использованием 10-кратного cv 20 раз.

Чтобы добиться этого, мой код включен ниже:

from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, cross_val_score, KFold, train_test_split
import numpy as np
import pandas as pd

df = pd.DataFrame(df)

x = df[predictor]
y = df[response]

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=.8, random_state=1)

p_grid = {"C": 2 ** np.arange(-1, 3, 2, dtype = float),
          "gamma": 2 ** np.arange(-1, 3, 2, dtype = float)}

svm = SVC(kernel="rbf")

inner_cv = KFold(n_splits=5, shuffle=True, random_state=1)
clf = GridSearchCV(estimator=svm, param_grid=p_grid, cv=inner_cv)
clf.fit(X_train, y_train)
tune_nested_scores = clf.best_score_ 
tune_nested_param = clf.best_params_

nested_scores = np.zeros(20)

clf_chosen = SVC(kernel='rbf', gamma=tune_nested_param['gamma'], C=tune_nested_param['C'])

for i in range(20):

    outer_cv = KFold(n_splits=10, shuffle=True, random_state=i)
    nested_score = cross_val_score(clf_chosen, X=x, y=y, cv=outer_cv)
    nested_scores[i] = nested_score.mean()

avg_score = nested_scores.mean()

print(avg_score)

Вопрос: выглядит ли приведенный выше код для выполнения работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...