Рекомендации по применению машинного обучения
Есть много способов, с помощью которых можно улучшить характеристики алгоритма обучения:
- • получение большей по объему выборки тренировочных примеров;
- • использование меньшего набор характеристик;
- • добавление полиномиальных признаков;
- • уменьшение или увеличение параметра регуляризации Я.
Существует довольно простой способ, позволяющий быстро исключить
половину пунктов из этого списка как потенциально бесперспективные направления.
7.1. Оценка гипотезы
Стандартный способ оценки гипотезы состоит в следующем.
Пусть, имеется набор данных из 10 обучающих примеров.
Для оценки гипотезы необходимо разделить данные на две части:
- - обучающее множество (70%), где "т" - количество обучающих примеров;
- - тестовое множество (30%), где mtest - количество тестовых примеров. Таким образом, индекс test будет означать примеры из тестового набора,
то есть пара (x[^sV Y^t) будет первым тестовым примером. Пример разделения данных на две части показан на рисунке 7.1.

Рисунок 7.1- Разбиение данных на обучающее и тестовое множества Выбираем случайные 70% данных для обучающей выборки и случайные 30% данных для тестовой выборки, если исходные данные упорядочены по какому-либо признаку.
Типичная процедура обучения и проверки обучающего алгоритма линейной регрессии:
- 1. Сначала вычисляем параметры 0 на обучающей выборке, минимизируя на ней целевую функцию ошибки J(d){2.1), используя при этом 70% всех имеющихся данных. Эти данные используются только для обучения.
- 2. Затем вычисляем ошибку тестирования ]в , используя для этого полученные параметры 0, по формуле (7.1).
Для решения задачи классификации с использованием логистической регрессии процедуры обучения и тестирования похожи. Сначала получаем параметры из обучающей выборки, а затем, вычисляем ошибку тестирования.
Вычисляем функцию стоимости логистической регрессии на тестовой выборке mtest
Иногда для определения ошибки тестового множества Jtest используют другой показатель, который проще трактовать - ошибку классификации 0/1, где нуль либо единица обозначают получаемый либо верный, либо неверный результат классификации.
Функция ошибки равна единице, если значение у=0, а значение гипотезы >0,5. Если значение гипотезы <0,5, то у=1.
Можно определить ошибку для тестовой выборки, используя формулу:
Это стандартный метод оценки того, насколько хороша обученная гипотеза.
7.2. Выбор модели (функции гипотезы) и проверки обучающих наборов
Рассмотрим задачу выбора модели.
Нужно выбрать степень полинома d, описывающего данные (использовать одну из функций: линейную, квадратичную, кубическую и т.д.). В задаче необходимо определить параметры d и в.
Первый вариант d = 1 - линейная функция. Выбор модели, в этом случае - выбор степени полинома, подбор этой модели с оценкой того, насколько хорошо выбранная гипотеза работает на новых примерах.
Для оценки качества гипотезы разбиваем имеющиеся данные на три части.
- 1. Обучающее множество (xm,ym), примерно 60% данных.
- 2. Множество перекрестной проверки, CV. Иногда множество
перекрёстной проверки называется проверочным множеством. ,
примерно 20% данных.
3. Тестовое множество. (*test>ytest)> примерно 20% данных.
Оцениваем ошибки обучения, проверки и тестирования.
Для выбора модели вместо тестового множества используется множество перекрестной проверки.


Рисунок 7.2 - Разбиение данных на обучающее, проверочное и тестовое
множества
Рассматриваем первую модель и минимизируем функцию стоимости. В результате получим вектор параметров 01 для линейной модели. Проделав то же для квадратичной модели, получим вектор 02, для кубической - 03, и так далее до 010. Затем, вместо того, чтобы сравнивать модели на множестве тестирования, сравниваем их на множестве проверки.
Вычисляем JCv, выбираем полином того порядка, который имеет минимальную ошибку перекрестной проверки.

Рисунок 7.3 - Пример выбора степени полинома
Проверочное множество используется для выбора структуры модели, а тестирующее для оценки её качества. Однако, иногда возникают проблемы, связанные со смещением и дисперсией.
7.3. Дисперсия и смещение
При отсутствии ожидаемых результатов после запуска обучающего алгоритма важно выявить, какая проблема встает перед программой - большое смещение (недостаточно точного описания) или большая дисперсия (переобучение).
При выборе слишком простой гипотезы получается прямая линия, которая недостаточно хорошо описывает данные, а при слишком сложной гипотезе она может прекрасно описывать обучающее множество, но в то же время быть слишком привязана к данным. Необходимо выбрать гипотезу промежуточного уровня, например, полином второй степени, что даст лучшую ошибку обобщения из этих вариантов.

