Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

180    Глава 5. Основы машинного обучения

5.2. ОЦЕНКА МОДЕЛЕЙ МАШИННОГО ОБУЧЕНИЯ

Контролировать.можно.только.то,.что.доступно.для.наблюдения..Поскольку. цель.машинного.обучения.состоит.в.создании.моделей,.успешно.обобщающих. новые.данные,.важно.иметь.возможность.надежно.оценивать.качество.обобщения. модели..Далее.я.представлю.некоторые.способы.оценки.моделей.машинного. обучения,.большую.часть.из.которых.вы.уже.видели.в.предыдущих.главах.

5.2.1. Обучающие, проверочные и контрольные наборы данных

Оценка.модели.всегда.сводится.к.делению.доступных.данных.на.три.выборки:.обучающую,.проверочную.и.контрольную.(или.тестовую)..Вы.тренируете. модель.на.обучающих.данных.и.оцениваете.с.использованием.проверочных.. После.создания.окончательной.версии.модель.тестируется.с.применением. контрольных.данных.

Вероятно,.вы.зададите.вопрос:.почему.бы.не.использовать.только.две.выборки,. обучающую.и.контрольную?.Можно.было.бы.тренировать.модель.на.обучающих. данных.и.тестировать.на.контрольных..Ведь.так.намного.проще!

Причина.в.том,.что.процесс.конструирования.модели.всегда.связан.с.настройкой. ее.параметров:.например,.с.выбором.количества.слоев.или.изменением.их.размерности.(такие.настройки.называют.гиперпараметрами.модели,.чтобы.отличать.их. от.параметров.—.весовых.коэффициентов)..В.качестве.сигнала.обратной.связи. тогда.используются.проверочные.данные..Сама.настройка.фактически.является. разновидностью.обучения:.поиском.более.удачной.конфигурации.в.некотором. пространстве.параметров..Как.результат,.настройка.конфигурации.модели.по. качеству.прогнозирования.на.проверочных.данных.может.быстро.привести. к.переобучению на этих данных,.даже.притом,.что.модель.никогда.напрямую. не.обучается.на.них.

Главная.причина.этого.явления.—.так.называемая.утечка информации..Каждый. раз,.настраивая.гиперпараметр.модели,.исходя.из.качества.прогноза.по.проверочным.данным,.вы.допускаете.просачивание.в.модель.некоторой.информации.из. этих.данных..Если.сделать.это.только.один.раз.для.одного.параметра,.в.модель. попадет.небольшой.объем.информации,.и.проверочный.набор.данных.останется. надежным.мерилом.качества.модели..Однако.если.повторить.настройку.много. раз.—.выполняя.эксперимент,.оценивая.модель.на.проверочных.данных.и.кор- ректируя.ее.по.результатам,.—.в.модель.будет.просачиваться.все.больший.объем. информации.о.проверочном.наборе.данных.

5.2. Оценка моделей машинного обучения     181

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

Деление.данных.на.обучающую,.проверочную.и.контрольную.выборки.может. показаться.простой.задачей..Тем.не.менее.есть.ряд.продвинутых.приемов.ее. решения,.которые.могут.пригодиться.при.ограниченном.объеме.исходных.данных..Рассмотрим.три.классических.рецепта.оценки:.проверку.с.простым.рас- щеплением.выборки.(hold-out.validation),.перекрестную.проверку.по.K.блокам. (K-fold.validation).и.итерационную.проверку.по.K.блокам.с.перемешиванием. (iterated.K-fold.validation.with.shuffling).

Проверка с простым расщеплением выборки

Некоторая.часть.данных.выделяется.в.контрольный.набор..Обучение.произ- водится.на.оставшихся.данных,.а.оценка.качества.—.на.контрольных..Как.уже. говорилось.выше,.для.предотвращения.утечек.информации.модель.не.должна. настраиваться.по.результатам.прогнозирования.на.контрольных.данных,.поэтому. требуется.также.зарезервировать.отдельный.проверочный.набор.

Схематически.проверка.с.простым.расщеплением.выборки.выглядит,.как.показано.на.рис..5.12..В.листинге.5.5.демонстрируется.простейшая.реализация. этого.приема.

Рис. 5.12. Деление данных при использовании проверки с простым расщеплением выборки

182    Глава 5. Основы машинного обучения

Листинг 5.5. Проверка с простым расщеплением выборки

 

 

 

 

Перемешивание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

данных нередко

 

 

Формирование

 

 

 

 

 

num_validation_samples = 10000

 

весьма желательно

 

 

 

 

 

проверочной выборки

np.random.shuffle(data)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Формирование обучающей

validation_data = data[:num_validation_samples]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выборки

training_data = data[num_validation_samples:]

 

 

 

 

 

model = get_model()

 

 

 

 

 

 

Обучение модели

 

 

 

 

 

 

model.fit(training_data, ...)

 

 

 

 

 

 

на обучающих и оценка

validation_score = model.evaluate(validation_data, ...)

 

на проверочных данных

...

 

 

В этой точке можно выполнить корректировку модели,

 

 

 

 

повторно обучить ее, оценить и снова скорректировать

 

 

 

model = get_model() ///

model.fit(np.concatenate([training_data, validation_data]), ...)

test_score = model.evaluate(test_data, ...)

После настройки гиперпараметров часто желательно выполнить обучение окончательной модели на всех данных, не включенных в контрольный набор

Настоящий.протокол.оценки.самый.простой,.но.он.страдает.одним.существенным.недостатком:.при.небольшом.объеме.доступных.данных.проверочная.и.контрольная.выборки.могут.содержать.слишком.мало.образцов,.чтобы.считаться. статистически.репрезентативными..Это.легко.заметить:.если.разные.случайные. перестановки.данных.перед.расщеплением.дают.сильно.отличающиеся.оценки. качества.модели,.значит,.вы.столкнулись.именно.с.такой.проблемой..Для.ее. преодоления.были.разработаны.два.других.подхода.—.перекрестная.проверка. по.K.блокам.и.итерационная.проверка.по.K.блокам.с.перемешиванием..Обсудим. их.ниже.

Перекрестная проверка по K блокам

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

Схематически.перекрестная.проверка.по.K.блокам.выглядит,.как.показано.на. рис..5.13..В.листинге.5.6.отражена.простейшая.реализация.этого.приема.

5.2. Оценка моделей машинного обучения     183

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

Листинг 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)

 

 

Общая оценка: среднее

 

 

 

 

 

 

 

 

 

 

 

 

validation_score = np.average(validation_scores)

 

 

 

 

 

оценок по K блокам

 

 

 

 

 

 

model = get_model()

 

 

 

Обучение окончательной модели

 

 

 

model.fit(data, ...)

 

 

 

на всех данных, не вошедших

test_score = model.evaluate(test_data, ...)

 

в контрольный набор

Итерационная проверка по K блокам с перемешиванием

Этот.метод.подходит.для.ситуаций,.когда.имеется.относительно.небольшой.набор.данных.и.требуется.оценить.модель.максимально.точно..Он.показал.свою. высокую.эффективность.в.состязаниях.на.сайте.Kaggle..Суть.его.заключается. в.многократном.применении.перекрестной.проверки.по.K.блокам.с.перемешива- нием.данных.перед.каждым.разделением.на.K.блоков..Конечная.оценка.—.среднее.