Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Метод перекрестной проверки(Cross-validation) с примером реализации

Доброго времени суток! Речь пойдет о задаче классификации. А если быть точнее, то о способе оценить эффективность построенной модели, в частности, о методе перекрестной проверки. Что подразумевается под эффективностью? Конечно же, раз речь идет о классифицирующей модели, то оценивать нужно количество верных ответов.

Чем выше процент правильных ответов, тем больше вероятность, что модель адекватно себя поведет в «полевых условиях» — на реальных данных. Хорошо, когда размер обучающей выборки достаточно велик для того, чтобы выбрать оттуда процентов 30 элементов для тестирования. Но как быть, если данных для обучения очень мало?

На помощь приходит метод перекрестной проверки, в оригинале — Cross-validation.

Суть метода перекрестной проверки

Исходя из названия можно догадаться, что мы будем оперировать доступными ресурсами максимально эффективно, пытаясь их «перекрестить». То есть будем обучать модель на одних и тех же данных, но выкидывая каждый раз по кусочку, который будет использоваться для тестирования полученной модели. Перебрав все «кусочки» и посчитав средний процент отгадывания, мы получим наиболее достоверную оценку модели классификатора.

Всего существует два подхода к выбору размера «кусочка», остановимся на каждом подробнее.

Перекрестная проверка с проходом по одному

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

Но есть существенный недостаток — метод требует больших вычислительных расходов, все таки приходится переобучать модель сколько раз, сколько элементов в обучающей выборке.

X-проходная перекрестная проверка

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

Как правило, на практике X = 5, деление на пять частей наиболее подходящий выбор в плане производительности и точности оценки.

Реализация метода перекрестной проверки на PHP

Чтобы не быть голословным, решил в качестве примера привести реализацию метода перекрестной проверки с проходом по одному. Это код из моего недавнего проекта, в нем используется метод опорных векторов из библиотеки PHP-ML. Можно примерно прикинуть, как осуществляется обход элементов обучающей выборки.

Заключение

В заключении можно сказать, что метод перекрестной проверки здорово спасает в том случае, когда нельзя выделить достаточное количество элементов из обучающей выборки для теста. Как раз в моем проекте был такой случай. На этом у меня все, спасибо за внимание!