Вы находитесь на странице: 1из 6

КАК СТАТЬ АВТОРОМ Одиночество, Python и школьники: погружаемся в пучины DS

Все потоки Разработка Администрирование Дизайн Менеджмент Маркетинг Научпоп

Egrace 15 июля 2020 в 15:02


ЧИТА ЮТ СЕЙЧА С

Предварительная обработка данных


Машинное обучение * Как служится в белорусской ИТ-роте:
честный рассказ дембеля
Из песочницы
15K 69 +69

Всем привет! Я веб-разработчик и вот уже несколько лет интересуюсь машинным обучением.
Поскольку в повседневной рабочей парктике мне приходится решать менее интересные для меня Разработан язык программирования Ć
задачи, не связанные с машинным обучением, время от времени я забываю то, о чем когда-то 4.6K 13 +13
читал или использовал. Чтобы составить памятку для себя, укрепить свои знания и поделиться
ими с окружающими, я решил написать несколько статей по машинному обучению. Начну с
Mail.Ru Group переименовали в VK
предварительной обработки данных.
10K 33 +33

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

моделям. 40K 117 +117

Пропуски Минусы эмиграции: валить или не


валить
Рассмотрим набор данных следующего вида. Я его честно придумал и далее в рамках этой статьи 43K 668 +668
буду ссылаться на него.

Есть ли творчество у роботов?

Мегатест
ID Имя Спортивная Страна Год Вес Медаль
дисциплина рождения спортсмена
спортсмена

1 Иван Академическая Российская 1985 265 B


гребля Федерация

2 Бокс Великобритания 1986 54 S

3 Ким Греко-римская Северная Корея 1986 93 G


борьба

4 Олег Греко-римская 1984 B


борьба

5 Педро Академическая Бразилия 97 N


гребля

6 Валерий Академическая Российская 2004 97 N


гребля Федерация

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

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

Категориальный признак — признак, значение которого можно отнести к какой-либо группе, но


порядок значений в этой группе абсолютно не важен. Более того, между значениями
категориальных признаков невозможно установить отношения "больше" или "меньше". Однако,
никто не мешает исследователю отсортировать значения признака, например, по алфавиту для
наглядности или по какому-либо другому критерию для какой-либо другой цели. Примеры
категориальных признаков в моем наборе данных: Имя, Спортивная дисциплина, Страна, Год
рождения спортсмена.

Значения численного признака является скаляром. Объекты в наборе данных можно


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

Я не ошибся, отнеся год рождения спортсмена как к численным так и к категориальным


признакам. Дело в том, что многие признаки можно отнести одновременно к двум категориям. Но
+7 5K 37
в модели такие признаки будут использоваться вполне однозначно: либо как численные, либо как
категориальные. Классификация таких спорных признаков — творческий процесс и зависит от
задачи, которую вы решаете.

Пропуски в категориальных признаках

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

Заменить пропущенное значение новой категорией "Неизвестно".

ID Имя Спортивная Страна Год Вес Медаль


дисциплина рождения спортсмена
спортсмена

2 Неизвестно Бокс Великобритания 1986 54 S

Заменить пропущенное значение наиболее популярным значением.

ID Имя Спортивная Страна Год рождения Вес Медаль


дисциплина спортсмена спортсмена

4 Олег Греко-римская Российская 1984 B


борьба Федерация

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

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

Заменить пропущенное значение средним значением.

ID Имя Спортивная Страна Год рождения Вес спортсмена Медаль


дисциплина спортсмена

4 Олег Греко-римская 1984 (265 + 54 + 93 + 97 B


борьба + 97) / 5 = 121.2

Как видно из примера выше, выброс значения признака "Вес спортсмена" в строке с
идентификатором 1 очень сильно повлиял на среднее значение.

Заменить пропущенное значение медианой. Если в данных присутствуют выбросы, этот


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

ID Имя Спортивная Страна Год рождения Вес спортсмена Медаль


дисциплина спортсмена

4 Олег Греко-римская 1984 Медиана(54, 93, B


борьба 97, 97, 265) = 97

Выбросы

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

ID И С С Г В М
ID Имя Спортивная Страна Год рождения Вес Медаль
дисциплина спортсмена спортсмена

1 Иван Академическая Российская 1985 265 B


гребля Федерация

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


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

где — первая квартиль — такое значение признака, меньше которого ровно 25% всех
значений признаков. — третья квартиль — значение, меньше которого ровно 75% всех
значений признака.

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

Чаще всего от выбросов в обучающей выборке лучше всего избавляться.

Нормализация

Нормализация — это приведение всех значений признака к новому диапазону. Например, к


диапазону [0, 1]. Это полезно, поскольку значения признаков могут изменяться в очень большом
диапазоне. Причем, значения разных признаков могут отличаться на несколько порядков. А после
нормализации они все будут находиться в узком (и, часто, едином) диапазоне.

Наиболее популярным способом нормализации является нормализация методом минимакса. Для


того, чтобы применить этот метод, должно быть известно максимальное и минимальное значение
признака. Проблема в том, что эти значения известны не всегда.

Также довольно популярным методом является Z-нормализация. Диапазон новых значений для Z-
нормализации выглядит следующим образом:

