Нет набора данных? Без проблем. Создайте свой собственный за считанные секунды с помощью Python.

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

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

Статья построена следующим образом:

  • Создайте свой первый синтетический набор данных
  • Добавлять шум
  • Настроить баланс классов
  • Настройка разделения классов
  • Заключение

Вы можете скачать Блокнот для этой статьи здесь.

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

Наборов данных из реального мира часто бывает слишком много для демонстрации концепций и идей. Представьте, что вы хотите наглядно объяснить SMOTE (метод устранения дисбаланса классов). Сначала вам нужно найти набор данных с несбалансированным классом и спроецировать его на 2–3 измерения, чтобы визуализация работала.

Есть способ получше.

Библиотека Scikit-Learn поставляется с удобной функцией make_classification(). Это не единственный инструмент для создания синтетических наборов данных, но вы будете активно его использовать сегодня. Он принимает различные параметры, которые позволяют вам контролировать внешний вид набора данных, но об этом чуть позже.

Для начала вам нужно будет импортировать необходимые библиотеки. См. Следующий фрагмент:

Вы готовы создать свой первый набор данных. В нем будет 1000 образцов, отнесенных к двум классам (0 и 1) с идеальным балансом (50:50). Все образцы, принадлежащие к каждому классу, сосредоточены вокруг одного кластера. Набор данных имеет только две функции - для упрощения визуализации:

Вызов sample() распечатывает пять случайных точек данных:

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

Вот как это выглядит визуально:

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

Добавлять шум

Вы можете использовать параметр flip_y функции make_classification() для добавления шума.

Этот параметр представляет долю выборок, класс которых назначается случайным образом. Большие значения приводят к появлению шума на этикетках и усложняют задачу классификации. Обратите внимание, что значение по умолчанию flip_y ›0 в некоторых случаях может привести к меньшему, чем n_classes по y [1].

Вот как использовать его с нашим набором данных:

Вот соответствующая визуализация:

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

Вот так можно добавить шума. Давайте теперь сместим акцент на баланс в классе.

Настроить баланс классов

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

Вы можете использовать параметр weights для управления балансом классов. Он исключает список как значение с N - 1 значениями, где N - количество функций. У нас всего 2, поэтому в списке будет одно значение.

Посмотрим, что произойдет, если мы укажем значение 0,95:

Вот как набор данных выглядит визуально:

Как видите, только 5% набора данных принадлежит классу 1. Вы можете легко это изменить. Допустим, вам нужно 5% набора данных в классе 0:

Вот соответствующая визуализация:

И это все, что нужно для баланса классов. Давайте закончим настройкой разделения классов.

Настройка разделения классов

По умолчанию есть несколько перекрывающихся точек данных (класс 0 и класс 1). Вы можете использовать параметр class_sep для управления разделением классов. Значение по умолчанию - 1.

Посмотрим, что произойдет, если вы установите значение 5:

Вот как выглядит набор данных:

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

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

Заключение

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

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

Спасибо за прочтение.

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

Учить больше

использованная литература

[1] https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html

Первоначально опубликовано на https://www.betterdatascience.com 11 января 2021 г.