Книга Роман с Data Science. Как монетизировать большие данные, страница 38. Автор книги Роман Зыков

Разделитель для чтения книг в онлайн библиотеке

Онлайн книга «Роман с Data Science. Как монетизировать большие данные»

Cтраница 38

Допустим, у нас есть задача – разделить два класса: крестики и нолики. Я их отметил на координатной сетке, по осям отложил значения фич X1 и X2 (рис. 8.5). Легко видеть, что между крестиками и ноликами можно провести прямую, которая их разделяет. Все, что выше прямой, – нолики, ниже – крестики.


Роман с Data Science. Как монетизировать большие данные

Рис. 8.5. Разделяющая прямая в задаче классификации


Так работает логистическая регрессия – она ищет прямую или гиперплоскость, которая разделяет классы с минимальной ошибкой. Как результат она выдает вероятность принадлежности точки к классу. Чем ближе точка находится к разделяющей поверхности, тем менее модель уверена в своем выборе, вероятность будет приближаться к 0.5, чем дальше точка от поверхности – тем вероятность ближе к 0 или 1, в зависимости от класса. В задаче два класса, поэтому если вероятность принадлежности к одному классу равна 0.3, то ко второму 1–0.3 = 0.7. Для вычисления вероятности в логистической регрессии используется сигмоида (рис. 8.6).


Роман с Data Science. Как монетизировать большие данные

Рис. 8.6. Сигмоида


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

По популярности это топовая модель как среди исследователей, которые любят ее за простоту и интерпретируемость (коэффициенты такие же, как у линейной регрессии), так и среди инженеров. На очень больших нагрузках, в отличие от других классификаторов, эта простая формула легко масштабируется. И когда вас догоняет в интернете баннерная реклама, скорее всего, за ней стоит логистическая регрессия, которая до недавнего времени использовалась, например, в компании Criteo, одной из самых больших ретаргетинговых компаний в мире [54].

Деревья решений

Деревья решения (decision tree) дышат в спину линейным методам по популярности. Это очень наглядный метод (рис. 8.8), который может использоваться для задач классификации и регрессии. Самые лучшие алгоритмы классификации (Catboost, XGboost, Random Forest) основываются на нем. Сам метод нелинейный и представляет собой правила «если…, то…». Само дерево состоит из внутренних узлов и листьев. Внутренние узлы – это условия на независимые переменные (правила). Листья – это уже ответ, в котором содержится вероятность принадлежности к тому или иному классу. Чтобы получить ответ, нужно идти от корня дерева, отвечая на вопросы. Цель – добраться до листа и определить нужный класс.

Дерево строится совсем по иным принципам, чем те, которые мы рассмотрели в линейных методах. Мои дети играют в игру «вопрос-ответ». Один человек загадывает слово, а другие игроки должны с помощью вопросов выяснить его. Допустимые ответы на вопрос только да/нет. Выиграет тот, кто меньшим числом вопросов угадает ответ. С деревом аналогично – начиная от корня дерева, правила строятся таким образом, чтобы за меньшее число шагов дойти до листа.


Роман с Data Science. Как монетизировать большие данные

Рис. 8.7. Дерево решений


Для этого вначале выбирается фича. Разделив датасет по ее значению (для непрерывных подбираются пороги), мы получаем наибольшее уменьшение энтропии Шеннона (или наибольший информационный выигрыш). Для этого на каждом шаге происходит полный перебор всех фич и их значений. Этот процесс повторяется много раз, пока мы не достигнем ситуации, когда уже делить нечего, в выборке данных остались только наблюдения одного класса – это и будет листом. Часто это грозит переобучением – полученное дерево слишком сильно подстроилось под выборку, запомнив все данные в листьях. На практике при построении деревьев решений у них ограничивают глубину и максимальное число элементов в листьях. А если ничего не помогает, то проводят «обрезку» дерева (pruning или postpruning). Обрезка идет от листьев к корню. Решение принимается на основе проверки: насколько ухудшится качество дерева, если объединить эти два листа. Для этого используется отдельный небольшой датасет, который не участвовал в обучении [55].

Ошибки обучения

Модель в процессе обучения, если она правильно выбрана, пытается найти закономерности (patterns) и обобщить (generalize) их. Показатели эффективности позволяют сравнивать разные модели или подходы к их обучению путем простого сравнения. Согласитесь, что если у вас будут две модели, ошибка прогнозирования первой равна 15 %, а второй 10 %, то сразу понятно, что следует предпочесть вторую модель. А что будет, если при тестировании в модель попадут данные, которых не было в обучающем датасете? Если при обучении мы получили хорошее качество обобщения модели, то все будет в порядке, ошибка будет небольшой, а если нет, то ошибка может быть очень большой.

Итогом обучения модели могут быть два типа ошибок:

• модель не заметила закономерности (high bias, underfitting – недообучена);

• модель сделала слишком сложную интерпретацию, например, там, где мы видим линейную зависимость, модель увидела квадратичную (high variance, overfitting – переобучена).


Роман с Data Science. Как монетизировать большие данные

Рис. 8.8. Правильное обучение, недообучение, переобучение


Попробую это продемонстрировать. На картинке (рис. 8.8) изображены результаты экспериментов в виде точек (вспомните лабы по физике в школе). Мы должны найти закономерности – построить линии, их описывающие. На первой картинке все хорошо: прямая линия хорошо описывает данные, расстояния от точек до самой линии небольшие. Модель правильно определила закономерность. На второй – явно у нас зависимость нелинейная, например квадратичная. Значит, линия, проведенная по точкам, неправильная. Мы получили недообученную модель (underfitting), ошиблись порядком функции. На третьей картинке ситуация наоборот, модель выбрана слишком сложной для линейной зависимости, которая наблюдается по точкам. Выбросы данных исказили ее. Здесь налицо переобучение, нужно было выбрать модель попроще – линейную.

Я нарисовал относительно искусственную ситуацию – одна независимая переменная на горизонтальной оси и одна зависимая переменная на вертикальной оси. В таких простых условиях мы можем прямо на графике увидеть проблему. Но что будет, если у нас много независимых переменных, например десяток? Тут на помощь приходит подход для тестирования модели – валидация.

Она служит как раз для понимания таких ошибок, когда мы работаем с моделью как с черным ящиком. Самый простой подход – делим случайно датасет на две части: большую часть используем для обучения модели, меньшую – для ее тестирования. Обычно соотношение 80 к 20. Фокус здесь в том, что настоящая ошибка, когда модель выведем в бой, будет близка к ошибке, которую мы получим на тестовом датасете. Есть еще один вариант валидации, когда данные делятся не на две, а на три части: на первой части – обучается модель, на второй – происходит подбор гиперпараметров модели (настройки модели), на третьей уже получают тестовую оценку. Эндрю Ын в своей книге «Machine learning Yearning» [60] считает эту модель валидации основной. Теперь обсудим сам алгоритм диагностики. Допустим, у нас есть две цифры – среднеквадратичные ошибки для обучающего датасета и тестового. Теперь сравним их:

Вход
Поиск по сайту
Ищем:
Календарь
Навигация