как улучшить качество модели машинного обучения

Методы сбора ансамблей алгоритмов машинного обучения: стекинг, бэггинг, бустинг

Что такое ансамбли моделей?

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

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

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

как улучшить качество модели машинного обучения. Смотреть фото как улучшить качество модели машинного обучения. Смотреть картинку как улучшить качество модели машинного обучения. Картинка про как улучшить качество модели машинного обучения. Фото как улучшить качество модели машинного обученияРисунок 1

Три этих способа и будут детальнее рассмотрены далее.

Стекинг

Из трех вариантов стекинг является наименее популярным. Это можно проследить и по числу готовых реализаций данного метода в программных библиотеках. В том же sklearn.ensemble в python куда чаше используют AdaBoost, Bagging, GradientBoosting, чем тот же самый Stacking (хотя его реализация там тоже есть).

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

Алгоритм обучения выглядит следующим образом (рис. 2):

Делим выборку на k фолдов (тот же смысл, что и в кросс-валидации).

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

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

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

как улучшить качество модели машинного обучения. Смотреть фото как улучшить качество модели машинного обучения. Смотреть картинку как улучшить качество модели машинного обучения. Картинка про как улучшить качество модели машинного обучения. Фото как улучшить качество модели машинного обученияРисунок 2

Ссылки на библиотеки для использования метода приведены ниже:

Бэггинг

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

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

0.632*n разных объектов. Таким образом, должны сформироваться m обучающих выборок для m слабых алгоритмов.

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

Что касается агрегации выходов базовых алгоритмов, то в случае задачи классификации зачастую просто выбирается наиболее часто встречающийся класс, а в случае задачи регрессии выходы алгоритмов усредняются (рис. 3). В формуле под ai подразумеваются выходы базовых алгоритмов.

как улучшить качество модели машинного обучения. Смотреть фото как улучшить качество модели машинного обучения. Смотреть картинку как улучшить качество модели машинного обучения. Картинка про как улучшить качество модели машинного обучения. Фото как улучшить качество модели машинного обученияРисунок 3

Общий процесс приведен на рисунке ниже (рис. 4):

как улучшить качество модели машинного обучения. Смотреть фото как улучшить качество модели машинного обучения. Смотреть картинку как улучшить качество модели машинного обучения. Картинка про как улучшить качество модели машинного обучения. Фото как улучшить качество модели машинного обученияРисунок 4

Случайный лес

как улучшить качество модели машинного обучения. Смотреть фото как улучшить качество модели машинного обучения. Смотреть картинку как улучшить качество модели машинного обучения. Картинка про как улучшить качество модели машинного обучения. Фото как улучшить качество модели машинного обученияРисунок 5

Ссылки на библиотеки для использования метода приведены ниже:

Бустинг

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

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

как улучшить качество модели машинного обучения. Смотреть фото как улучшить качество модели машинного обучения. Смотреть картинку как улучшить качество модели машинного обучения. Картинка про как улучшить качество модели машинного обучения. Фото как улучшить качество модели машинного обученияРисунок 6

Типичными представителями бустинга являются две модели: градиентный бустинг и AdaBoost. Обе по-разному решают одну и ту же оптимизационную задачу по поиску итоговой модели, представляющей собой взвешенную сумму слабых алгоритмов (рис. 6).

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

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

Этот вектор сдвига является антиградиентом от функции ошибок работы предыдущего ансамбля моделей

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

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

Ссылки на библиотеки для использования метода приведены ниже:

Заключение

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

Источник

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

«Качество — это не действие, а привычка», — сказал великий древнегреческий философ Аристотель. Эта идея справедлива сегодня так же, как и более двух тысяч лет назад. Однако качества добиться не так легко, особенно когда дело касается данных и технологий наподобие искусственного интеллекта (ИИ) и машинного обучения.

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

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

Огромная цена низкого качества данных

Гораздо экономнее предотвращать проблемы с данными, чем разрешать их. Если у компании есть 500 тысяч записей и 30% из них неточны, тогда на устранение этих проблем придётся потратить 15 миллионов долларов вместо 150 тысяч долларов, которые были бы потрачены на их предотвращение.

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

Качество зависит от множества факторов

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

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

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

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