где — среднеквадратическое отклонение признака X.

Выполняется Z-нормализация по формуле ниже.

где M[X] — математическое ожидание признака X.

Отмечу, что в случае применения Z-нормализации к нескольким признакам, диапазон значений


для них будет разным.

One-hot encoding

Это способ предварительной обработки категориальных признаков. Многие модели плохо


работают с категориальными признаками как таковыми. Дело в том, что слово "Российская
Федерация" нельзя просто взять и умножить на какое-нибудь число. Но многие модели работают
именно так: берется коэффициент и на него умножается значение признака. Аналогичная
операция выполняется с остальными признаками. Все результаты суммируются. На основе
значения суммы делается вывод о принадлежности объекта к тому или иному классу (такие
модели называются линейными).

Однако, как поступать с признаками, значения которых нельзя выразить численно? Можно
заменить их значения численным идентификатором. Например, вместо значения "Российская
Федерация" использовать значение 1, а вместо "Великобритания" — 2. Тогда линейная модель
будет работать. Но, если поступить таким образом, будет утеряно свойство категориальности
признака. Иными словами, модель будет пытаться сравнивать идентификаторы признаков между
собой. Но они не сравнимы по значению.
Чтобы бороться с этой проблемой, был придуман способ преобразовать исходный признак в
несколько новых, бинарных признаков. Например, можно признак "Страна" превратить в 4 новых
бинарных признака следующим образом:

ID Имя Страна_Российская Страна_Великобритания Страна_Северная Стр


Федерация Корея

1 Иван 1 0 0 0

2 Майкл 0 1 0 0

3 Ким 0 0 0 1

4 Олег 1 0 0 0

5 Педро 0 0 0 1

6 Валерий 1 0 0 0

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

Заключение

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

Спасибо, что дочитал или долистал до сюда. Я описал далеко не все способы предварительной
обработки, да и эта статья вряд ли пригодится профессиональным data scientist-ам. Однако, если
ты новичок и не знаешь что делать со своими данными, можешь смело сюда возвращаться. Удачи
в обучении и интересных задач!

Список источников

Я не ученый и эта статья не претендует на звание научной. Поэтому и источники я не буду


оформлять по ГОСТам. Прошу за это меня извинить.

1. Лекция курса от Яндекса и ВШЭ "Введение в машинное обучение" на курсере.


2. Standardization, or mean removal and variance scaling — документация к библиотеке sklearn
3. Задачи по подготовке данных для расширенного машинного обучения — Microsoft

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

Хабы: Машинное обучение

Редакторский дайджест
Присылаем лучшие статьи раз в месяц

Электропочта

5 0 Задонатить
Карма Рейтинг

Владислав @Egrace
Ruby on Rails разработчик

Комментарии 2

П ОХОЖИЕ П УБ Л ИКА ЦИИ


9 октября в 01:06

Хранилища признаков: Сторона данных в конвейерах машинного обучения

+2 1.9K 25 1 +1

29 сентября в 09:00

Дообучаем готовую нейросеть для классификации данных

+46 4.4K 70 0

23 апреля в 15:29

Контролируемое и неконтролируемое обучение: в чем разница?

+1 2.2K 13 1 +1

МИНУТОЧКУ ВНИМА НИЯ Разместить

Мегатест Турбо Событие

Тест Тьюринга: робот старался, но Магия Low-code от ABBYY: Yandex Scale 2021 за чаем с
Хабр бдит справятся даже маглы плюшками. Видео и текст

КУР СЫ

Комплексное обучение PHP


15 ноября 2021 · 20 000 ₽ · Loftschool

FAQUP Fest Профи тоже ошибаются. История фейлов в геймдеве, которые стали точкой роста
15 октября 2021 · Бесплатно · OTUS

Веб-дизайн: авторский курс с Pinkman


15 октября 2021 · 54 900 ₽ · Нетология

Кибербезопасность для детей


15 октября 2021 · 18 000 ₽ · GeekBrains

Аналитик BI
15 октября 2021 · 70 200 ₽ · Нетология

Больше курсов на Хабр Карьере

Л УЧШИЕ П УБ Л ИКА ЦИИ ЗА СУТКИ

сегодня в 07:01

Как служится в белорусской ИТ-роте: честный рассказ дембеля

+74 15K 55 69 +69

вчера в 17:15

Новая игра позволит пользователям управлять вагонеткой механической почты в


альтернативном мире России

+61 6.1K 26 24 +24

вчера в 16:00

Перешли всем отделом геймдизайна на Notion. Полёт нормальный

+41 6.8K 70 10 +10

сегодня в 09:00

13 заметок о 3D-печати, после 3 лет владения 3D-принтером

+37 3.4K 38 9 +9

вчера в 20:17

Как я снял кольца Сатурна на ТЕЛЕФОН

+36 8.1K 13 25 +25


Ваш аккаунт Разделы Информация Услуги

Войти Публикации Устройство сайта Реклама

Регистрация Новости Для авторов Тарифы

Хабы Для компаний Контент

Компании Документы Семинары

Авторы Соглашение Мегапроекты

Песочница Конфиденциальность

© 2006–2021 «Habr» Вернуться на старую версию Техническая поддержка О сайте Настройка языка