числовые признаки машинное обучение

Отбор признаков в машинном обучении

Авторизуйтесь

Отбор признаков в машинном обучении

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

инженер-программист компании «Рексофт»

В реальном мире данные не всегда такие чистые, как порой думают бизнес-заказчики. Именно поэтому востребован интеллектуальный анализ данных (data mining и data wrangling). Он помогает выявлять недостающие значения и паттерны в структурированных с помощью запросов данных, которые не может определить человек. Для того, чтобы найти и использовать эти паттерны для предсказания результатов с помощью обнаруженных связей в данных пригодится машинное обучение (Machine Learning).

Для понимания любого алгоритма необходимо просмотреть все переменные в данных и выяснить, что эти переменные представляют. Это крайне важно, потому что обоснование результатов основывается на понимании данных. Если данные содержат 5 или даже 50 переменных, можно изучить их все. А что если их 200? Тогда просто не хватит времени изучить каждую отдельную переменную. Более того, некоторые алгоритмы не работают для категориальных данных, и тогда придется привести все категориальные колонки к количественным переменным (они могут выглядеть количественными, но метрики покажут, что они категориальные), чтобы добавить их в модель. Таким образом, количество переменных увеличивается, и их становится около 500. Что теперь делать? Можно подумать, что ответом будет снижение размерности. Алгоритмы снижения размерности уменьшают число параметров, но негативно влияют на интерпретируемость. Что если существуют другие техники, которые исключают признаки и при этом позволяют легко понять и интерпретировать оставшиеся?

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

Сильно коррелированные переменные

Сильно коррелированные друг с другом переменные дают модели одну и ту же информацию, следовательно, для анализа не нужно использовать их все. Например, если набор данных (dataset) содержит признаки «Время в сети» и «Использованный трафик», можно предположить, что они будут в некоторой степени коррелированы, и мы увидим сильную корреляцию, даже если выберем непредвзятый образец данных. В таком случае в модели нужна только одна из этих переменных. Если использовать обе, то модель окажется переобучена (overfit) и предвзята относительно одного отдельного признака.

P-значения

В таких алгоритмах, как линейная регрессия, начальная статистическая модель — это всегда хорошая идея. Она помогает показать важность признаков с помощью их p-значений, которые были получены этой моделью. Установив уровень значимости, мы проверяем полученные p-значения, и если какое-то значение оказывается ниже заданного уровня значимости, то данный признак объявляется значимым, то есть изменение его значения, вероятно, приведет к изменению значения цели (target).

Прямой отбор

Прямой отбор — это техника, заключающаяся в применении пошаговой регрессии. Построение модели начинается с полного нуля, то есть пустой модели, а затем каждая итерация добавляет переменную, которая вносит улучшение в строящуюся модель. То, какая переменная добавляется в модель, определяется ее значимостью. Это может быть рассчитано с использованием различных метрик. Самым распространенным способом является применение p-значений, полученных в изначальной статистической модели с использованием всех переменных. Иногда прямой отбор может приводить к переобучению модели, потому что в модели могут оказаться сильно коррелированные переменные, даже если они предоставляют одну и ту же информацию модели (но модель при этом показывает улучшение).

Обратный отбор

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

Рекурсивное исключение признаков

RFE является широко используемой техникой/алгоритмом для выбора точного числа значимых признаков. Иногда метод используется, чтобы объяснить некоторое число «самых важных» признаков, влияющих на результаты; а иногда для уменьшения очень большого числа переменных (около 200-400), и оставляются только те, которые вносят хоть какой-то вклад в модель, а все остальные исключаются. RFE использует ранговую систему. Признакам в наборе данных выставляются ранги. Затем эти ранги используются для рекурсивного исключения признаков в зависимости от коллинеарности между ними и значимости этих признаков в модели. Кроме ранжирования признаков, RFE может показать, важны ли эти признаки или нет даже для заданного числа признаков (потому что очень вероятно, что выбранное число признаков может являться не оптимальным, и оптимальное число признаков может быть как больше, так и меньше выбранного).

Диаграмма важности признаков