80% работы — это подготовка данных

Основатель deeplearning.ai и бывший руководитель Google Brain Эндрю Ын говорит: «во многих задачах полезно было бы изменить свою точку зрения, чтобы не только совершенствовать код, но и более системным образом совершенствовать данные».

Ын считает, что развитие машинного обучения можно ускорить, если процесс станет ориентироваться на обработку данных, а не на создание моделей. В основе традиционного ПО лежит код, а системы ИИ создаются из данных и кода, принимающего форму моделей и алгоритмов. «Когда производительность системы низка, многие команды инстинктивно стремятся улучшить код. Но во многих практических сферах применения эффективнее сосредоточиться на совершенствовании данных», — говорит Ын. Считается, что 80% машинного обучения — это очистка данных. «Если 80% нашей работы — это подготовка данных, почему мы не думаем, что обеспечение качества данных — самое важное для команды, занимающейся машинным обучением?»

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

Целостность — ключ к качеству данных

Для разметки данных «главное — это целостность», и особенно важна она при разработке ИИ. При разметке наборов данных метки должны быть одинаковыми во всех системах разметки и пакетах данных.

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

Работайте систематично и на всём протяжении жизненного цикла машинного обучения используйте проверенные инструменты и процессы. На этапе обучения модели критически важен структурированный анализ ошибок.

Разметка данных с упором на качество

В одном из случаев фоновый шум автомобиля помешал обучению алгоритма распознавания речи. При ориентировании на данные разработчики выявили бы ошибку (шум автомобиля), а затем обучили бы модель на большем объёме данных, в том числе и с шумами автомобилей. Это должно повысить целостность разметки, данные были бы помечены как что-то вроде «речи с шумным фоном, содержащим шум автомобиля».

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

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

Инструменты разметки данных не гарантируют качества

Нельзя недооценивать важность правильной разметки данных. Естественно, это наводит на вопрос: «Какой инструмент обработки данных подходит для моей области применения?»

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

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

Cуществует широкий выбор инструментов разметки данных, специализирующихся на различных областях использования, например, Lionbridge AI, Amazon Mechanical Turk (MTurk), Computer Vision Annotation Tool, SuperAnnotate, LightTag, DataTurks, Playment и Tagtog. Некоторые из них бесплатны, за большинство нужно платить. Некоторые лучше работают с видео, или с изображениями, или с данными лидаров.

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

Computer Vision Annotation Tool (CVAT) может похвастаться широким набором функций для разметки данных компьютерного зрения; он поддерживает такие задачи, как распознавание объектов, сегментация изображений и классификация изображений. Однако его интерфейс пользователя сложен и требует долгого освоения.

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

LightTag работает только с текстовыми данными, но имеет бесплатную начальную версию. Ещё одна open-source-платформа DataTurks предоставляет сервисы для разметки текстовых, графических и видеоданных. Playment работает с изображениями и полезен для создания наборов данных для обучения моделей компьютерного зрения. Ещё один инструмент разметки текста — Tagtog может аннотировать данные и автоматически, и вручную.

Тренды разметки данных

ИИ скоро совершит революцию во множестве различных отраслей, но самым важным аспектом является разметка данных. Например, при правильной разметке снимков компьютерной томографии ИИ сможет обнаруживать в снимках КТ грудной клетки пневмонию, вызванную COVID-19.

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

Строительство, железнодорожные перевозки и энергетическая отрасль могут выиграть от аннотирования записанных дронами данных лидаров. Роботизированная автоматизация процессов (Robotic Process Automation, RPA) может ускорить процесс бухгалтерского учёта, обеспечив при этом отсутствие ошибок.

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

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

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

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

«Качество данных требует определённого уровня компетентности, она требуется даже для понимания того, в чём заключена проблема», — рассказывает основатель и CEO NextGen compliance Колин Грэм.

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

Источник

Подготовка и оптимизация данных для задач машинного обучения

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

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

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

компания собрала дату, «потому что это важно»

люди, которые проектировали «склад» данных уволились, сошли с ума или умерли

пришло время «извлечь из этого смыслы» и «применить кейсы»

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

абсолютно никто не в курсе что значат все эти забавные числа и строки из базы данных