Рисунок 7.4 - Пример недообучения, переобучения и хорошо описанных данных
Предположим, ошибка обучения и ошибка перекрестной проверки определены, как среднеквадратичная ошибка.
График зависимости ошибок от степени полинома изображен на рисунке 7.5.

Рисунок 7.5 - Зависимость ошибок от степени полинома
На графике изображены ошибки обучающего множества и множества перекрестной проверки. С увеличением степени полинома обучающее множество описывается все лучше и, таким образом, при d = 1 ошибка обучения всегда большая. Если же степень полинома высокая, то ошибка будет маленькая, потому что функция будет действительно хорошо описывать обучающее множество.
Обычно с ростом степени полинома ошибка обучения уменьшается.
При d= 1 используется простая функция, которая может недостаточно хорошо описывать обучающее множество, и поэтому получается большая ошибка перекрестной проверки. При использовании полинома промежуточной степени (d=2), получится гораздо меньшая ошибка перекрестной проверки. Если d слишком велико, модель переобучается на множестве перекрестной проверки и получается большая ошибка.
В случае смещения обе ошибки (проверки и обучения) велики.
Из-за высокой дисперсии Jtrain слишком мала, потому что данные обучающего множества описываются слишком хорошо. Тогда как ошибка перекрёстной проверки будет намного больше ошибки обучения.
При наличии большого смещения, ошибка на обучающем множестве будет большой, так как гипотеза плохо описывает обучающее множество. В случае большой дисперсии обычно ошибка на множестве обучения мала.
7.4. Регуляризация и смещение/дисперсия
При приближении модели линейной регрессии с полиномом очень высокого порядка для предотвращения переобучения используется регуляризация.
Существуют три случая:
1. Параметр регуляризации Я (лямбда) большой.
В этом случае все эти параметры 0i, 02, 0з и т.д. имеют большой штраф, и в результате значения большинства этих параметров становятся близки к 0, а гипотезы h(x) и примерно равны в0, т.е. получаются гипотезы, выглядящие примерно, как горизонтальная непрерывная прямая линия. Эта гипотеза имеет большое смещение, и ее значение плохо описывает этот набор данных.
- 2. Маленькое значение Я. Без регуляризации или с самой минимальной регуляризацией наступает переобучение с высоким смещением.
- 3. Промежуточное значение Я (не слишком большое и не слишком маленькое). Получаются параметры в, которые адекватно описывают данные.
На рисунке 7.7 изображено поведение ошибки в зависимости от параметра регуляризации.