Говоря об интерпретируемости алгоритмов машинного обучения, обычно обсуждают линейные регрессии (позволяющие проанализировать значимость признаков с помощью p-значений) и деревья решений (буквально показывающие важность признаков в форме дерева, а заодно и их иерархию). С другой стороны, в таких алгоритмах, как Random Forest, LightGBM и XG Boost, часто используется диаграмма значимости признаков, то есть строится диаграмма переменных и «количества их важности». Это особенно полезно, когда нужно предоставить структурированное обоснование важности признаков с точки зрения их влияния на бизнес.

Регуляризация

Регуляризация делается для контроля за балансом между предвзятостью (bias) и отклонением (variance). Предвзятость показывает, насколько модель переобучилась (overfit) на тренировочном наборе данных. Отклонение показывает, насколько различны были предсказания между тренировочным и тестовым датасетами. В идеале и предвзятость, и дисперсия должны быть маленькими. Тут на помощь приходит регуляризация! Существует две основных техники:

L1 Регуляризация — Лассо: Лассо штрафует весовые коэффициенты модели для изменения их важности для модели и может даже обнулить их (т.е. убрать эти переменные из конечной модели). Обычно Лассо используется, если набор данных содержит большое число переменных и требуется исключить некоторые из них, чтобы лучше понять, как важные признаки влияют на модель (т.е. те признаки, которые были выбраны Лассо и у которых установлена важность).

L2 Регуляризация — методом Ridge: Задачей Ridge является сохранение всех переменных и в то же время присвоение им важности на основе вклада в эффективность модели. Ridge будет хорошим выбором, если набор данных содержит небольшое число переменных и все они необходимы для интерпретации выводов и полученных результатов.

Так как Ridge оставляет все переменные, а Лассо лучше устанавливает их важность, был разработан алгоритм, объединяющий лучшие особенности обеих регуляризаций и известный как Elastic-Net.

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

Источник

Умная нормализация данных: категориальные и порядковые данные, “парные” признаки

Эта статья внеплановая. В прошлый раз я рассматривал нюансы и проблемы различных методов нормализации данных. И только после публикации понял, что не упомянул некоторые важные детали. Кому-то они покажутся очевидными, но, по-моему, лучше сказать об этом явно.

Нормализация категориальных данных

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

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

С категориальными данными всё просто. Если целью является не просто кодировка (шифровка) значений какими-то числами, то единственный доступный вариант — это представить их в виде значений “1” — “0” (ДА — НЕТ) для каждой возможной категории. Это так называемое one-hot-кодирование. Когда вместо одного категориального признака появится столько новых “булевых” признаков, сколько существует возможных категорий.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Никаких вычислений медиан или средних арифметических, никаких смещений.

Если Вы подготавливаете данные для входа нейронной сети, это именно то, что нужно.

Важно понять, что применять преобразования подобные стандартизации к категориальным/”булевым” признакам как минимум бесполезно, а как максимум — вредно. Поскольку может необоснованно увеличить или уменьшить их интервал значений. Подробнее о важности равенства этих интервалов я писал в прошлый раз.

К тому же, если Вы хотите получить результат, основанный на данных, а не на внутренних особенностях алгоритмов, то даже после преобразования в числовую форму категориальные признаки нельзя использовать как обычные числовые для вычисления “расстояний” между объектами или их “схожести”. Если два объекта отличаются только “наличием черного цвета”, это не значит, что между ними “расстояние” равное некому безразмерному единичному интервалу. Это значит именно то, что у одного есть чёрный цвет, а у другого его нет — и не более того.

Конечно, какой-то результат Вы получите всегда, даже при подходе «не хочу мудрить, пусть будут просто числа 0 и 1». Сомнительный, но получите. Как корректно работать с такими данными, я подробно напишу в следующей статье.

Нормализация порядковых данных

С порядковыми данными немного сложнее. Они занимают “промежуточное” положение между категориальным и относительным (обычными числами) типами данных. И при работе с ними необходимо сделать выбор, к какому из соседних типов их преобразовывать. Без Вашего осознанного решения здесь никак.

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

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Вариант 2. Преобразование в интервальный тип (обычные числа). В этом случае сохраняется порядок значений, но “добавляется” необоснованная информация о величине разницы между двумя значениями.

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

Дальше работаем как с обычными значениями — нормируем и т.д.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

“Парные” признаки

Формально такого понятия, конечно, не существует. Я так обозначаю редкую, но заслуживающую внимания ситуацию.

