Эффективные методы даунсемплинга в Python: упрощение данных без ущерба для производительности

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

Метод 1: случайная подвыборка

Случайная подвыборка – это простой подход, который предполагает случайный выбор подмножества точек данных из исходного набора данных. Этот метод полезен, когда набор данных слишком велик и мы хотим работать с меньшей репрезентативной выборкой. Вот пример случайной подвыборки в Python:

import numpy as np
def random_subsample(data, sample_size):
    indices = np.random.choice(len(data), size=sample_size, replace=False)
    subsample = data[indices]
    return subsample
# Usage example
original_data = [...]  # Your original dataset
sample_size = 1000
downsampled_data = random_subsample(original_data, sample_size)

Метод 2: стратифицированная выборка

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

from sklearn.model_selection import train_test_split
def stratified_sampling(data, labels, sample_size):
    _, _, _, downsampled_labels = train_test_split(data, labels, train_size=sample_size, stratify=labels)
    return downsampled_labels
# Usage example
original_data = [...]  # Your original dataset
original_labels = [...]  # Labels corresponding to the original dataset
sample_size = 1000
downsampled_labels = stratified_sampling(original_data, original_labels, sample_size)

Метод 3: понижение разрешения на основе кластеров

Понижение выборки на основе кластеров подходит для наборов данных с пространственным или временным компонентом. Этот метод включает кластеризацию точек данных и выбор репрезентативных выборок из каждого кластера. Для этого библиотека scikit-learn предоставляет различные алгоритмы кластеризации. Вот пример использования кластеризации K-средних:

from sklearn.cluster import KMeans
def cluster_based_downsampling(data, sample_size):
    kmeans = KMeans(n_clusters=sample_size)
    kmeans.fit(data)
    cluster_centers = kmeans.cluster_centers_
    return cluster_centers
# Usage example
original_data = [...]  # Your original dataset
sample_size = 1000
cluster_centers = cluster_based_downsampling(original_data, sample_size)

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