Структурированный блокнот   
 Машинное обучение (Machine Learning, обучающиеся алгоритмы) →  Обучение с учителем (Supervised learning) →  Общие принципы →  Проверка качества обучения →  

Вычисление качества обучения

Во-первых, нам нужно определиться с тем, что мы называем "качеством". Чаще всего берётся та же самая функция ошибки, что используется при обучении, но это не обязательно (может зависеть от вашей конкретной задачи). Наиболее распространённой функцией ошибки является среднее квадратичное отклонение предсказанных значение от фактических.

Очень важно! Нельзя производить обучение и оценивать качество на одной и той же выборке, т.к. любой алгоритм по своей сути стремится максимально точно повторить обучающие значения, но далеко не всегда это говорит о том, что он будет выдавать правильные значения на новых входных данных. Это эффект называется переобучением (находить закономерности в обучающей выборки, которые не являются закономерностями для всех других данных). От переобучения страдают все алгоритмы, и чем они более гибкие, тем сильнее эффект.

Поэтому имеющуюся обучающую выборку необходимо разбить на две группы. На первой группе данных мы обучаем алгоритм, а на второй уже оцениваем качество (подаём на вход данные, и сравниваем выход обученного алгоритма с известными выходными значениями). Только такая оценка будет верно передавать качество алгоритма. Обычно около 70% данных используется для обучения (обучающая выборка) и 30% для проверки качества (тестовая выборка). Если данных очень много (сотни тысяч+), то не нужно откладывать 30% для тестирования, будет достаточно отложить несколько десятков тысяч строк. Если данных очень мало, то у нас будет мало примеров в тестовой выборке, и для уменьшения влияния случайной ошибки на оценку качества можно использовать методику перекрёстной проверки: http://ru.wikipedia.org/wiki/Перекрёстная_проверка

Подводные камни:
1) Если выборка каким-то образом упорядочена, и при этом мы хотим, чтобы алгоритм обучился на всём диапазоне значений, то необходимо случайным образом перемешать обучающую выборку, и уже потом делить её на обучающую и тестовую выборки. И наоборот, если данные зависят от времени и вы хотите предсказывать будущие значения, то правильно отсортировать данные по времени, обучаться на старых, а тестировать на новых -- так в воспроизведёте реальные условия использования алгоритма. Обучаясь на перемешенных данных, вы дадите алгоритму "заглядывать в будущее", поэтому он может предсказывать соседние значения "из будущего" лучше, чем при реальном использовании (когда данных из будущего не будет).
2) Если в выборке есть какая-то понятная классификация (например данные из разных городов), то важно сделать разбиение на обучающую/тестовую выборку так, чтобы в них пропорционально вошли разные города, если предполагается, что в алгоритм будет работать в этих самых городах. Если же предполагается, что алгоритм должен уметь выучиться в одних городах, но потом применяться в других, тогда разбиение должно быть соответствующее: часть городов отдаём для обучения, а другие города отдаём в тест.
3) Если вы будете подбирать параметры алгоритма, ориентируясь на тестовую выборку, то в конечном итоге и здесь произойдёт переобучения. Т.е. вы подберёте параметры, которые максимизируют качество обучения именно на этой конкретной тестовой выборке. Чтобы устранить этот эффект (т.е. в конечном итоге верно измерить реальное получившееся качество), необходимо зарезервировать часть обучающей выборки для дополнительной проверки, например так: 60% данных для обучающей выборки, 20% для тестовой выборки -- вычисленное по ней качество используется для оптимизации алгоритма, и уже на финальной версии алгоритма (с оптимальными параметрами) мы вычисляем качество обучения на оставшихся 20% данных -- именно эту оценку следует считать качеством обучения, но она никак не участвует в процессе оптимизации.
Поиск по записям: только в текущем разделе.