Для начала определение. “Парными” признаками я называю признаки, которые измеряются в одинаковых единицах и вместе описывают единый комбинированный признак. Причем изменения по любому из таких “напарников” равнозначны.

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

“Парными” признаками здесь являются широта и долгота, которые вместе составляют единый признак “координаты”. Временно забудем про остальные признаки и присмотримся к координатам.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Для кластеризации важно определять расстояние между двумя объектами. В нашем случае расстояние рассчитывается по их координатам. И совершенно одинаково, например, отстоит детский садик от стадиона на 100 м вдоль по улице, или он в тех же 100 м через дорогу. Это одинаковые 100 м.

Если на этот нюанс не обращать внимания, то после нормализации ситуация станет такой

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Изначальный смысл совершенно исказился. “Расстояние” между зданиями, расположенными через дорогу стало практически таким же большим, как и между домами в начале и конце улицы. Это произошло из-за того, что значения широты и долготы были нормализированы независимо друг от друга.

Решение этой проблемы лежит в определении параметров масштабирования самого “протяженного” признака (в нашем случае долготы) и применения его к всем “парным” признакам.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Да, формально, мы снизили влияние признака “широта”. Но это было обусловлено его реальным физическим смыслом.

Правила безопасности

“Назначать” признаки в “парные” нужно очень осторожно и с четким пониманием исследуемой области.

Возьмем другой пример. Вы анализируете колебания некоего узла/датчика, закрепленного на вертикальном элементе в большом механизме. У Вас есть величины колебаний как “вправо-влево” (синие стрелки), так и “вперёд-назад” (оранжевые стрелки). Еще, из-за конструктивных особенностей механизма, колебания “вправо-влево” могут быть в несколько раз больше, чем “вперёд-назад”.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Вроде бы ситуация схожая с прошлой. Оба признака измеряются в миллиметрах. И вместе они составляют условные “координаты” узла при его колебаниях.

Но, допустим, оказывается (из-за тех же конструктивных особенностей), что сильные колебания “вперёд-назад”, пусть даже они по величине в разы меньше, чем “вправо-влево”, могут привести к поломке узла. Т.е. величина изменения у этого признака не равнозначна его “напарнику”.

В этом случае снижать влияние этого признака, как мы выше поступили с “широтой”, наоборот нельзя.

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

Источник

Отбор признаков в задачах машинного обучения. Часть 1

1. Методы фильтрации

Методы фильтрации применяются до обучения модели и, как правило, имеют низкую стоимость вычислений. К ним можно отнести визуальный анализ (например, удаление признака, у которого только одно значение, или большинство значений пропущено), оценку признаков с помощью какого-нибудь статистического критерия (дисперсии, корреляции, X 2 и др.) и экспертную оценку (удаление признаков, которые не подходят по смыслу, или признаков с некорректными значениями).

Простейшим способом оценки пригодности признаков является разведочный анализ данных (например, с библиотекой pandas-profiling). Эту задачу можно автоматизировать с помощью библиотеки feature-selector, которая отбирает признаки по следующим параметрам:

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

Коэффициент корреляции (удаляются признаки, у которых коэффициент корреляции больше порогового).

Вариативность (удаляются признаки, состоящие из одного значения).

Оценка важности признаков с помощью lightgbm (удаляются признаки, имеющие низкую важность в модели lightgbm. Следует применять только если lightgbm имеет хорошую точность.)

Туториал по этой библиотеке находится здесь.

Более сложные методы автоматического отбора признаков реализованы в sklearn. VarianceThreshold отбирает признаки, у которых дисперсия меньше заданного значения. SelectKBest и SelectPercentile оценивают взаимосвязь предикторов с целевой переменной используя статистические тесты, позволяя отобрать соответственно заданное количество и долю наилучших по заданному критерию признаков. В качестве статистических тестов используются F-тест,

и взаимная информация.

F-тест

F-тест оценивает степень линейной зависимости между предикторами и целевой переменной, поэтому он лучше всего подойдёт для линейных моделей. Реализован в sklearn как f_regression и f_classif соответственно для регрессии и классификации.

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

Взаимная информация

2. Встроенные методы

Встроенные методы выполняют отбор признаков во время обучения модели, оптимизируя их набор для достижения лучшей точности. К этим методам можно отнести регуляризацию в линейных моделях (обычно L1) и расчёт важности признаков в алгоритмах с деревьями (который хорошо разобран здесь). Отметим, что для линейных моделей требуется масштабирование и нормализация данных.