никого особо не интересует сколько это будет стоить в расчетах (кстати, как всегда, сделать надо было вчера)

совершенно очевидно, что на эту задачу амазоновские инстансы за 100500 миллиардов долларов Вам не выделят

Часто самым первым шагом после извлечения массива, является построение некой сырой модели данных. Тут можно применять множество подходов, таких как, к примеру, разведочный анализ. Важно, что на этом этапе приходится обращаться к большому объему информации и производить определенные манипуляции вручную, что обходится дорого по времени. Что делать? Попробуем разобраться в приемах оптимизации на примере данных с kaggle-соревнования data-science-bowl-2019.

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

Цель соревнования рассматривать не будем, нас интересует только формат данных. Особенностью этой конкретной задачи было то, что она была ограничена весьма скромными вычислительными ресурсам. А это как раз наш случай. В задаче использовался датасет, содержащий почти 12 млн строк. Для наглядности я буду использовать только 200 тыс.строк и не стану приводить в данной статье исходники или каким-то образом исследовать данные, т.к. правилами конкурса запрещено использование датасет в целях, не связанных с соревнованием. Если Вам интересно разобраться непосредственно с задачей data-science-bowl-2019, Вы всегда можете сделать это самостоятельно на kaggle.com

После загрузки и формирования дата-фрейма посмотрим на данные с помощью метода info() библиотеки pandas

Здесь мы сразу встречаем первую ошибку, которая довольно часто в дальнейшем стоит значительных временных затрат. Дело в том, что метод info() оценивает объем данных в дата-фрейме приблизительно — нам об этом намекает скромный значек “+” после значения задействованной памяти. Особенно этот перекос становится заметен, если данные содержат объекты с вложенными структурами. Посмотрим еще раз, но теперь глубже.

Почти в десять раз больше! Очевидно, что 200 тыс. строк, которые составляют менее 2% всего объема предоставленных данных, весят слишком много и их обработка потребует ресурсных затрат. Построение же модели на всех данных может оказаться и вовсе невыполнимой задачей по потребляемой памяти.

Заглянем внутрь (в качестве примера здесь и далее показаны несколько строк и заголовки колонок)

installation_idevent_idgame_sessiontimestampevent_dataevent_countevent_codegame_timetitletypeworld
0001e90f27253bdc45bb1e1b6b50c07b2019-09-06T17:53:46.937Z120000Welcome to Lost Lagoon!ClipNONE
0001e90f77261ab50848ef14a8dc68922019-09-06T17:54:56.302Z120000Sandcastle Builder (Activity)ActivityMAGMAPEAK

Часть данных являются числовыми, часть объектами. Как минимум одна серия имеет неограниченно вложенную структуру. Нам явно нужно привести данные к некоему единому виду.

Почему нам вообще может понадобиться приводить данные к какому-то виду

большинство алгоритмов ML требует предварительной подготовки данных, например, приведение к числовому виду

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

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

для большинства алгоритмов сложность по пространству/времени в основном сосредоточена на построении модели. Это хорошо для продакшена, но сильно увеличивает расходы на поиск решения

Попробуем «разобрать» json-подобный объект, находящийся в колонке event_data. Для этого воспользуемся pandas.json_normalize, который разбирает структурированные данные из JSON в табличный формат, а также json.load, который десериализует текст или байткод, содержащий json-документ в python-объекты. Чтобы применить эти методы ко всей серии, воспользуемся DataFrame.apply (метод не сильно быстрый, но нам требуется выполнить эту операцию всего один раз, поэтому, в данном случае, время смело приносим в жертву).

В результате у нас получилось довольно прилично новых признаков (приведено сокращенно)

Проблема заключается в том, что нам не удалось полностью разобрать json-подобные объекты, т.к. на самом деле они не отвечают стандарту json. Например, вот эти колонки остались неразобранными:

