Шаг 133.
Глубокое обучение на Python. ... . Оценка моделей машинного обучения. Обучающие, проверочные и контрольные наборы данных. Перекрестная проверка по K блокам

    На этом шаге мы рассмотрим общий принцип организации такой проверки.

    При использовании этого подхода данные разбиваются на K блоков равного размера. Для каждого блока i производится обучение модели на остальных K - 1 блоках и оценка на блоке i. Окончательная оценка рассчитывается как среднее K промежуточных оценок. Такой метод может пригодиться, когда качество модели слишком сильно зависит от деления данных на обучающую/контрольную выборки. Подобно проверке с простым расщеплением выборки, этот метод не избавляет от необходимости использовать отдельную проверочную выборку для калибровки модели.

    Схематически перекрестная проверка по K блокам выглядит, как показано на рисунке 1.


Рис.1. Перекрестная проверка по трем блокам

    В примере 5.6 отражена простейшая реализация этого приема.


Пример 5.6. Перекрестная проверка по K блокам (обратите внимание, что метки опущены для простоты)
k = 3
num_validation_samples = len(data) // k
np.random.shuffle(data)
validation_scores = []
for fold in range(k): 
  # Выбор блока данных для проверки
  validation_data = data[num_validation_samples * fold: 
                         num_validation_samples * (fold + 1)] 
  # Использование остальных данных для обучения. 
  # Обратите внимание, что оператор + здесь выполняет 
  # конкатенацию списков, а не вычисляет сумму
  training_data = np.concatenate( 
      data[:num_validation_samples * fold], 
      data[num_validation_samples * (fold + 1):]) 
  
  # Создание совершенно новой (необученной) модели
  model = get_model() 
  model.fit(training_data, ...) 
  validation_score = model.evaluate(validation_data, ...) 
  validation_scores.append(validation_score)

# Общая оценка: среднее оценок по K блокам
validation_score = np.average(validation_scores)
# Обучение окончательной модели на всех данных, 
# не вошедших в контрольный набор
model.fit(data, ...)
test_score = model.evaluate(test_data, ...)

    На следующем шаге мы рассмотрим итерационную проверку по K блокам с перемешиванием.




Предыдущий шаг Содержание Следующий шаг