5 Лучших генераторов синтетических данных на Python и как их использовать, когда вам не хватает данных
В 2021 году ежедневно производилось 2,5 квинтиллиона байт (2,5 миллиона терабайт) данных. Сегодня это число только увеличивается. Но, по-видимому, этого недостаточно, потому что экосистема Python имеет множество библиотек для создания синтетических данных. Возможно, некоторые из них созданы только для того, чтобы иметь возможность генерировать синтетические данные, но большинство из них имеют полезные дополнения, такие как:
- Машинное обучение: когда реальные данные недоступны или их трудно получить для обучения модели;
- Конфиденциальность и безопасность данных: Замените конфиденциальную информацию в наборах данных реалистичными, но не фактическими данными;
- Тестирование и отладка: тестирование и отладка программного обеспечения с синтетическими данными в контролируемой среде;
- Увеличение данных: искусственное создание большего количества точек данных из существующих данных с использованием машинного обучения или статистики.
В этой статье будут показаны шесть библиотек Python для вышеуказанных целей и то, как их использовать.
Случайная информация о пользователе с помощью Faker
Faker - одна из лучших ранних библиотек Python для генерации всех типов случайной информации. Некоторые часто используемые атрибуты, которые генерирует Faker:
- Личная информация: имя, день рождения, электронная почта, пароль, адрес;
- Все виды информации о дате и часовом поясе;
- Финансовые реквизиты: кредитные карты, SSN, банковские услуги;
- Разное: URL-адреса, предложения, языковые коды
- и так далее...
Он также имеет интуитивно понятный API. После инициирования класса Faker вы можете сгенерировать новый поддельный элемент, вызвав его метод:
Все эти методы возвращают новые элементы при каждом вызове, поэтому легко создать искусственный набор данных CSV с помощью фрагмента кода, подобного приведённому ниже:
Если вы заметили, имена и адреса электронной почты не совпадают. Это один из недостатков использования Faker — сгенерированные Faker наборы данных легко идентифицируются при публичном использовании.
Узнайте больше об этом из документации.
Синтетические наборы данных с Sklearn для задач ML
Sklearn - это настолько обширная и превосходная библиотека, что она имеет специальную поддержку для генерации синтетических данных.
Её модуль datasets включает в себя множество функций для создания искусственных датасетов для различных задач машинного обучения. Наиболее популярными функциями являются make_classification и make_regression.
Обе имеют параметры n_samples и n_features для управления количеством строк и объектов, выводящихся результатом синтетического набора данных.
Чтобы контролировать сложность задачи, вы можете указать, сколько функций нужно или не стоит использовать, с помощью параметровn_informative (коррелированных) или n_redundant (линейных комбинаций информативных функций).
make_classification также обеспечивает большой контроль над целью классификации, а именно количеством классов, кластеров для каждого класса и весовых коэффициентов классов.
Существует также функция make_blobs для генерации задач кластеризации, как показано ниже:
Если вы ищете что-то необычное, есть и другие функции, такие как make_checkboard, make_circles, make_moons и make_s_curve.
Набор данных с аномалиями в PyOD
Обнаружение аномалий - повсеместная проблема в Data Science. Качественные наборы данных с выбросами всегда трудно найти. К счастью, библиотека обнаружения выбросов Python (PyOD) имеет служебную функцию для генерации синтетических данных с выбросами:
generate_data позволяет контролировать количество строк в обучающих и тестовых наборах, а также процент выбросов в результирующих наборах.
PyOD также обладает самым большим набором алгоритмов обнаружения аномалий в экосистеме Python.
Синтетические данные поверх другого набора данных с помощью CTGAN
Итак, перейдём к замечательному материалу.
Когда у вас ограниченные данные, моделям машинного обучения трудно хорошо обобщать их и не перегружать. В таких случаях вы можете использовать генеративные состязательные сети — CTGAN.
После того, как вы подогнали их к любому набору данных, они могут генерировать синтетические высоко анонимные выборки из информационного пространства datasets. Это отличный способ повысить как безопасность данных, так и размер датасета.
CTGAN предоставляется проектом Synthetic Data Vault (SDV). Его Python API предоставляет класс CTGAN , который требует изучения набора данных и списка его категориальных столбцов.
Затем вы можете извлечь из него столько образцов, сколько захотите, с помощью функции sample. Ниже мы отбираем 20 тысяч синтетических образцов из набора данных cliché Iris:
Mimesis — Продвинутый Faker
Mimesis - это полноценный генератор случайной информации, построенный на базе Faker. Он может генерировать гораздо больше случайных атрибутов, чем Faker:
Его генераторы случайных чисел сгруппированы по 20 категориям, что делает Mimesis намного более организованным.
Он также в значительной степени поддерживает информацию о конкретной стране для 32 локализаций (языков). Ниже мы генерируем тысячу строк поддельных испанских данных:
Вы также можете создавать пользовательские locakes, в которых вы объединяете несколько языков для получения информации о конкретном регионе, т.е. данных, специфичных для Западной Европы.
Узнайте больше об этом из обширной документации.
Увеличение изображения с помощью TensorFlow
Одним из наиболее эффективных методов искусственного увеличения размера наборов изображений в задачах компьютерного зрения является аугментация.
Идея проста: когда у вас есть небольшой набор данных изображений, слишком маленький для эффективного обучения нейронной сети, вы можете увеличить их количество, используя различные случайные преобразования изображений. Таким образом, у сети будет больше разнообразных примеров для обучения. Распространенными преобразованиями изображений являются:
Геометрические: поворот, перемещение, масштабирование, переворачивание — изменение размера, ориентации и положения объектов на изображенияхЦвет и яркость: случайные изменения яркости и контрастности для увеличения вариабельности освещения и цветовых условий.Шум и размытие: добавление эффектов случайного шума и размытия для имитации различных уровней качества изображения.
Такие преобразования могут значительно увеличить размер набора данных за счет введения похожих, но не идентичных вариантов изображений. Это, в свою очередь, приводит к повышению производительности нейронных сетей.
Увеличение изображения может быть выполнено многими способами в TensorFlow. Для задач классификации изображений существует класс ImageDataGenerator:
Вы инициализируете его и устанавливаете нужные преобразования. Затем вы можете использовать его метод flow_from_directory для чтения изображений из указанного каталога данных:
После этого вы можете передать train_generator для подгонки моделей Keras. Генератор работает асинхронно - пока партия моделей обучается, генератор применяет преобразования и изменяет размер изображений следующей партии в фоновом режиме.
Чтобы flow_from_directory работал, структура папки dataset должна иметь иерархию, подобную приведённой ниже:
Набор данных должен содержать учебные и проверочные (и тестовые) каталоги с изображениями, сгруппированными в отдельные папки под именем их класса.
Есть и другие альтернативы, если вы не можете принудительно преобразовать свой набор данных в такую структуру. Например, когда вы создаёте свои модели с помощью Keras Sequential API, вы можете использовать слои преобразования:
Заключение
Несмотря на то, что во всем мире уже и так имеется много данных, синтетические данные становятся всё более популярными. Это отражается в количестве появляющихся стартапов с синтетическими данными. Согласно анализу рынка, глобальная индустрия генерации синтетических данных в 2021 году стоила более 100 миллионов долларов и, как ожидается, будет расти в годовом исчислении на 34,8%.
В этой статье мы лишь поверхностно коснулись отрасли, узнав о некоторых наиболее популярных альтернативах с открытым исходным кодом. Если вы не ищете корпоративные решения, этих библиотек более чем достаточно для ваших основных потребностей.
Спасибо за чтение!
Статья была взята из этого источника: