Глава 6. Работа с данными
275
6.4.2. Обнаружение и исправление проблем
с данными
В предыдущем разделе мы рассказали, как обнаружить и исправить одну из проблем
с данными: зависимость примеров данных друг от друга. Конечно, это лишь одна из
множества проблем, связанных с данными. Обсуждение всех возможных сложностей
выходит далеко за рамки данной книги, поскольку число проблем в данных ничуть
не меньше числа проблем с кодом. Впрочем, рассмотрим здесь некоторые из них,
чтобы, столкнувшись с проблемой, вы могли ее узнать и знали, по каким ключевым
словам искать дополнительную информацию.
Аномалии
Аномальные значения — очень необычные для конкретного набора примеры дан
ных, иногда не относящиеся к распределению, лежащему в его основе. Например,
при работе с набором данных медицинской статистики можно ожидать, что вес
типичного взрослого человека находится в диапазоне от 40 до 130 кг. Если в наборе
данных 99 % примеров входят в этот диапазон, но изредка встречается бессмыслен
ное значение 145 000 кг, или 0 кг, или, что еще хуже, NaN
1
, то подобные значения
следует рассматривать как аномальные. Даже поверхностный поиск в Интернете
демонстрирует, что существует множество различных мнений о том, как лучше
поступать с аномальными значениями. В идеале в наборе данных всего несколько
аномальных значений, причем известно, как их найти. Если можно написать про
грамму для отброса аномальных значений, то можно убрать их из набора данных
и произвести обучение без них. Конечно, желательно произвести то же самое
и во время вывода; иначе возникнет асимметрия. В данном случае можно вос
пользоваться той же логикой для извещения пользователя о том, что введенный
им пример данных является аномальным для системы и необходимо попробовать
ввести другой.
Еще один распространенный способ обработки аномальных значений на уровне
признаков — ограничивать значения разумным минимумом и максимумом. В нашем
случае можно заменить вводимый вес:
weight = Math.min(MAX_WEIGHT, Math.max(weight, MIN_WEIGHT));
В подобных случаях имеет смысл также добавить новый признак, указывающий,
что аномальное значение было заменено. Благодаря этому можно будет отличить
настоящее значение 40 кг от значения –5 кг, которое было заменено на 40, благодаря
чему сеть сможет усвоить зависимость между состоянием аномального значения
и целевым признаком при наличии таковой:
isOutlierWeight = weight > MAX_WEIGHT | weight < MIN_WEIGHT;
1
Ввод значения NaN во входных признаках приведет к распространению этого NaN по всей
модели.
276
Do'stlaringiz bilan baham: |