Пример

fnlwgt (final weight) – примерная оценка количества людей, которое представляет каждая строка данных

educational-num – длительность обучения

capital-gain – прирост капитала

capital-loss – потеря капитала

hours-per-week – количество рабочих часов в неделю

Источник

📊 Построение и отбор признаков. Часть 1: feature engineering

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Что такое признаки (features) и для чего они нужны?

Признаки могут быть следующих видов:

Стоит отметить, что для задач машинного обучения нужны только те «фичи», которые на самом деле влияют на итоговый результат. Определить и сгенерировать такие признаки вам поможет эта статья.

Что такое построение признаков?

Например, в базе данных интернет-магазина есть таблица «Покупатели», содержащая одну строку для каждого посетившего сайт клиента.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

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

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

Этот тип инжиниринга признаков необходим для эффективного использования алгоритмов машинного обучения и построения прогностических моделей.

Построение признаков на табличных данных

Удаление пропущенных значений

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

Самое простое решение для пропущенных значений – отбросить строки или весь столбец. Оптимального порога для отбрасывания не существует, но вы можете использовать 70% в качестве значения и отбросить строки со столбцами, в которых отсутствуют значения, превышающие этот порог.

Заполнение пропущенных значений

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

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

Замена пропущенных значений максимальными

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

Обнаружение выбросов

Другой математический метод обнаружения выбросов – использование процентилей. Вы принимаете определенный процент значения сверху или снизу за выброс.

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

Ограничение выбросов

С другой стороны, ограничение может повлиять на распределение данных и качество модели, поэтому лучше придерживаться золотой середины.

Логарифмическое преобразование

Важное примечание: данные, которые вы применяете, должны иметь только положительные значения, иначе вы получите ошибку.

Быстрое кодирование (One-Hot encoding)

Этот метод распределяет значения в столбце по нескольким столбцам флагов и присваивает им 0 или 1. Бинарные значения выражают связь между сгруппированным и закодированным столбцом. Этот метод изменяет ваши категориальные данные, которые сложно понять алгоритмам, в числовой формат. Группировка происходит без потери какой-либо информации, например:

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Приведенная ниже функция отражает использование метода быстрого кодирования с вашими данными.

Масштабирование признаков

В большинстве случаев числовые характеристики набора данных не имеют определенного диапазона и отличаются друг от друга.

Например, столбцы возраста и месячной зарплаты будут иметь совершенно разный диапазон.

Как сравнить эти два столбца, если это необходимо в нашей задаче? Масштабирование решает эту проблему, так как после данной операции элементы становятся идентичными по диапазону.

Существует два распространенных способа масштабирования:

В данном случае все значения будут находиться в диапазоне от 0 до 1. Дискретные бинарные значения определяются как 0 и 1.

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

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Работа с текстом

Перед тем как работать с текстом, его необходимо разбить на токены – отдельные слова. Однако делая это слишком просто, мы можем потерять часть смысла. Например, «Великие Луки» это не два токена, а один.

В коде алгоритм выглядит гораздо проще, чем на словах:

Работа с изображениями

Чтобы адаптировать ее под свою задачу, работающие в области науки о данных инженеры практикуют fine tuning (тонкую настройку). Ликвидируются последние слои нейросети, вместо них добавляются новые, подобранные под нашу конкретную задачу, и сеть дообучается на новых данных.

Пример подобного шаблона:

Заключение

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

Источник

Открытый курс машинного обучения. Тема 6. Построение и отбор признаков

Сообщество Open Data Science приветствует участников курса!

В рамках курса мы уже познакомились с несколькими ключевыми алгоритмами машинного обучения. Однако перед тем как переходить к более навороченным алгоритмам и подходам, хочется сделать шаг в сторону и поговорить о подготовке данных для обучения модели. Известный принцип garbage in – garbage out на 100% применим к любой задаче машинного обучения; любой опытный аналитик может вспомнить примеры из практики, когда простая модель, обученная на качественно подготовленных данных, показала себя лучше хитроумного ансамбля, построенного на недостаточно чистых данных.

UPD: теперь курс — на английском языке под брендом mlcourse.ai со статьями на Medium, а материалами — на Kaggle (Dataset) и на GitHub.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

