Как сбалансировать выборку датасета в pandas? 📊🐼
Как сбалансировать выборку датасета в pandas?
Для сбалансирования выборки датасета в pandas можно использовать различные методы. Один из них - это применение метода sample
с параметром frac
, который позволяет выбрать заданную долю данных из исходного датасета.
# Пример сбалансирования выборки с помощью метода sample()
balanced_dataset = original_dataset.sample(frac=0.5, random_state=42)
В приведенном примере мы использовали метод sample
для выбора половины данных из исходного датасета original_dataset
. При этом параметр frac
был установлен равным 0.5, что соответствует выбору 50% данных.
Таким образом, применяя метод sample
с соответствующими параметрами, вы сможете сбалансировать выборку датасета в pandas.
Детальный ответ
Как сбалансировать выборку датасета в pandas
Выборка датасета – это важная задача в анализе данных. Одной из проблем, с которой мы сталкиваемся, является несбалансированность выборки, когда классы в датасете представлены неравномерно. Это может привести к нежелательным результатам и смещению моделей машинного обучения. В этой статье мы рассмотрим, как можно сбалансировать выборку датасета с помощью библиотеки pandas.
1. Понимание несбалансированности выборки
Перед тем, как приступить к решению проблемы несбалансированности выборки, давайте разберемся, что это значит. В несбалансированной выборке наблюдается неравномерное распределение классов. Например, если у нас есть датасет с двумя классами: "класс А" и "класс В", и "класс А" представлен 95% наблюдений, а "класс В" – только 5%, то говорят, что выборка несбалансирована.
2. Подготовка выборки
Для начала давайте подготовим нашу выборку. Предположим, у нас есть датасет с колонками "признак1", "признак2" и "метка_класса". Загрузим датасет в pandas:
import pandas as pd
df = pd.read_csv('dataset.csv')
Прежде чем мы приступим к балансировке выборки, давайте взглянем на распределение классов в нашем датасете. Используя метод value_counts(), мы можем посмотреть, сколько наблюдений у каждого класса:
class_counts = df['метка_класса'].value_counts()
print(class_counts)
Результатом будет вывод количества наблюдений для каждого класса. Если мы видим, что классы распределены неравномерно, то у нас есть несбалансированная выборка.
3. Способы балансировки выборки
Есть несколько способов сбалансировать выборку. Рассмотрим два основных подхода.
3.1. Случайная сбалансированная выборка
Первый подход – это случайная сбалансированная выборка. В этом случае мы выбираем случайное количество наблюдений из каждого класса так, чтобы общее количество наблюдений в выборке было сбалансировано.
# Разделить наблюдения по классам
class_A = df[df['метка_класса'] == 'класс А']
class_B = df[df['метка_класса'] == 'класс В']
# Получить случайное количество наблюдений из каждого класса
sample_A = class_A.sample(n=500)
sample_B = class_B.sample(n=500)
# Соединить сбалансированную выборку
balanced_sample = pd.concat([sample_A, sample_B])
print(balanced_sample['метка_класса'].value_counts())
Теперь у нас есть случайная сбалансированная выборка с равным количеством наблюдений для каждого класса.
3.2. Сбалансировка выборки с использованием перерасчета
Второй подход – это сбалансировка выборки с помощью перерасчета (re-sampling). В этом случае мы увеличиваем количество наблюдений для менее представленного класса или уменьшаем количество наблюдений для более представленного класса.
from sklearn.utils import resample
# Разделить наблюдения по классам
class_A = df[df['метка_класса'] == 'класс А']
class_B = df[df['метка_класса'] == 'класс В']
# Увеличить количество наблюдений класса B до размера класса A
class_B_resampled = resample(class_B, replace=True, n_samples=len(class_A), random_state=42)
# Соединить сбалансированную выборку
balanced_sample = pd.concat([class_A, class_B_resampled])
print(balanced_sample['метка_класса'].value_counts())
Теперь у нас есть сбалансированная выборка, в которой количество наблюдений для каждого класса равно.
4. Заключение
В данной статье мы рассмотрели способы сбалансировать выборку датасета с помощью библиотеки pandas. Мы изучили понятие несбалансированности выборки, подготовили выборку, рассмотрели два основных подхода к сбалансировке выборки - случайную сбалансированную выборку и сбалансировку выборки с использованием перерасчета. Теперь вы можете применить эти подходы к вашим собственным датасетам и повысить качество ваших моделей машинного обучения.