Рисунок 7.7 - Поведение ошибки в зависимости от параметра регуляризации
При использовании регуляризации /train(#) определяется как цель оптимизации, но без параметра регуляризации. Аналогично определяется ошибка перекрёстной проверки и ошибка тестирования.
Jtrain(.0)Jcv(.&)' Jtest(6) определены как средняя квадратичная ошибка или половина средней квадратичной ошибки на обучающей и тестовой выборках без дополнительного параметра регуляризации.
Обычно есть какой-то определенный диапазон значений Л, которые необходимо попробовать. Эти значения и их влияние на функцию стоимости приведены на рисунке 7.8

Рисунок 7.8 - Минимизация функции стоимости при различных значениях параметра регуляризации Я
Таким образом, получается, например, 12 разных моделей, соответствующих 12 разным значениям параметра регуляризации Я.
С их помощью можно минимизировать функцию стоимости J от в , используя Я, и получить вектор параметров в. Затем вычисляется ошибка на множестве перекрестной проверки и выбирается модель с наименьшей ошибкой на множестве перекрестной проверки.
7.5. Приоритезация
Пусть необходимо создать классификатор спама.
Существует размеченное обучающее множество, состоящее из некоторого количества электронных писем, которые либо содержат спам, либо нет, обозначенных с помощью меток 1 или 0. Необходимо создать классификатор, используя обучение с учителем.
X - Множество писем
у - Метки (Спам - 1/ не спам -0).
Необходимо составить список из слов, которые, предположительно, являются указанием на спам-сообщение, например, «покупка», «сделка», «скидка». Если письмо содержит имя получателя или личные данные, то, напротив, это сообщение скорее всего не является спамом.
Учитывая текст письма, можно кодировать его в вектор признаков.
Необходимо проверить, появляются ли эти слова в письме, а потом определить вектор признаков X. Расставить 0 и 1 в векторе признаков в зависимости от того, встречается ли соответствующее слово в тексте.
^ _ (1, если j — е слово присутствует в тексте письма;
; ( 0, если j — е слово отсутствует в тексте письма.
Чаще всего из обучающего множества выбирают п наиболее часто встречающихся слов, где п обычно от десяти до пятидесяти тысяч. Они формируют признаки, которые будут использоваться при представлении электронной корреспонденции.
Необходимо узнать, как лучше потратить время, чтобы классификатор спама имел более высокую точность, а ошибка была меньше.
Существует много способов, позволяющих улучшить производительность алгоритмов, но лучше использовать более систематический подход к выбору вариантов работы, тем самым правильно использовать затрачиваемое время. Его можно сэкономить, начав с разработки простейших алгоритмов анализа ошибок.
7.6. Анализ ошибок
При работе над программой машинного обучения считается хорошей практикой начинать работу с построения простого быстрого чернового алгоритма, который прост в реализации.
Стоит построить кривые погрешностей обучения и тестирования, чтобы определить, страдает ли обучающий алгоритм от высокого смещения или высокой дисперсии. Далее необходимо использовать эту информацию для решения, можно ли использовать большое количество данных и большое количество признаков.
Анализ ошибок также является полезным способом оптимизировать время работы и силы, затраченные на нее.
Пример.
Допустим, существует классификатор спама.
Mcv = 500 примеров, где Mcv - множество перекрестной проверки.
Алгоритм имеет большую частоту ошибок и неверно классифицирует 100 из этих примеров.
Необходимо проверить вручную 100 ошибок и разбить их на категории, основываясь на типах писем и репликах, способных помочь алгоритму правильно классифицировать письма.
После проверки выяснилось, что 12 из неправильно отмеченных электронных писем - одного типа, четыре - из второго, 53 - из третьего, 31- разных видов.
Подсчитав количество писем в разных категориях, обнаружили, что алгоритм особенно плохо работает на сортировке писем третьего типа. Необходимо выяснить, можно ли предложить лучшие признаки, для их верного распределения по категориям.
Некоторые из гипотез о том, что может помочь лучше классифицировать электронные письма, которые пытаются распознать:
- - преднамеренное неправильное написание;
- - необычную маршрутизацию электронной почты;
- - спамерскую пунктуацию.
На множестве перекрёстной проверки было определено, что, например, преднамеренные опечатки - достаточно редкое явление и не стоит тратить время на попытки написать алгоритмы для их обнаружения, а на разработку более сложных признаков, основанных на пунктуации, стоит приложить дополнительные усилия.
Этот вид анализа ошибок является процессом проверки вручную ошибок, которые допускает алгоритм.
Необходимо выяснить, какие примеры алгоритму классифицировать труднее всего. Часто для различных алгоритмов обучения находятся схожие категории затруднительных примеров. Быстрая и черновая реализация часто является практичным способом, позволяющим найти ошибки и определить трудные примеры.
При разработке алгоритма обучения важно знать способ его оценки, который возвращает единственное действительное число, показывающее, насколько хорошо он работает.
Например, необходимо решить, нужно ли обращаться с такими словами как "discount", "discounts", "discounter", как с одним и тем же словом.
Одним из способов решения является анализ первых нескольких букв слова, а затем предположение, что все слова имеют приблизительно одинаковые значения.
В обработке естественного языка такой вид программной обработки называют стеммингом, а программы для просмотра нескольких букв слова стеммеры. Их использование иногда может сработать некорректно, ошибочно посчитав, например, значение слов "universe" и "university" одинаковым.
Анализ ошибок может оказаться бесполезным для определения положительности идеи стемминга.
Лучший способ определить, поможет ли она классификатору - наличие способа для быстрого просмотра его работоспособности. Также будет полезным иметь способ оценить алгоритм в цифрах.
Самое лучшее, что можно сделать - оценить ошибку перекрёстной проверки выполнения алгоритма с использованием и без использования стемминга. Если при многоразовом запуске алгоритма величина ошибки уменьшится с 5% до 3%, то это будет являться признаком целесообразности использования стемминга.
Для этой задачи существует метрика в виде единственного
действительного числа, а именно, ошибка перекрестной проверки,
позволяющая понять, увеличилась или уменьшилась ошибка.
7.7. Метрики ошибок для смещенных классов
Выбор подходящей метрики для оценивания алгоритма обучения может быть весьма неочевидным, когда отношение положительных и отрицательных образцов очень близко к одному из двух крайних значений, это называется случаем смещенных классов.
Пример (проблема классификации рака): hg(x) - тренировочная модель логистической регрессии.
_ (1, если у пациента есть рак
У (0, если у пациента нет рака
После тестирования классификатора на тестовом наборе данных выявлен 1% ошибок (99% правильная постановка диагноза).
Только 0,5% пациентов из тестового набора действительно больны раком.

Рисунок 7.9 - Фрагмент необучаемого кода
С помощью данного необучаемого кода ошибка снижается с 1% до 0,5% .
Проблема при использовании в качестве оценочной метрики точности классификации заключается в следующем.
Предположим, существует один объединенный алгоритм, который работает с точностью 99,2% (ошибка составляет 0,8%). После изменения ошибка составляет 0,5%. При этом неизвестно, улучшился ли алгоритм.
Преимущество использования единственного действительного числа в качестве оценочной метрики состоит в том, что оно помогает быстро определить необходимость модификации алгоритма.
В случае смещенных классов становится трудно использовать только точность из-за существующей возможности маленькой ошибки, и при этом неизвестно, улучшило ли это качество классификатор, однако предсказание у = 0 с большей вероятностью может снизить ошибку вплоть до 0,5%.
Поэтому необходимо найти дополнительную оценочную метрику.
7.8. Точность/полнота (precision/recall)
Другой оценочной метрикой является выявление точности и полноты (precision/recall).
Допустим, оценивается классификатор на тестовом наборе.
у = 1, класс, который необходимо определить
Для образцов в тестовом множестве, фактический класс может быть единица либо нуль, следовательно, это задача бинарной классификации.
Задача обучающего алгоритма - предсказание некоторого значение класса каждого образца.
Таблица 7.1 - Зависимость значений от вида класса
Фактический класс |
|||
Предсказан- ный класс |
1 |
0 |
|
1 |
Истинно положительное значение |
Ложно положительное значение |
|
0 |
Ложно отрицательное значение |
Истинно отрицательное значение |
Необходимо вычислить два значения.
1. Точность классификатора (какая часть из всех пациентов, у которых у=1, действительно больна?) находится по формуле:
Чем выше значение точности, тем лучше.
2. Полнота классификатора (все пациенты в тестовой группе, действительно больны. У какой части из них правильно выявлено наличие болезни?) находится по формуле:
Чем выше значение полноты, тем лучше.
Если классификатор обладает высокой точностью и высокой полнотой, он работает хорошо даже в случае очень смещенных классов.
7.9. Управление компромиссом между точностью и полнотой
Пример:
Логистическая регрессия: 0 <= he(x) >= 1
- 7=1, если he(x) > 0,5
- 7=0, если he (х) < 0,5
В зависимости от того, что необходимо получить, высокую точность или малую полноту, или же большую полноту и низкую точность, возможно предсказать, что у = 1, если h(x) больше, чем некоторый порог.
Таким образом, для большинства классификаторов будет существовать компромисс между точностью и полнотой.
При изменении величины порога (0,5) можно построить график кривой, отображающий зависимость между точностью и полнотой, где это значение будет соответствовать очень высоким значениям порога, который может быть равен больше 0,99, так что можно сказать, что у=1 только там, где уверенность более 99 %. А точность будет относительно низкой, и полнота в этой точке будет соответствовать значению гораздо более низкого порога, например, 0,01.

Рисунок 7.10 - Зависимость точности от полноты
Одна из вещей, описанная ранее - это важность оценочной метрики в виде одного вещественного числа. Предположим, что существует несколько различных алгоритмов обучения или, возможно, один и тот же алгоритм, но с разными значениями порога. Необходимо понять, какой из них лучший.
Есть несколько разных принципов построения алгоритмов для сравнения различных значений точности/полноты.
Один из способов комбинирования точности и полноты называется F-мерой и вычисляется по этой формуле:
где Р - точность, R - полнота.
Если точность или полнота будет равна О, F-мера будет равна 0.
Чтобы F-мера была больше, точность и полнота должны быть достаточно велики: как точность, так и полнота.
F-мера будет равна единице, если Р и R идеальны.
Промежуточные значения между нулем и единицей дают разумное ранжирование различных классификаторов.