В рамках сегодняшней статьи хочется обзорно описать три похожих, но разных задачи:

Отдельно отмечу, что в этой статье почти не будет формул, зато будет относительно много кода.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Извлечение признаков (Feature Extraction)

Тексты

Текст – самый очевидный пример данных в свободном формате; методов работы с текстом достаточно, чтобы они не уместились в одну статью. Тем не менее, обзорно пройдем по самым популярным.

Перед тем как работать с текстом, его необходимо токенизировать. Токенизация предполагает разбиение текста на токены – в самом простом случае это просто слова. Но, делая это слишком простой регуляркой («в лоб»), мы можем потерять часть смысла: «Нижний Новгород» это не два токена, а один. Зато призыв «воруй-убивай!» можно напрасно разделить на два токена. Существуют готовые токенайзеры, которые учитывают особенности языка, но и они могут ошибаться, особенно если вы работаете со специфическими текстами (профессиональная лексика, жаргонизмы, опечатки).

После токенизации в большинстве случаев нужно задуматься о приведении к нормальной форме. Речь идет о стемминге и/или лемматизации – это схожие процессы, используемые для обработки словоформ. О разнице между ними можно прочитать здесь.

Итак, мы превратили документ в последовательность слов, можно начинать превращать их в вектора. Самый простой подход называется Bag of Words: создаем вектор длиной в словарь, для каждого слова считаем количество вхождений в текст и подставляем это число на соответствующую позицию в векторе. В коде это выглядит даже проще, чем на словах:

Также идея хорошо иллюстрируется картинкой:

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

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

Используя алгоритмы вроде Вag of Words, мы теряем порядок слов в тексте, а значит, тексты «i have no cows» и «no, i have cows» будут идентичными после векторизации, хотя и противоположными семантически. Чтобы избежать этой проблемы, можно сделать шаг назад и изменить подход к токенизации: например, использовать N-граммы (комбинации из N последовательных терминов).

Также отмечу, что необязательно оперировать именно словами: в некоторых случаях можно генерировать N-граммы из букв (например, такой алгоритм учтет сходство родственных слов или опечаток).

Развитие идеи Bag of Words: слова, которые редко встречаются в корпусе (во всех рассматриваемых документах этого набора данных), но присутствуют в этом конкретном документе, могут оказаться более важными. Тогда имеет смысл повысить вес более узкотематическим словам, чтобы отделить их от общетематических. Этот подход называется TF-IDF, его уже не напишешь в десять строк, потому желающие могут ознакомиться с деталями во внешних источниках вроде wiki. Вариант по умолчанию выглядит так:

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Аналоги Bag of words могут встречаться и за пределами текстовых задач: например, bag of sites в соревновании, которые мы проводим – Catch Me If You Can. Можно поискать и другие примеры – bag of apps, bag of events.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Используя такие алгоритмы, можно получить вполне рабочее решение несложной проблемы, эдакий baseline. Впрочем, для нелюбителей классики есть и более новые подходы. Самый распиаренный метод новой волны – Word2Vec, но есть и альтернативы (Glove, Fasttext…).

Word2Vec является частным случаем алгоритмов Word Embedding. Используя Word2Vec и подобные модели, мы можем не только векторизовать слова в пространство большой размерности (обычно несколько сотен), но и сравнивать их семантическую близость. Классический пример операций над векторизированными представлениями: king – man + woman = queen.

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

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

Похожие методы, кстати, применяются и других областях (например, в биоинформатике). Из совсем неожиданных применений – food2vec.

Изображения

В работе с изображениями все и проще, и сложнее одновременно. Проще, потому что часто можно вообще не думать и пользоваться одной из популярных предобученных сетей; сложнее, потому что если нужно все-таки детально разобраться, то эта кроличья нора окажется чертовски глубокой. Впрочем, обо всем по порядку.

Во времена, когда GPU были слабее, а «ренессанс нейросетей» еще не случился, генерация фичей из картинок была отдельной сложной областью. Для работы с картинками нужно было работать на низком уровне, определяя, например, углы, границы областей и так далее. Опытные специалисты в компьютерном зрении могли бы провести много параллелей между более старыми подходами и нейросетевым хипстерством: в частности, сверточные слои в современных сетях очень похожи на каскады Хаара. Не будучи опытным в этом вопросе, не стану даже пытаться передать знание из публичных источников, оставлю пару ссылок на библиотеки skimage и SimpleCV и перейду сразу к нашим дням.