flowerflowers
0.0[0, 0, 0, 0, 0]
0.0[0, 0, 0, 0, 8]
0.0[8, 8, 8, 7, 8]
shels
[2, 3, 1]
[2, 3, 2, 1]
[2, 3, 2, 3, 2]
bottles
[<‘color’: ‘blue’, ‘amount’: 2>, <‘color’: ‘blue’, ‘amount’: 1>, <‘color’: ‘purple’, ‘amount’: 2…
[<‘color’: ‘blue’, ‘amount’: 2>, <‘color’: ‘blue’, ‘amount’: 1>, <‘color’: ‘purple’, ‘amount’: 2…
[<‘color’: ‘blue’, ‘amount’: 2>, <‘color’: ‘blue’, ‘amount’: 1>, <‘color’: ‘purple’, ‘amount’: 2…
castles_placed
[]
[<‘size’: 3, ‘position’: <‘x’: 567, ‘y’: 484, ‘stage_width’: 1015, ‘stage_height’: 762>>]
[<‘size’: 3, ‘position’: <‘x’: 567, ‘y’: 484, ‘stage_width’: 1015, ‘stage_height’: 762>>, <‘size…

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

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

В итоге, что с памятью?

Мы еще сильнее потеряли в потреблении памяти! А данные еще копать и копать…

Битва за память

На самом деле Pandas группирует и хранит “столбцы” блоками, разбитыми по типам. Иными словами float, int и objects хранятся раздельно, причем оптимизировано, без индексов. С числами все просто — столбцы в блоке объединяются в многомерный массив NumPy. При запросе значения происходит сопоставление индекса с массивом. С объектами немного сложнее. Все это означает, что разные объекты по-разному используют память.

Поработаем с разными типами объектов отдельно.

Для начала разберемся с наименьшим злом — с числами. В Pandas используются подтипы int8, int16, int32, int64, float16, float32, float64. В нашем случае в результате сравнения при извлечении, числа оказались в наиболее затратном по памяти формате.

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

Мы выполнили самопальный вариант понижающего преобразования, выиграв 74.4Mb.

Но у нас все еще есть проблема:

flower
0.0
5.0
2.0

Итого, по числам нам удалось сэкономить 83.5% по памяти! Неплохо.

Pandas предоставляет подтип category, который отображает строковые данные на индекс в int, а это то, что нам нужно, т.к. данные будут храниться не в виде указателя, а в виде словаря, в котором целочисленным значениям сопоставлены уникальным значениям данных. Перегоним наши объекты в «категории»:

Мы отбросим часть объектов, т.к. договорились ранее не работать с нераспакованной частью json

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

193.0MB + 7.9MB — нам удалось сэкономить 242.2MB, больше половины. Если мы применим наш метод ко всему дата-сету, то мы увидим, что не все объекты укладываются в наш формат категорий. часть объектов имеет слишком большое число уникальных значений (хешы, айдишники и т.д.) и есть смысл оставить их в объектах.

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

Временную метку оптимизируем с помощью функции pandas pd.to_datetime. Параметр format позволяет задать тип представления временной отметки. Дефолтный вот такой: “%d/%m/%Y”. Теперь метка будет выглядеть так:

В этом оптимизированном виде мы сэкономим дополнительные 14Mb памяти.

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

Что еще можно сделать

избавиться от разреженности либо оптимизировать разреженные данные

Кроме того, можно не ограничиться представлением, а закодировать столбцы цифрами. Есть методы в самом Pandas. Я рекомендую использовать внешний модуль category_encoders:

позволяет кодировать категории в цифры разными методами (их там около 20)

можно кодировать полуструктурированные и неструктурированные данные

можно сильно сократить выход по памяти за счет target encoding

работает в стиле scikit-learn пайплайнов

возвращает как Numpy массив, так и Pandas датафрейм

Как кодировать категории с помощью category_encoders читайте в этой статье

Ну и, наконец, можно перегнать все в Numpy! 🙂

Поделиться статьей

Все статьи с тегом preprocessing

Термины статистики, которые пригодятся для data science. Часть 2

Первую часть статьи можно найти по ссылке. Источником для данного материала является книга Practical Statistics for Data Scientists, Andrew Bruce.

Как преобразовать вложенные структуры JSON в массив Pandas на Python

Наиболее часто встречаемая проблема — это вложенные структуры данных, которые поставляются в JSON формате по API. Пример таких структур можно.

Этот проект поддерживается KonstantinKlepikov

Источник

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

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