Часто для задач, связанных с картинками, используется какая-нибудь сверточная сеть. Можно не придумывать архитектуру и не обучать сеть с нуля, а взять предобученную state of the art сеть, веса которой можно скачать из открытых источников. Чтобы адаптировать ее под свою задачу, дата сайнтисты практикуют т.н. fine tuning: последние полносвязные слои сети «отрываются», вместо них добавляются новые, подобранные под конкретную задачу, и сеть дообучается на новых данных. Но если вы хотите просто векторизовать изображение для каких-то своих целей (например, использовать какой-то несетевой классификатор) – просто оторвите последние слои и используйте выход предыдущих слоев:

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

Тем не менее, не стоит зацикливаться на нейросетевых методах. Некоторые признаки, сгенерированные руками, могут оказаться полезными и в наши дни: например, предсказывая популярность объявлений об аренде квартиры, можно предположить, что светлые квартиры больше привлекают внимание, и сделать признак «среднее значение пикселя». Вдохновиться примерами можно в документации соответствующих библиотек.

Если на картинке ожидается текст, его также можно прочитать и не разворачивая своими руками сложную нейросеть: например, при помощи pytesseract.

Надо понимать, что pytesseract – далеко не панацея:

Еще один случай, когда нейросети не помогут – извлечение признаков из метаинфорации. А ведь в EXIF может храниться много полезного: производитель и модель камеры, разрешение, использование вспышки, геокоординаты съемки, использованный для обработки софт и многое другое.

Геоданные

Географические данные не так часто попадаются в задачах, но освоить базовые приемы для работы с ними также полезно, тем более, что в этой сфере тоже хватает готовых решений.

Геоданные чаще всего представлены в виде адресов или пар «широта + долгота», т.е. точек. В зависимости от задачи могут понадобиться две обратные друг другу операции: геокодинг (восстановление точки из адреса) и обратный геокодинг (наоборот). И то, и другое осуществимо при помощи внешних API вроде Google Maps или OpenStreetMap. У разных геокодеров есть свои особенности, качество разнится от региона к региону. К счастью, есть универсальные библиотеки вроде geopy, которые выступают в роли оберток над множеством внешних сервисов.

Если данных много, легко упереться в лимиты внешних API. Да и получать информацию по HTTP – далеко не всегда оптимальное по скорости решение. Поэтому стоит иметь в виду возможность использования локальной версии OpenStreetMap.

Если данных немного, времени хватает, а желания извлекать наворченные признаки нет, то можно не заморачиваться с OpenStreetMap и воспользоваться reverse_geocoder :

Работая с геокодингом, нельзя забывать о том, что адреса могут содержать опечатки, соответственно, стоит потратить время на очистку. В координатах опечаток обычно меньше, но и с ними не все хорошо: GPS по природе данных может «шуметь», а в некоторых местах (туннели, кварталы небоскребов. ) – довольно сильно. Если источник данных – мобильное устройство, стоит учесть, что в некоторых случаях геолокация определяется не по GPS, а по WiFi сетям в округе, что ведет к дырам в пространстве и телепортации: среди набора точек, описывающих путешествие по Манхеттену может внезапно оказаться одна из Чикаго.

WiFi location tracking основан на комбинации SSID и MAC-адреса, которые могут совпадать у совсем разных точек (например, федеральный провайдер стандартизировал прошивку роутеров с точностью до MAC-адреса и размещает их в разных городах). Есть и более банальные причины вроде переезда компании со своими роутерами в другой офис.

Точка обычно находится не в чистом поле, а среди инфраструктуры – здесь можно дать волю фантазии и начать придумывать признаки, применяя жизненный опыт и знание доменной области. Близость точки к метро, этажность застройки, расстояние до ближайшего магазина, количество банкоматов в радиусе – в рамках одной задачи можно придумывать десятки признаков и добывать их из разных внешних источников. Для задач вне городской инфраструктуры могут пригодиться признаки из более специфических источников: например, высота над уровнем моря.

Если две или более точек взаимосвязаны, возможно, стоит извлекать признаки из маршрута между ними. Здесь пригодятся и дистанции (стоит смотреть и на great circle distance, и на «честное» расстояние, посчитанное по дорожному графу), и количество поворотов вместе с соотношением левых и правых, и количество светофоров, развязок, мостов. Например, в одной из моих задач неплохо себя проявил признак, который я назвал «сложность дороги» – расстояние, посчитанное по графу и деленное на GCD.

Дата и время

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

Начнем с дней недели – их легко превратить в 7 dummy переменных при помощи one-hot кодирования. Кроме этого, полезно выделить отдельный признак для выходных.

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

А вот с часом (минутой, днем месяца. ) все не так радужно. Если использовать час как вещественную переменную, мы немного противоречим природе данных: 0 01.01 23:00:00. Для некоторых задач это может оказаться критично. Если же кодировать их как категориальные переменные, можно наплодить кучу признаков и потерять информацию о близости: разница между 22 и 23 будет такой же, как и между 22 и 7.

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

Такое преобразование сохраняет дистанцию между точками, что важно для некоторых алгоритмов, основанных на расстоянии (kNN, SVM, k-means. )

Впрочем, разницу между такими способами кодирования обычно можно уловить только в третьем знаке после запятой в метрике, не раньше.

Временные ряды, веб и прочее

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

Как и в других доменных областях, можно придумывать свои признаки, основываясь на догадках о природе данных. На момент написания статьи Chromium 56 был новым, а через какое-то время такая версия браузера сможет сохраниться только у тех, кто очень давно не перезагружал этот самый браузер. Почему бы в таком случае не ввести признак «отставание от свежей версии браузера»?

Кроме ОС и браузера, можно посмотреть на реферер (доступен не всегда), http_accept_language и другую метаинформацию.

Следующая по полезности информация – IP-адрес, из которого можно извлечь как минимум страну, а желательно еще город, провайдера, тип подключения (мобильное / стационарное). Нужно понимать, что бывают разнообразные прокси и устаревшие базы, так что признак может содержать шум. Гуру сетевого администрирования могут попробовать извлекать и гораздо более навороченные признаки: например, строить предположения об использовании VPN. Кстати, данные из IP-адреса неплохо комбинировать с http_accept_language: если пользователь сидит за чилийским прокси, а локаль браузера – ru_RU, что-то здесь нечисто и достойно единицы в соответствующей колонке в таблице ( is_traveler_or_proxy_user ).

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

Преобразования признаков (Feature transformations)

Нормализация и изменение распределения

Монотонное преобразование признаков критично для одних алгоритмов и не оказывает влияния на другие. Кстати, это одна из причин популярности деревьев решений и всех производных алгоритмов (случайный лес, градиентный бустинг) – не все умеют/хотят возиться с преобразованиями, а эти алгоритмы устойчивы к необычным распределениям.

Впрочем, требования к данным предъявляют не только параметрические методы: тот же метод ближайших соседей предскажет полную чушь, если признаки ненормированы: одно распределение расположено в районе нуля и не выходит за пределы (-1, 1), а другой признак – это сотни и тысячи.

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

Самая простая трансформация – это Standart Scaling (она же Z-score normalization).

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

StandartScaling хоть и не делает распределение нормальным в строгом смысле слова.

… но в какой-то мере защищает от выбросов

Другой достаточно популярный вариант – MinMax Scaling, который переносит все точки на заданный отрезок (обычно (0, 1)).

числовые признаки машинное обучение. Смотреть фото числовые признаки машинное обучение. Смотреть картинку числовые признаки машинное обучение. Картинка про числовые признаки машинное обучение. Фото числовые признаки машинное обучение

StandartScaling и MinMax Scaling имеют похожие области применимости и часто сколько-нибудь взаимозаменимы. Впрочем, если алгоритм предполагает вычисление расстояний между точками или векторами, выбор по умолчанию – StandartScaling. Зато MinMax Scaling полезен для визуализации, чтобы перенести признаки на отрезок (0, 255).

Если мы предполагаем, что некоторые данные не распределены нормально, зато описываются логнормальным распределением, их можно легко привести к честному нормальному распределению:

В примерах выше мы работали с синтетическими данными и строго проверяли нормальность при помощи критерия Шапиро-Уилка. Давайте попробуем посмотреть на реальные данные, а для проверки на нормальность будем использовать менее формальный метод – Q-Q график. Для нормального распределения он будет выглядеть как ровная диагональная линия, и визуальные отклонения интуитивно понятны.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *